コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
    }
コード例 #7
0
 // Start is called before the first frame update
 void Start()
 {
     stats = GetComponent <BoidStats>();
 }
コード例 #8
0
    // 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
        }
    }
コード例 #9
0
 void Start()
 {
     bs = GetComponent<BoidStats> ();
     change2 = change1 + 0.01f;
     change3 = change1 + 0.02f;
 }