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); } }
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; } }