//This is the wanderer class - these guys wander around, grouping together with their leader. //If the leader is killed, the next follower in line takes up the mantle //If a wanderer comes upon a pixel occupied by an enemy, a battle ensues. class Wanderer { float xv, yv, friction, health; int x,y,leadernumber, id; boolean leader, alive; color thecolor; Wanderer(int xpos, int ypos, boolean isleader, int leadernum, color c, int idnum) { xv =random(-0.1,0.1); yv = random(-0.1,0.1); x = xpos; y = ypos; leader = isleader; friction = 0.92; leadernumber = leadernum; thecolor = c; id = idnum; alive = true; health = 100; }; void update() { if (y > 0 && y < height && x > 0 && x < width) { int point = (y * width) + x; grid[point] = -1; }; x += xv; y+= yv; xv += random(-1,1.1); yv += random(-1,1.1); xv *= friction; yv *= friction; if (!leader) { xv += (wanderers[leadernumber].x - x)/20; yv += (wanderers[leadernumber].y - y)/20; if (!wanderers[leadernumber].alive) { wanderers[leadernumber] = this; leader = true; }; }; if (y > 0 && y < height && x > 0 && x < width) { int point = (y * width) + x; if (grid[point] != -1 && wanderers[grid[point]].thecolor != thecolor) { battle(this, wanderers[grid[point]]); } else { grid[point] = id; }; }; }; void display() { if (leader) { tpoint(x,y,thecolor,0.33); } else { tpoint(x,y,thecolor,0.001); }; }; void die() { alive = false; wanderers[leadernumber].xv *= 0.9; wanderers[leadernumber].yv *= 0.9; }; };