import rita.*; import java.util.List; String ALPHA_USED = "abcdefghijklmnopqrstuvwxyz"; char SPACE = ' '; String [] supplyText,lastBuoyancy,lastKeyBuoyancy; List passages = new ArrayList(); int numOfPassages = 0; RiGrammar letterGrammar, passageGrammar; int lastSecond = 0; Passage [] passage; void setup() { size(768, 576); RiText.setDefaultFont("BordofixedBold-16.vlw"); letterGrammar = new RiGrammar(this, "literalalts.g"); passageGrammar = new RiGrammar(this, "passages.g"); supplyText = loadStrings("shangguanyi.txt"); passages.add(new ArrayList()); for (int i = 0; i < supplyText.length; i++) { if (supplyText[i].equals("")) { passages.add(new ArrayList()); numOfPassages++; } else { List myList = (List)passages.get(numOfPassages); myList.add(supplyText[i]); } } println("numOfPassages = "+numOfPassages); // println("passages = "+passages.toString()); passage = new Passage[numOfPassages+1]; lastBuoyancy = new String[numOfPassages+1]; lastKeyBuoyancy = new String[numOfPassages+1]; // instaniate i x Passage objects, with an offset for the first ... int xOff=80, yOff=40; for (int i = 0; i <= numOfPassages; i++) { List myList = (List)passages.get(i); supplyText = (String[])myList.toArray(new String[0]); // lastBuoyancy will contain an array of the initial grammar-picked states of the passages lastBuoyancy[i] = passageGrammar.expandFrom(""); lastKeyBuoyancy[i] = "<" + lastBuoyancy[i] + passageGrammar.expandFrom("") + ">"; passage[i] = new Passage(this, supplyText,lastBuoyancy[i],xOff,yOff); // ... and then leaving a blank line between the passages yOff +=((supplyText.length+1)*17); } // RiText.setFont("BordofixedBold-18.vlw"); RiText.setAlignment(LEFT); RiText.setColor(255); } void draw() { background(0); if ((millis() - lastSecond) > 6000) { lastSecond = millis(); for (int i = 0; i <= numOfPassages; i++) { lastBuoyancy[i] = passage[i].getBuoyancy(); // println("lastBuoyancy[i] " + lastBuoyancy[i]); // assembling a key from lastBuoyancy and a 'proposed' random buoyancy ... String keyBuoyancy = "<" + lastBuoyancy[i] + passageGrammar.expandFrom(lastKeyBuoyancy[i]) + ">"; lastKeyBuoyancy[i] = keyBuoyancy; // allows us to use the grammar to weight changes of buoyancy ... print(keyBuoyancy+" -> "); passage[i].setBuoyancy(passageGrammar.expandFrom(keyBuoyancy)); // if (passage[i].getBuoyancy().equals("sink")) // passage[i].setBuoyancy("surface"); // ... such that some states will persist and some will change fast (I think) passage[i].showPhase(); } println(); } }