Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }