public static bool EnforcePenetrationConstraint(Character model, IEnumerable<GameObject> objects) { bool CollisedWithNeighbour = false; // Checar colisão com todos os Inimigos foreach (GameObject obj in objects) { // If is enemy and is dead if (obj is Character && !(obj as Character).IsAlive) continue; // If this object has no collision if (!obj.Collision) continue; if (model != obj && model.CollidesWithObject(obj)) { CollisedWithNeighbour = true; Vector2 d = obj.Position - model.Position; if (d != Vector2.Zero) d.Normalize(); model.Position = obj.Position - (d*(model.CollisionRadius + obj.CollisionRadius)); } } return CollisedWithNeighbour; }
public static Vector2 Separation(Character model, List<Character> neighbours) { Vector2 steeringForce = Vector2.Zero; for (int i = 0; i < neighbours.Count; i++) { if (neighbours[i] != model && neighbours[i].IsAlive) { if (model.CollidesWithObject(neighbours[i])) { steeringForce += Flee(model, neighbours[i]); if (steeringForce != Vector2.Zero) steeringForce.Normalize(); } } } return steeringForce; }