123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import java.lang.Double;
-
- class Citizen {
- int i_xSpawn, i_ySpawn, i_diameter;
- boolean b_linked;
- boolean b_moving;
- int i_home;
- String S_name;
- float f_xPos, f_yPos;
- float f_movementSpeed = 10;
- //0-100:
- //motivation (bei arbeiter montag ~40, freitag ~80 - 100)
- //7 emotionen?
-
- // berufsfeld: webdesigner, pädagoge, schmuckdesigner, schmied
- // berufsstatus: beamter, selbstständiger, unternehmer, angestellter, grundschüler, gymnasiast, hauptschüler, realschüler, azubi, student, rentner
-
- // identität: gelbhemd, lokal, regional, national, international, fremd,
-
-
-
-
-
-
- Citizen(int home, String name) {
- i_home = home;
- S_name = name;
- i_diameter = 15;
-
- pathFinder = makePathFinder(gs, pathAlgorithm);
- }
-
- void spawn(int house) {
- PVector v2_spawnPoint = houses.get(house).v2_randomSpawnPoint();
- i_xSpawn = int(v2_spawnPoint.x);
- i_ySpawn = int(v2_spawnPoint.y);
- f_xPos = i_xSpawn;
- f_yPos = i_ySpawn;
- rNodes = pathFinder.getRoute();
-
- if (b_randomRun) goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
- b_linked = true;
- }
-
- void despawn() {
- b_linked = false;
- }
-
-
- boolean b_moveDiagonally() {
- if (int(rNodes[nextNode].xf()) != int(f_xPos) && int(rNodes[nextNode].yf()) != int(f_yPos)) {
- return true;
- } else {
- return false;
- }
- }
- int i_direction(float f, float v) {
- if (f <= 0-v) return -1;
- else if (f >= 0+v) return 1;
- else return 0;
- }
-
- void update() {
- if (b_moving) { //if rNodes.length > 0
- if (rNodes.length > nextNode) {
-
- float f_xPosNext = rNodes[nextNode].xf();
- float f_yPosNext = rNodes[nextNode].yf();
-
- float f_movementVelo = f_movementSpeed;
-
- if (b_moveDiagonally()) f_movementVelo = f_movementVelo / 1.41;
- f_xPos += i_direction(f_xPosNext-f_xPos, f_movementVelo) * f_movementVelo;
- f_yPos += i_direction(f_yPosNext-f_yPos, f_movementVelo) * f_movementVelo;
-
-
- if (abs(f_yPos - f_yPosNext) < f_movementVelo && abs(f_xPos - f_xPosNext) < f_movementVelo) {
- f_yPos = f_yPosNext;
- f_xPos = f_xPosNext;
- nextNode++;
- }
- } else {
- b_moving = false;
- nextNode = 0;
- if (b_randomRun)goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
- }
- }
- }
-
- void display() {
- //draw Route
- if (rNodes.length >= 2 && (b_drawPathLine || b_drawPathDestination)) {
- pg_map.pushStyle();
- if (b_drawPathLine) {
- pg_map.stroke(color(100, 100, 100));
- pg_map.strokeWeight(1);
- pg_map.noFill();
- for (int i = 1; i < rNodes.length; i++)
- pg_map.line(rNodes[i-1].xf(), rNodes[i-1].yf(), rNodes[i].xf(), rNodes[i].yf());
- }
- if (b_drawPathDestination) {
- pg_map.stroke(160, 0, 0);
- pg_map.fill(255, 0, 0);
- pg_map.ellipse(rNodes[rNodes.length-1].xf(), rNodes[rNodes.length-1].yf(), nodeSize, nodeSize);
- }
- pg_map.popStyle();
- }
- pg_map.ellipse(f_xPos, f_yPos, i_diameter, i_diameter);
- pg_map.textSize(10);
- pg_map.text(S_name, f_xPos, f_yPos-10);
- }
-
- GraphNode startNode, endNode;
- int startNodeID, endNodeID;
- GraphNode[] rNodes;
- ArrayList<GraphNode> rNodesList = new ArrayList<GraphNode>();
- int nextNode;
-
- IGraphSearch pathFinder;
- int pathAlgorithm = i_pathAlgorithm;
-
- void goTo(int x, int y) {
- //add: go to node? go to house?
- float nodeDistance = 1.0f;
- while (gs.getNodeAt(f_xPos, f_yPos, 0, nodeDistance) == null) {
- nodeDistance++;
- }
- startNodeID = gs.getNodeAt(f_xPos, f_yPos, 0, nodeDistance).id();
- nodeDistance = 1.0f;
- while (gs.getNodeAt(x, y, 0, nodeDistance) == null) {
- nodeDistance++;
- }
- endNodeID = gs.getNodeAt(x, y, 0, nodeDistance).id();
-
- pathFinder.search(startNodeID, endNodeID, true); //returns null if no route is found
-
- rNodes = pathFinder.getRoute();
-
- if (rNodes.length > 0) {
- nextNode = 0;
- b_moving = true;
-
- for (int i = 0; i < rNodes.length; i++) {
- rNodesList.add(rNodes[i]);
- }
- } else {
- if (b_randomRun) goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
- }
- }
- }
|