No errors in my code, no problems with timers decrementing, it's just the world not changing. Any ideas of why the world is not setting?
World class code (act method is at the bottom - you can see the conditions I put for my if statement):
And here's the timer class code just in case:
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Galaxy here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Galaxy extends World
{
private GreenfootImage title = new GreenfootImage("Space Rush.png");
private GreenfootImage bg = getBackground();
private Score score;
private Timer timer;
private Spacecraft spacecraft;
private HealthBar healthBar;
private Picture logo;
private int asteroidCounter, speedCounter, healthCounter = 0;
public Galaxy()
{
super(1000, 900, 1);
logo = new Picture(title,2,2);
timer = new Timer();
spacecraft = new Spacecraft();
score = new Score();
healthBar = new HealthBar(300, 20, spacecraft);
prepare();
}
public Galaxy(Spacecraft sc, HealthBar hb, Picture p, Score s)
{
super(1000, 900, 1);
this.spacecraft = sc;
this.healthBar = hb;
this.logo = p;
this.score = s;
prepare();
}
private void prepare()
{
addObject(logo, getWidth()/2, getHeight()/10);
addObject(timer, getWidth()/2 - getWidth()/3, getHeight()/15);
addObject(spacecraft,getWidth()/5,getHeight()/2);
addObject(score, getWidth()/2 + getWidth()/3, getHeight()/15);
addObject(healthBar, getWidth()/2, getHeight() - getHeight()/22);
bg.setColor(Color.WHITE);
bg.drawRect(0, 115, getWidth(), 15);
bg.drawRect(0, 800, getWidth(), 15);
bg.setColor(new Color(83, 64, 34));
bg.fillRect(0, 116, getWidth(), 14);
bg.fillRect(0, 801, getWidth(), 14);
}
public void scoreOverTime()
{
if(timer.getTimeLeft() > 0 && timer.getInitialCount() <= 0)
{
score.addScore(1);
}
}
public Score getScore()
{
return score;
}
/*
* Adds asteroids into the world, controlling the randomization
* and delay between asteroids spawned
*/
public void addingAsteroid()
{
asteroidCounter++;
if(Greenfoot.getRandomNumber(30) < 1 && asteroidCounter > 10 )
{
addObject(new Asteroid(), getWidth(), getRandomNumber(160, 760));
asteroidCounter = 0;
}
}
/*
* Adds speed boosts into the world, controlling the randomization
* and delay between speed boosts spawned
*/
public void addingSpeedPowerup()
{
speedCounter++;
if(Greenfoot.getRandomNumber(500) < 1 && speedCounter > 350)
{
addObject(new Speed(), getWidth(), getRandomNumber(160, 760));
speedCounter = 0;
}
}
public void addingHealthPowerup()
{
healthCounter++;
if(Greenfoot.getRandomNumber(300) < 1 && healthCounter > 500)
{
addObject(new Health(), getWidth(), getRandomNumber(160, 760));
healthCounter = 0;
}
}
public int getRandomNumber(int start,int end)
{
int normal = Greenfoot.getRandomNumber(end-start+1);
return normal+start;
}
public int getDelay()
{
return timer.getDelayLvl2();
}
public void act()
{
if(timer.getInitialCount() <= 0)
{
if(timer.getTimeLeft() > 0)
{
addingAsteroid();
addingSpeedPowerup();
addingHealthPowerup();
if(timer.getDelayLvl2() <= 0)
{
Greenfoot.setWorld(new Galaxy(spacecraft, healthBar, logo, score));
}
}
}
scoreOverTime();
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Timer here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Timer extends UI
{
public int initialCount = 660;
public int timeLeft = 3660;
public int delayLvl2 = 320;
public int getInitialCount()
{
return initialCount/60;
}
public int getTimeLeft()
{
return timeLeft/60;
}
public int getDelayLvl2()
{
return delayLvl2/60;
}
public void displayTimers()
{
initialCount--;
setImage(new GreenfootImage("GAME STARTS IN: " + getInitialCount(), 25, Color.WHITE, new Color(0,0,0,0)));
if(initialCount <= 0)
{
timeLeft--;
if (getTimeLeft() == 60)
{
setImage(new GreenfootImage("TIME REMAINING: 1:00", 25, Color.WHITE, new Color(0,0,0,0)));
}
else if(getTimeLeft() < 60)
{
displayTimeLeft();
}
if(getTimeLeft() <= 0)
{
nextLvlMsg();
if(getTimeLeft() <= -5)
{
delayLvl2--;
nextLvlTime();
}
}
}
}
public void displayTimeLeft()
{
setImage(new GreenfootImage("TIME REMAINING: " + getTimeLeft(), 25, Color.WHITE, new Color(0,0,0,0)));
}
public void nextLvlTime()
{
setImage(new GreenfootImage("NEXT LEVEL BEGINS IN: " + getDelayLvl2(), 25, Color.WHITE, new Color(0,0,0,0)));
}
public void nextLvlMsg()
{
setImage(new GreenfootImage("Level Complete!", 25, Color.WHITE, new Color(0,0,0,0)));
}
public void act()
{
displayTimers();
}
}



