Exemplo n.º 1
0
    private void SpawnBoids()
    {
        for (int i = 0; i < boidAmount; i++)
        {
            BoidBase newBoid = default;

            Vector3    randomPos   = RandomPos(cageSize);
            Quaternion randomRot   = RandomRot();
            int        randomIndex = Random.Range(0, boidPrefabs.Length);

            switch (mode)
            {
            case MODE.None:
                GameObject newBoidObject = MeshGenerator.Create(MeshGenerator.SHAPE.Cube, randomPos, randomRot, 1.5f);
                newBoid = newBoidObject.AddComponent(typeof(Boid)) as Boid;

                switch (randomIndex)
                {
                case 0:
                    ((Boid)newBoid).SetSharedData("Flamingo", ENDANGERED_STATUS.VU);
                    break;

                case 1:
                    ((Boid)newBoid).SetSharedData("Shorebird", ENDANGERED_STATUS.EN);
                    break;

                case 2:
                    ((Boid)newBoid).SetSharedData("Starling", ENDANGERED_STATUS.CR);
                    break;
                }
                break;

            case MODE.Prefab:
                newBoid = Instantiate(boidPrefabs[randomIndex], randomPos, randomRot).GetComponent <BoidBase>();
                break;

            case MODE.Scriptable_Prefab:
                newBoid = Instantiate(boidScriptablePrefabs[randomIndex], randomPos, randomRot).GetComponent <BoidBase>();
                break;
            }
            boids.Add(newBoid);
        }
    }
Exemplo n.º 2
0
    protected virtual void DoBoidThing()
    {
        avoid.Set(0, 0);
        align.Set(0, 0);
        adjoin.Set(0, 0);

        for (int i = flock.Count - 1; i >= 0; --i)
        {
            BoidBase nextBoid = flock[i];

            Vector2 neighbor = pos - nextBoid.pos;
            avoid += neighbor / neighbor.sqrMagnitude;

            align += nextBoid.dir;

            adjoin += nextBoid.pos;
        }

        if (flock.Count > 0)
        {
            adjoin /= flock.Count;
            adjoin -= pos;
        }
    }