Boid optimize/fix wrapping checks

This commit is contained in:
Xevion
2020-05-16 22:31:52 -05:00
parent 76beeb9095
commit 4d00d3b26a

View File

@@ -23,32 +23,33 @@ public class Boid : MonoBehaviour {
transform.rotation = Quaternion.Euler(0, 0, Mathf.Rad2Deg * -Mathf.Atan2(velocity.x, velocity.y)); transform.rotation = Quaternion.Euler(0, 0, Mathf.Rad2Deg * -Mathf.Atan2(velocity.x, velocity.y));
// Skip Flock Calculations if wrapping in progress // Skip Flock Calculations if wrapping in progress
if (IsWrappingX || IsWrappingY) { if (!IsWrappingX && !IsWrappingY) {
position += velocity; // Acquires all Boids within the local flock
return; // List<Boid> flock = GetFlock(parent.boids, parent.boidGroupRange);
} List<Boid> flock = parent.boids;
// Acquires all Boids within the local flock if (flock.Count > 0) {
// List<Boid> flock = GetFlock(parent.boids, parent.boidGroupRange); // Calculate all offsets and multiple by magnitudes given
List<Boid> flock = parent.boids; Vector2 r1 = Rule1(flock) * parent.cohesionBias;
Vector2 r2 = Rule2(flock) * parent.separationBias;
if (flock.Count > 0) { Vector2 r3 = Rule3(flock) * parent.alignmentBias;
// Calculate all offsets and multiple by magnitudes given velocity += r1 + r2 + r3;
Vector2 r1 = Rule1(flock) * parent.cohesionBias; }
Vector2 r2 = Rule2(flock) * parent.separationBias;
Vector2 r3 = Rule3(flock) * parent.alignmentBias; // Limit the Velocity Vector to a certain Magnitude
velocity += r1 + r2 + r3; if (velocity.magnitude > parent.boidVelocityLimit) {
} velocity = (velocity / velocity.magnitude) * parent.boidVelocityLimit;
}
// Limit the Velocity Vector to a certain Magnitude
if (velocity.magnitude > parent.boidVelocityLimit) {
velocity = (velocity / velocity.magnitude) * parent.boidVelocityLimit;
} }
// Update 2D and 3D transform positions based on current velocity
position += velocity; position += velocity;
transform.position = new Vector3(position.x, position.y, 0); transform.position = new Vector3(position.x, position.y, 0);
Wrapping(); // If either dimension of wrapping is still unlocked, check wrapping code.
if(!IsWrappingX || !IsWrappingY)
Wrapping();
} }
void Wrapping() { void Wrapping() {