private Vector2 obstacle(GameObject[] walls, BirdControl me) { Vector2 force = Vector2.zero; for (int i = 0; i < walls.Length; i++) { BirdControl.CachedDelta cd = me.WallDistance(i); if (cd.dist > genome.Obstacle.Distance) { continue; } force += calcForce(-1 * cd.norm, cd.dist, genome.Cohesion); } return(force); }
private Vector2 cohesion(BirdControl[] birds, BirdControl me) { Vector2 force = Vector2.zero; foreach (BirdControl b in birds) { if (b.Equals(me) || !b.Moving) { continue; } BirdControl.CachedDelta cd = me.GetDistance(b); if (cd.dist > genome.Cohesion.Distance) { continue; } force += calcForce(cd.norm, cd.dist, genome.Cohesion); } return(force); }
private Vector2 repulsion(BirdControl[] birds, float[] forces, BirdControl me) { Vector2 force = Vector2.zero; foreach (BirdControl b in birds) { if (b.Equals(me) || !b.Moving) { continue; } BirdControl.CachedDelta cd = me.GetDistance(b); if (cd.dist > genome.Repulse.Distance) { continue; } force += calcForce(-1 * cd.norm, cd.dist, genome.Repulse); // * forces[b.Number]; } return(force); }
private Vector2 aligment(BirdControl[] birds, float[] forces, BirdControl me) { Vector2 force = Vector2.zero; foreach (BirdControl b in birds) { if (b.Equals(me) || !b.Moving) { continue; } BirdControl.CachedDelta cd = me.GetDistance(b); if (cd.dist > genome.Align.Distance) { continue; } float mag = calcForce(cd.norm, cd.dist, genome.Align).magnitude; // * forces[b.Number]; force += b.Velocity.normalized * mag; } return(force); }