/* * Sub KLASSE Graber * * graben das terrain anhand der wege um * nehmen terrain, das auf dem weg ist und höher als der weg ist, auf und laden es an einer tieferen stelle des weges ab * falls zu wenig material vorhanden ist, wird die zulössige höhe des weges gesenkt * falls zu viel material vorhanden ist, wird die zulässige höhe angehoben * wenn er zu tun hat, ensteht ein neuer agent * wenn er nichts zu tun hat, stirbt er ab * generiert einen demolierer, wenn der letzte graber stirbt * */ class AgentGraber extends Agent { color meineFarbe = #FF0000; int habzutun = 0; float wegCounter = 0; AgentGraber(float x, float y,float s, float a, float to) { xPos = x; yPos = y; speed = s; angle = a; torkeln = to; } AgentGraber(float x, float y,float s, float a) { xPos = x; yPos = y; speed = s; angle = a; } // Methode - überschreibt drawme(), neues element mit stroke/nostroke um ladezustand anzuzeigen void drawme() { actions(); //if(loaded==true){stroke(aufgenommen);}else{noStroke();} //variante, aber ueberinformation if(loaded==true){stroke(255);}else{noStroke();} fill(meineFarbe); ellipse(xPos,yPos,6,6); } // Methode - welche aktionen/überprüfungen ausgeführt werden sollen void actions() { float radian = angle *PI/180; xPos += speed * sin(radian); yPos += speed * cos(radian); randCollision(); schiebePixel(); habzutun(); } // Methode - verschiebt das terrain, dh lädt information bei den wegen ab wenn dort das terrain zu tief ist. aufladen wenn es zu hoch ist. void schiebePixel() { int pixx = (int)(xPos/kg); int pixy = (int)(yPos/kg); distance=calcDistance(xPos,yPos); if (distance<=wegBreite) { if (FarbenPalette[pixx][pixy]>wegHoehe) { if (loaded == false) { aufgenommen+=FarbenPalette[pixx][pixy]-wegHoehe; FarbenPalette[pixx][pixy]=wegHoehe; habzutun +=100; loaded = true; } else if (loaded == true && aufgenommen+FarbenPalette[pixx][pixy]-wegHoehe<=255) { aufgenommen+=FarbenPalette[pixx][pixy]-wegHoehe; FarbenPalette[pixx][pixy]=wegHoehe; habzutun +=1; loaded = true; } } if (FarbenPalette[pixx][pixy]=wegHoehe-FarbenPalette[pixx][pixy]) { aufgenommen-=wegHoehe-FarbenPalette[pixx][pixy]; FarbenPalette[pixx][pixy]=wegHoehe; loaded = true; } if (aufgenommenwegBreite && distance<=wegBreite+i) { if (FarbenPalette[pixx][pixy]>wegHoehe+5*i) { if (loaded == false) { aufgenommen+=FarbenPalette[pixx][pixy]-(wegHoehe+5*i); FarbenPalette[pixx][pixy]=wegHoehe+5*i; habzutun +=100; loaded = true; } else if (loaded == true && aufgenommen+FarbenPalette[pixx][pixy]-(wegHoehe+5*i)<=255) { aufgenommen+=FarbenPalette[pixx][pixy]-(wegHoehe+5*i); FarbenPalette[pixx][pixy]=wegHoehe+5*i; habzutun +=50; loaded = true; } } if (FarbenPalette[pixx][pixy]=wegHoehe-5*i-FarbenPalette[pixx][pixy]) { aufgenommen-=wegHoehe-5*i-FarbenPalette[pixx][pixy]; FarbenPalette[pixx][pixy]=wegHoehe-5*i; loaded = true; } if (aufgenommen= wegHoehe && distance < wegBreite) { mainCounter +=2; } if (loaded == false && FarbenPalette[pixx][pixy] < wegHoehe && distance < wegBreite) { if(graberListe.size()<2) { mainCounter -=20;}else { mainCounter -=10; } } if (mainCounter < -300) { wegHoehe -=1; mainCounter = 0; } if (mainCounter > 1000) { wegHoehe +=1; mainCounter = 0; } //println (wegHoehe + " " + graberListe.size() + " " + aufgenommen + " " + mainCounter + " " + habzutun); } // Methode - -------------------------------------- void habzutun() { if(habzutun>300 && graberListe.size()0&&!loaded) { if(graberListe.size()==1) { if(habzutun<-500) { AgentGraber currGraber= (AgentGraber)graberListe.get(meineID); graberListe.remove(currGraber); int xA=(int)random(bildRand,screen_x-bildRand); int yA=(int)random(bildRand,screen_y-bildRand); AgentDemolierer newAgent = new AgentDemolierer(xA,yA,2,random(0,360),0); demoliererListe.add(newAgent); habzutun=0; } }else{ AgentGraber currGraber= (AgentGraber)graberListe.get(meineID); graberListe.remove(currGraber); } } } }