override public Vector3 Calc(BoidConfig aConfig, Boid aThisBoid, List<Boid> aAllBoids) { Vector3 output = new Vector3(0f, 0f, 0f); int numInteracted = 0; foreach (Boid boid in aAllBoids) { if (boid != aThisBoid && boid.GetBoidType() == eBoidType.Normal) { Vector3 diff = (aThisBoid.transform.position - boid.transform.position); if (diff.magnitude < aConfig.DefaultInteractionRange) { output = output + boid.transform.position; numInteracted++; } } } if(numInteracted > 0) { return ((output / numInteracted) - aThisBoid.transform.position) * myWeight; } else { return output * myWeight; } }
private void Awake() { if (Instance) { Destroy(this); } else { Instance = this; } }
override public Vector3 Calc(BoidConfig aConfig, Boid aThisBoid, List<Boid> aAllBoids) { Vector3 output = new Vector3(0.0f, 0.0f, 0.0f); foreach (Boid boid in aAllBoids) { if(boid != aThisBoid) { Vector3 diff = (boid.transform.position - aThisBoid.transform.position); if (diff.magnitude < boid.GetRepulsionRange()) { // output = (((output - diff)) / Mathf.Min(diff.magnitude, 1.0f)) * boid.GetRepulsionFactor(); output = output - diff * boid.GetRepulsionFactor() ; } } } return output * myWeight; }
override public Vector3 Calc(BoidConfig aConfig, Boid aThisBoid, List<Boid> aAllBoids) { Vector3 output = new Vector3(0.0f, 0.0f, 0.0f); if (aThisBoid.transform.position.x < aConfig.SpawnBoundsStart.x + 1.0f) output.x = 1.0f; else if (aThisBoid.transform.position.x > aConfig.SpawnBoundsEnd.x - 1.0f) output.x = -1.0f; if (aThisBoid.transform.position.y < aConfig.SpawnBoundsStart.y + 1.0f) output.y = 1.0f; else if (aThisBoid.transform.position.y > aConfig.SpawnBoundsEnd.y - 1.0f) output.y = -1.0f; if (aThisBoid.transform.position.z < aConfig.SpawnBoundsStart.z + 1.0f) output.z = 1.0f; else if (aThisBoid.transform.position.z > aConfig.SpawnBoundsEnd.z - 1.0f) output.z = -1.0f; return output * myWeight; }
public abstract Vector3 Calc(BoidConfig aConfig, Boid aThisBoid, List<Boid> aAllBoids);