void calculateCohesion(JoanBoidsAgent a) { Vector3 centralPosition = new Vector3(); foreach (JoanBoidsAgent neightbour in a.neightbours) { if (!neightbour) { return; } centralPosition += neightbour.transform.position; } centralPosition += a.transform.position; centralPosition /= a.neightbours.Count + 1; a.addForce((centralPosition - a.transform.position) * cohesionWeight, JoanBoidsAgent.DEBUGforceType.COHESION); }
void calculateAlignment(JoanBoidsAgent a) { Vector3 dirVec = new Vector3(); foreach (JoanBoidsAgent neightbour in a.neightbours) { if (!neightbour) { return; } dirVec += neightbour.velocity; } dirVec += a.velocity; dirVec /= a.neightbours.Count + 1; a.addForce(dirVec, JoanBoidsAgent.DEBUGforceType.ALIGNMENT); }
void calculateSeparation(JoanBoidsAgent a) { Vector3 separationVector = Vector3.zero; foreach (JoanBoidsAgent neightbour in a.neightbours) { if (!neightbour) { return; } float distance = Vector3.Distance(a.transform.position, neightbour.transform.position); distance /= a.radius; distance = 1 - distance; separationVector += distance * (a.transform.position - neightbour.transform.position).normalized * separationWeight; } a.addForce(separationVector, JoanBoidsAgent.DEBUGforceType.SEPARATION); }