Hi all, I have been working on a small TD game for a while now and am struggling with a good way to spawn in my creeps after a delay (it is worth mentioning and probably obvious, that I am new to Unity.)
The CreepManager class below uses a switch statement to determine which creep gameObject (from an array) is due to be spawned in. I believe the invoke delay is working but am unsure, the main problem lies in that instead of the switch statement starting the movement of each individual creep, one after they other, they all go at once and as a result clip through one another.
I am aware that much of the code (particularly in the switch statement) and is optimized and untidy, but will be sorted out later after my core functionality is down.
Help anyone could provide would be great and should you have any questions do not hesitate to ask! Thanks
using UnityEngine;
using System.Collections;
public class CreepManager : MonoBehaviour {
public static bool beginNextRound;
// Use this for initialization
void Start ()
{
beginNextRound = false;
}
// Update is called once per frame
void Update ()
{
if(beginNextRound == true)
{
if(GameController.nextCreep <= 9)
{
//spawn next creep
Invoke("sendNextCreep", 4);
}
}
else
{
GameController.nextCreep = 0;
}
}
void sendNextCreep()
{
switch(GameController.nextCreep)
{
case 0:
GameController.creepsOnMap[0].renderer.enabled = true;
GameController.creepsOnMap[0].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 1;
break;
case 1:
GameController.creepsOnMap[1].renderer.enabled = true;
GameController.creepsOnMap[1].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 2;
break;
case 2:
GameController.creepsOnMap[2].renderer.enabled = true;
GameController.creepsOnMap[2].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 3;
break;
case 3:
GameController.creepsOnMap[3].renderer.enabled = true;
GameController.creepsOnMap[3].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 4;
break;
case 4:
GameController.creepsOnMap[4].renderer.enabled = true;
GameController.creepsOnMap[4].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 5;
break;
case 5:
GameController.creepsOnMap[5].renderer.enabled = true;
GameController.creepsOnMap[5].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 6;
break;
case 6:
GameController.creepsOnMap[6].renderer.enabled = true;
GameController.creepsOnMap[6].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 7;
break;
case 7:
GameController.creepsOnMap[7].renderer.enabled = true;
GameController.creepsOnMap[7].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 8;
break;
case 8:
GameController.creepsOnMap[8].renderer.enabled = true;
GameController.creepsOnMap[8].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
GameController.nextCreep = 9;
break;
case 9:
GameController.creepsOnMap[9].renderer.enabled = true;
GameController.creepsOnMap[9].GetComponent<Creep>().startMovement();
print ("creep" + GameController.nextCreep + " has started moving");
//closes the loop until next wave
GameController.nextCreep = 0;
beginNextRound = false;
break;
default:
print ("problem within CreepManager's switch statement!");
beginNextRound = false;
break;
}
}
}