import java.util.List; import toxi.geom.*; import controlP5.*; //------------------------------------------------------------------------------------------- Tracker a; ControlP5 cp5; GUI cgui; Path tempPath; Vec3D locStart; Vec3D triggerLoc = new Vec3D(0, 0, 0); boolean simulate; boolean diagram,drawFutureLoc,addNew; boolean drawPaths = true; boolean spawnEdge = true; int resetAmount = 0; int agentCount = 100; int triggerCount = 0; int pathCount = 10; float stepCount = 0; List<Tracker> agentList; ArrayList<Vec3D>childSpawners; ArrayList childSpawnType; ArrayList<Path> pathList; //------------------------------------------------------------------------------------------- //---------------------------------------Settings-------------------------------------------- //------------------------------------------------------------------------------------------- void settings() { size(1800, 1000, FX2D); smooth(); } //------------------------------------------------------------------------------------------- //---------------------------------------Setup----------------------------------------------- //------------------------------------------------------------------------------------------- void setup() { background(0); this.agentList = new ArrayList<Tracker>(); this.childSpawners = new ArrayList<Vec3D>(); this.childSpawnType = new ArrayList(); this.pathList = new ArrayList<Path>(); this.simulate = true; if (this.resetAmount == 0) { this.cgui = new GUI(); this.cgui.run(this); } for (int pth = 0; pth < this.pathCount; pth++) { newPath(); } for (int i = 0; i < this.agentCount; i ++) { Vec3D speed; if (this.spawnEdge) { this.locStart = new Vec3D(0, random(height), 0); speed = new Vec3D(1, 0, 0); } else { this.locStart = new Vec3D(random(width), random(height), 0); speed = new Vec3D(random(-1, 1), random(-1, 1), 0); } this.a = new Tracker(this.locStart, speed, true, "parent", "main"); this.agentList.add(this.a); } } //------------------------------------------------------------------------------------------- //---------------------------------------Draw------------------------------------------------ //------------------------------------------------------------------------------------------- void draw() { background(0); this.spawnEdge = this.cgui.t0.getState(); this.agentCount = (int)this.cgui.s7.getValue(); for (Path pths : pathList) { if (drawPaths) { pths.display(); } pths.radius = this.cgui.s0.getValue(); } for (Tracker ag : this.agentList) { ag.wanderD = this.cgui.sw1.getValue(); ag.wanderR = this.cgui.s1.getValue(); ag.wanderT = this.cgui.sw3.getValue(); ag.wanderTVal = this.cgui.sw2.getValue(); ag.maxforce = this.cgui.s6.getValue(); ag.max = this.cgui.s5.getValue(); ag.amp = this.cgui.s9.getValue(); ag.vel = this.cgui.s4.getValue(); ag.maxDist = this.cgui.s2.getValue(); ag.r = this.cgui.s3.getValue(); ag.maxChildren = (int)this.cgui.s8.getValue(); ag.run(); } if (this.childSpawners.size() > 0) { newDude(); this.childSpawners = new ArrayList<Vec3D>(); this.childSpawnType = new ArrayList(); } this.stepCount++; } //------------------------------------------------------------------------------------------- //---------------------------------------Create New Path------------------------------------- //------------------------------------------------------------------------------------------- void newPath() { this.tempPath = new Path(); this.tempPath.addPoint(random(30, 300), random(height/4, height)); this.tempPath.addPoint(random(101, width/2), random(0, height)); this.tempPath.addPoint(random(width/2, width), random(0, height)); this.tempPath.addPoint(random(width-100, width), height/2); this.pathList.add(this.tempPath); } //------------------------------------------------------------------------------------------- //---------------------------------------Keys------------------------------------------------ //------------------------------------------------------------------------------------------- void keyPressed() { if (key == 'R') { this.resetAmount ++; this.triggerCount = 0; setup(); } if (key == 'S') this.simulate = !this.simulate; if (key == 'W') newPath(); if (key == 'Q') this.drawFutureLoc = !this.drawFutureLoc; if (key == 'Q') this.diagram = !this.diagram; if (key == 'P') this.drawPaths = !this.drawPaths; if (key == 'I') saveFrame("img-######.png"); } //------------------------------------------------------------------------------------------- //----------------------------------BabyMakers----------------------------------------------- //------------------------------------------------------------------------------------------- void newDude() { int babyCount = 0; for (Vec3D px : this.childSpawners) { Vec3D speed; if (this.spawnEdge) { speed = new Vec3D(1, 0, 0); } else { speed = new Vec3D(random(-1, 1), random(-1, 1), 0); } if ((int)this.childSpawnType.get(babyCount) % 2 == 0) { this.agentList.add(new Tracker(new Vec3D(px), speed, false, "child", "w_a")); } else { this.agentList.add(new Tracker(new Vec3D(px), speed, false, "child", "w_b")); } babyCount++; } } Update