// Update is called once per frame void Update() { threats.RemoveAll(threat => threat == null); if (!AnyZombosLeft()) { //Remove all dead zombos foreach (var ro in BoidsManager.robotZombies) { if (ro.GetComponent <BoidStats>().squished) { DestroyImmediate(ro); numSquished++; } } BoidsManager.robotZombies.RemoveAll(zombo => zombo == null); //Reset standard values BoidsManager.SetHasAttacked(false); int checkEnoughZombos = 0; foreach (var zombo in BoidsManager.robotZombies) { if (zombo.active == false) { zombo.SetActive(true); zombo.transform.position = BoidsManager.GetComponent <RobotZombieBehaviour>().getRandomSpawn(); zombo.GetComponent <Rigidbody>().velocity = Vector3.zero; zombo.GetComponent <BoidStats>().hasBred = false; checkEnoughZombos++; } } if (checkEnoughZombos < minimumZombies) { Application.LoadLevel(3); } BoidsManager.GetComponent <RobotZombieBehaviour>().fleeForce = 0; //Breeding breeding = true; foreach (var obj in GameObject.FindGameObjectsWithTag("Attack")) { Destroy(obj); } foreach (var obj in FindObjectsOfType <ThreatValue>()) { Destroy(obj.gameObject); } breedTimer = new Timer(mxBreedTime); //calculate distance from goal if there is one } if (breeding) { if (breedTimer.Trigger()) { foreach (var zombot in BoidsManager.robotZombies) { zombot.GetComponent <NavMeshAgent>().enabled = false; } roundNumber++; breeding = false; foundMatches = false; barriers.SetActive(false); FindObjectOfType <TemporaryCircleDeath>().enabled = true; return; } barriers.SetActive(true); if (!foundMatches) { foreach (var zombo in BoidsManager.robotZombies) { BoidStats ZomboBS = zombo.GetComponent <BoidStats>(); if (ZomboBS.lovedOne == null) { GameObject closest = ZomboBS.findClosestZombot(); if (closest != null) { ZomboBS.lovedOne = closest; closest.GetComponent <BoidStats>().lovedOne = zombo; } } } //TODO Display breeding text and stop attacks FindObjectOfType <TemporaryCircleDeath>().enabled = false; foundMatches = true; } else { int initialZombos = BoidsManager.robotZombies.Count; for (int i = 0; i < initialZombos; i++) { if (!BoidsManager.robotZombies[i].GetComponent <BoidStats>().hasBred&& BoidsManager.robotZombies[i].GetComponent <BoidStats>().lovedOne != null) { if (Vector3.Distance(BoidsManager.robotZombies[i].GetComponent <BoidStats>().lovedOne.transform.position, BoidsManager.robotZombies[i].transform.position) > loveDistance) { BoidsManager.robotZombies[i].GetComponent <NavMeshAgent>().enabled = true; BoidsManager.robotZombies[i].GetComponent <NavMeshAgent>().destination = BoidsManager.robotZombies[i].GetComponent <BoidStats>().lovedOne.transform.position; } else { BoidsManager.robotZombies[i].GetComponent <NavMeshAgent>().enabled = false; BoidsManager.robotZombies.Add(BoidStats.breed(BoidsManager.robotZombies[i].GetComponent <BoidStats>(), BoidsManager.robotZombies[i].GetComponent <BoidStats>().lovedOne.GetComponent <BoidStats>(), BoidsManager.prefab)); BoidsManager.robotZombies[i].GetComponent <BoidStats>().lovedOne.GetComponent <BoidStats>().hasBred = true; BoidsManager.robotZombies[i].GetComponent <BoidStats>().hasBred = true; } } } } // go back to play mode foreach (var zombot in BoidsManager.robotZombies) { if (!zombot.GetComponent <BoidStats>().hasBred&& zombot.GetComponent <BoidStats>().lovedOne != null) { return; } else { zombot.GetComponent <NavMeshAgent>().enabled = false; } } roundNumber++; breeding = false; foundMatches = false; barriers.SetActive(false); FindObjectOfType <TemporaryCircleDeath>().enabled = true; //TODO remove breeding text and start attacks again } }