public override void UpdateVectors(List <IBoid> boids, BoidsBehaviourPreset preset) { Vector2 aligment = Vector2.zero; Vector2 cohesion = Vector2.zero; Vector2 separation = Vector2.zero; Vector2 area = Vector2.zero; int countOfNearby = 0; for (int i = boids.Count - 1; i >= 0; i--) { Boid2D boid = (Boid2D)boids[i]; if (boid != this && IsNearby(boid)) { aligment += boid.Velocity; cohesion += boid.Position; float distance = Vector2.Distance(Position, boid.Position); separation += (Position - boid.Position) / Mathf.Pow(distance, 2); countOfNearby++; } } if (countOfNearby > 0) { aligment /= (float)countOfNearby; cohesion /= (float)countOfNearby; separation /= (float)countOfNearby; cohesion -= Position; aligment *= preset.aligment; cohesion *= preset.cohesion; separation *= preset.separation; Vector2 newForce = (cohesion + aligment + separation); currentDirection = (newForce + currentDirection).normalized; } }
public abstract void UpdateVectors(List <IBoid> boids, BoidsBehaviourPreset preset);