IEnumerator babyTime(BoidStats newBorn, float size) { newBorn.size /= 2; newBorn.ApplyStatsVisuals(); yield return(new WaitForSeconds(3.0f)); newBorn.size = size; newBorn.ApplyStatsVisuals(); yield return(null); }
protected virtual void Init() { //For Hierarchy management //All boids will appear under the a game object transform.SetParent(BoidAnchor, true); stats = GetComponent <BoidStats>(); BoidsManager.AddBoid(this); }
IEnumerator babyTime(BoidStats newBorn, float size) { Timer timer = new Timer(1.0f); while (!timer.Trigger()) { newBorn.size = size / Utils.Map(timer.timeLeft, 0.0f, 1.0f, 1.0f, 5.0f); newBorn.ApplyStatsVisuals(); yield return(new WaitForSeconds(0.1f)); } newBorn.size = size; newBorn.ApplyStatsVisuals(); yield return(null); }
public static GameObject breed(BoidStats boid1, BoidStats boid2, GameObject boidPrefab) { Vector3 spawnLoc = (boid1.transform.position + boid2.transform.position) / 2; spawnLoc.y = RobotZombieBehaviour.Instance.spawnHeight; GameObject newBorn = Instantiate(boidPrefab, spawnLoc, Quaternion.identity); var nbStats = newBorn.GetComponent <BoidStats>(); // nbStats.zombieName = add name nbStats.size = Mathf.Max(0.0f, Mathf.Min(10.0f, (boid1.size + boid2.size / 2) + Random.Range(-0.1f, 0.1f))); nbStats.wealth = Mathf.Max(0.0f, Mathf.Min(10.0f, (boid1.wealth + boid2.wealth / 2) + Random.Range(-0.1f, 0.1f))); nbStats.heatlh = Mathf.Max(0.0f, Mathf.Min(10.0f, (boid1.heatlh + boid2.heatlh / 2) + Random.Range(-0.1f, 0.1f))); nbStats.color.r = Mathf.Max(0.0f, Mathf.Min(1.0f, (boid1.color.r + boid2.color.r / 2) + Random.Range(-0.01f, 0.01f))); nbStats.color.g = Mathf.Max(0.0f, Mathf.Min(1.0f, (boid1.color.g + boid2.color.g / 2) + Random.Range(-0.01f, 0.01f))); nbStats.color.b = Mathf.Max(0.0f, Mathf.Min(1.0f, (boid1.color.b + boid2.color.b / 2) + Random.Range(-0.01f, 0.01f))); //nbStats.StartCoroutine(nbStats.babyTime(nbStats, nbStats.size)); return(newBorn); }
public GameObject findClosestZombot() { GameObject closestZombot = null; float dist = float.MaxValue; foreach (var zombot in RobotZombieBehaviour.Instance.robotZombies) { BoidStats zombotBS = zombot.GetComponent <BoidStats>(); if (zombotBS != this && zombotBS.lovedOne == null) { float currDist = Vector3.Distance(transform.position, zombot.transform.position); if (currDist < dist) { dist = currDist; closestZombot = zombot; } } } return(closestZombot); }
public static GameObject breed(BoidStats boid1, BoidStats boid2, GameObject boidPrefab) { Vector3 spawnLoc = (boid1.transform.position + boid2.transform.position) / 2; spawnLoc.y = RobotZombieBehaviour.Instance.spawnHeight; GameObject newBorn = Instantiate(boidPrefab, spawnLoc, Quaternion.identity); GameObject parts = Instantiate(boid1.breedingParticles, spawnLoc, boid1.breedingParticles.transform.rotation); var nbStats = newBorn.GetComponent <BoidStats>(); nbStats.size = Mathf.Max(0.0f, Mathf.Min(10.0f, ((boid1.size + boid2.size) / 2) + Utils.NextGaussian())); nbStats.wealth = Mathf.Max(0.0f, Mathf.Min(10.0f, ((boid1.wealth + boid2.wealth) / 2) + Utils.NextGaussian())); nbStats.heatlh = Mathf.Max(0.0f, Mathf.Min(10.0f, ((boid1.heatlh + boid2.heatlh) / 2) + Utils.NextGaussian())); nbStats.color.r = Mathf.Max(0.0f, Mathf.Min(1.0f, ((boid1.color.r + boid2.color.r) / 2) + Utils.NextGaussian() / 10)); nbStats.color.g = Mathf.Max(0.0f, Mathf.Min(1.0f, ((boid1.color.g + boid2.color.g) / 2) + Utils.NextGaussian() / 10)); nbStats.color.b = Mathf.Max(0.0f, Mathf.Min(1.0f, ((boid1.color.b + boid2.color.b) / 2) + Utils.NextGaussian() / 10)); nbStats.StartCoroutine(nbStats.babyTime(nbStats, nbStats.size)); nbStats.removeHat(); nbStats.ApplyStatsVisuals(); nbStats.hatSelect(); return(newBorn); }
// Start is called before the first frame update void Start() { stats = GetComponent <BoidStats>(); }
// 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 } }
void Start() { bs = GetComponent<BoidStats> (); change2 = change1 + 0.01f; change3 = change1 + 0.02f; }