class PlantBase { Vector2D position; float size; float angle; float pulseAngle, pulseSize, prevPulseSize, prevPulseSizeDelta; float sineSpeed; float health = 100; float size2; public PlantBase(Vector2D position_, float size_, float sineSpeed_) { sineSpeed = sineSpeed_; position = position_; size = size_; angle = 0; } public void update(int i) { collideWithBullets(); pulseAngle += sineSpeed; pulseSize = sin(pulseAngle); Vector2D walkPos = new Vector2D(hero.x, hero.y); angle += 0.01; if (position.isCirclePointCollision(size + 200, walkPos)) { calcAngle(); if (pulseSize > 0.30 && prevPulseSizeDelta > 0 && (pulseSize - prevPulseSize) < 0) { plantBullets[plantBulletsCount] = new PlantBullet(new Vector2D(position), angle, 1); plantBulletsCount ++; } } prevPulseSizeDelta = pulseSize - prevPulseSize; prevPulseSize = pulseSize; } public void draw() { size2 = size / (1.0 + (1.0 - (health/100.0))); pushMatrix(); translate(position.getX(), position.getY()); strokeWeight(1); stroke(40, 80, 40); ellipse(0, 0, size2 - sin(pulseSize)*2, size2 - sin(pulseSize)*2); rotate(angle); stroke(40, 70, 40); ellipse(size2/6, 0, size2/3 + sin(pulseSize)*5, size2/3 + sin(pulseSize)*5); strokeWeight(1); //rotate(angle); //ellipse(position.getX(), position.getY(), size, size); popMatrix(); } public void calcAngle() { Vector2D walkPos = new Vector2D(hero.x, hero.y); //float p = walkPos.getY();// position.getY(); //p = position.getX(); angle = atan2(walkPos.getY() - position.getY(), walkPos.getX() - position.getX()); } int clean(int i) { if (health < 0) { //warn this is global variable - array of all BugBase-s plants = removeArrayItem(i, plants); return 1; } return 0; } void collideWithBullets() { //check for collisions with bullets and react on it for (int ib=0; ib