I think i got it right... But please confirm that....
But now i get a NullPointerException like before the adjustment in the line:
in activateBomb()...
Here is my HealthGUI code if helpful:
import greenfoot.*;
import java.util.*;
public class BombNew extends Actor
{
private int direction;
private Player summoner;
private Player opponent;
private int timer;
private double speed = 100;
public BombNew(int dir, Player player) {
direction = dir;
summoner = player;
}
public void act() {
//Movement
speed *= 0.98;
setRotation(direction);
move((int)speed);
Wall wall = (Wall) getOneIntersectingObject(Wall.class);
if(wall != null) {
//switch direction 180 degrees
direction = (direction+180)%360;
speed *= 0.75;
move((int)speed);
}
setRotation(0);
//Opponent Intersection
java.util.List<Player> pSeen = getIntersectingObjects(Player.class);
for (Object obj : getObjectsInRange(60, Player.class)) if (obj != summoner) opponent = (Player)obj;
if (opponent != null) activateBomb();
//Exploding
activateBomb();
}
public void activateBomb() {
Star star = new Star();
getWorld().addObject(star, this.getX(), this.getY());
//subtract one heart
Greenfoot.playSound("LoseLife.mp3");
HealthGUI opponentHealthGUI = opponent.getHealthGUI();
opponentHealthGUI.setLife(opponentHealthGUI.getLife()-1);
//respawn the opponent
getWorld().removeObject(opponent);
getWorld().addObject(opponent, Greenfoot.getRandomNumber(900+1),Greenfoot.getRandomNumber(600+1));
/**
* TODO: get some delay in to show the exploding bomb (bomb+star) before removing both
*/
Greenfoot.playSound("BombExplode.wav");
getWorld().removeObject(this);
summoner.setIsBombThrown(false);
}
}
HealthGUI opponentHealthGUI = opponent.getHealthGUI();
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class HealthGUI extends Actor
{
private int life = 3;
GreenfootImage playerTwoThreeHeart = new GreenfootImage("PlayerTwoThreeHeart.png");
GreenfootImage playerTwoTwoHeart = new GreenfootImage("PlayerTwoTwoHeart.png");
GreenfootImage playerTwoOneHeart = new GreenfootImage("PlayerTwoOneHeart.png");
//TODO: Still misses playerOne images - implement them in the future!
public int getLife() {
return this.life;
}
public void setLife(int life) {
this.life = life;
}
public void act(){
switch(life ) {
case 3:
setImage(playerTwoThreeHeart);
break;
case 2:
setImage(playerTwoTwoHeart);
break;
case 1:
setImage(playerTwoOneHeart);
break;
default:
GameWorld guiWorld = (GameWorld) getWorld();
guiWorld.removeAll();
Greenfoot.playSound("Lose.wav");
Greenfoot.stop();
}
}
}
