/* * Sub KLASSE Demolierer * * sie graben die wege wieder um * generiert neuen demolierer wenn sie zu tun haben * wenn 4 oder mehr demolierer einander nahe sind, ruft dies einmal einen graber auf den plan * wenn 4 oder mehr graber in der nähe sind, stirbt der demolierer ab * */ class AgentDemolierer extends Agent { color meineFarbe = #FF00FF; int amDemolieren = 0; AgentDemolierer(float x, float y,float s, float a, float to) { xPos = x; yPos = y; speed = s; angle = a; torkeln = to; } AgentDemolierer(float x, float y,float s, float a) { xPos = x; yPos = y; speed = s; angle = a; } // Methode - -------------------------------------- void drawme() //Methode der Klasse { actions(); if(loaded==true){stroke(255);}else{noStroke();} fill(meineFarbe); ellipse(xPos,yPos,6,6); } // Methode - zeichnet den agenten void actions() { float radian = angle *PI/180; xPos += speed * sin(radian);//+random(-torkeln,torkeln)); yPos += speed * cos(radian);//+random(-torkeln,torkeln)); randCollision(); wiegehtesmir(); wegeDemolieren(); } // Methode - enstehen oder löschen eines demolierers anhand der umgebung oder ob er am wege demolieren ist void wiegehtesmir() { if(findAgent(graberListe)>=3&&demoliererListe.size()>0&&loaded == false) { AgentDemolierer currDemolierer= (AgentDemolierer)demoliererListe.get(meineID); demoliererListe.remove(currDemolierer); } if(amDemolieren>=30) { amDemolieren =0; AgentDemolierer newAgent = new AgentDemolierer(xPos,yPos,2,random(0,360),0); demoliererListe.add(newAgent); } if(graberListe.size()<5) { if(findAgent(demoliererListe)>=4) { AgentGraber newAgent = new AgentGraber(xPos,yPos,2,random(0,360),0); graberListe.add(newAgent); } } } // Methode - nimmt von den wegen information aus dem array und lädt es an der nächsten stelle ab void wegeDemolieren() { int pixx = (int)(xPos/kg); int pixy = (int)(yPos/kg); distance=calcDistance((float)xPos,(float)yPos); if (distance<=wegBreite) { if ((int)FarbenPalette[pixx][pixy]==wegHoehe && FarbenPalette[pixx][pixy]>=20 && loaded == false) { aufgenommen = 20; FarbenPalette[pixx][pixy]-=20; loaded =true; amDemolieren+=1; } if (FarbenPalette[pixx][pixy]==wegHoehe && loaded == true) { if(FarbenPalette[pixx][pixy]+aufgenommen>=255) { aufgenommen=FarbenPalette[pixx][pixy]+aufgenommen-255; FarbenPalette[pixx][pixy]=255; loaded= true; } else { FarbenPalette[pixx][pixy]+=aufgenommen; loaded = false; amDemolieren+=1; } } } } }