Im trying to get the nextWave function to run in the Myworld class. However it doesn't seem to like it :(
Here is the MyWorld code, im struggling to get to grips with the whole OOP thing. Hopefully someone can help.
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;
import java.util.ArrayList;
public class Wave_management extends Actor
{
private WaveManager waveManager; // Reference to WaveManager
public Wave_management(World world) {
waveManager = new WaveManager(world, Enemy.class); // Instantiate WaveManager with the world
}
public void nextWave() {
waveManager.nextWave();
}
public class WaveManager {
private int currentWave; //current wave number
private int enemiesToSpawn; //Number of enemies left to spawn in the wave
private int enemiesAlive;
private int spawnInterval;
private int spawnTimer;
private int waveSize;
private int wavePos;
private World world;
private WaveManager waveManager;
public void nextWave() {
waveManager.nextWave(); // Delegate the call to WaveManager
}
public WaveManager(World world, Class<? extends Actor> enemyClass){
currentWave = 0;
this.world = world;
enemiesAlive = 0;
spawnInterval = 50; //gonna leave it at 50 may change later.
spawnTimer = 0;
waveSize = 5;
}
public void nextWave(){
currentWave = currentWave+1;
if(currentWave <10){
enemiesToSpawn = waveSize*5;
if(enemiesToSpawn>0){
spawnEnemy();
spawnEnemy(); // spawn double in the final 3 to increase diff at end of waves
}
if(enemiesToSpawn>3){
spawnEnemy();
}
waveSize = waveSize+2;
}
}
public void spawnEnemy(){
int x, y;
//Randomly decide which border the enemy will spawn on
int border = Greenfoot.getRandomNumber(4); // 0-Top, 1-Bottom, 2-Left, 3-Right
if (border == 0) {
x = Greenfoot.getRandomNumber(650 - 150) + 150; // Range: 150 to 650
y = 150; // Fixed at the top boundary
} else if (border == 1) {
x = Greenfoot.getRandomNumber(650 - 150) + 150; // Range: 150 to 650
y = 650;
} else if (border == 2) {
x = 150;
y = Greenfoot.getRandomNumber(650 - 150) + 150; // Range: 150 to 650
} else { // Right border
x = 650; // Fixed at the right boundary
y = Greenfoot.getRandomNumber(650 - 150) + 150; // Range: 150 to 650
}
//Spawn the enemy at the position
Enemy enemy = new Enemy();
world.addObject(enemy, x, y);
}
}
//Need a nextwave function, which includes spawning enemies
public void act()
{
}
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class MyWorld extends World
{
private Wave_management waveManager;
public MyWorld()
{
// Create a new world with 600x400 cells with a cell size of 1x1 pixels.
super(800, 800, 1);
waveManager = new Wave_management();
addObject(waveManager, 0, 0);
prepare();
}
public void act() {
waveManager.nextWave();
}
private void prepare()
{
Main_Character main_Character = new Main_Character();
addObject(main_Character,312,197);
Enemy enemy = new Enemy();
addObject(enemy,431,49);
}
}
