Exemple #1
0
        public CollisionResult Collide(float s, PhysicsGroupType groupType, PhysicsObject physicsObject, CollisionIdentity identity)
        {
            CollisionResult response = CollisionResult.None;

            if (groupType == PhysicsGroupType.Physical)
            {
                response = Weapon.Collide(s, groupType, physicsObject, identity);

                CollisionResult playerCollision = physicsObject.Collide(s, collision);
                if (playerCollision)
                {
                    if (collisionResult)
                    {
                        //Not sure if necessary, but if we have multiple collisions in a single frame, stop all movement.
                        collisionResult.PositionA = collision.Position;
                        collisionResult.VelocityA = Vector2.Zero;
                    }
                    else
                    {
                        collisionResult = playerCollision.Switch();
                    }
                    response = playerCollision;
                    TakeDamage(identity);
                }
            }
            return(response);
        }
Exemple #2
0
        public CollisionResult Collide(float s, PhysicsGroupType groupType, PhysicsObject physicsObject, CollisionIdentity identity)
        {
            CollisionResult response = CollisionResult.None;

            if (groupType == PhysicsGroupType.Physical)
            {
                for (int i = bullets.Count - 1; i >= 0; i--)
                {
                    Circle          bullet          = bullets[i];
                    CollisionResult bulletCollision = physicsObject.Collide(s, bullet);
                    if (bulletCollision)
                    {
                        bullets.RemoveAt(i);
                        //bullet.Position = bulletCollision.PositionB;
                        //bullet.Velocity = bulletCollision.VelocityB;
                        bulletCollision.Identity = bulletIdentity;
                        response = bulletCollision;
                    }
                }
                CollisionResult result = physicsObject.Collide(s, collision);
                if (result)
                {
                    takeDamage(identity);
                    response = result;
                }
            }
            return(response);
        }
Exemple #3
0
 public void Collide(float s, PhysicsGroupType groupType, ICollide other)
 {
     if (groupType == PhysicsGroupType.Physical)
     {
         for (int i = bullets.Count - 1; i >= 0; i--)
         {
             Circle          bullet          = bullets[i];
             CollisionResult bulletCollision = other.Collide(s, groupType, bullet, bulletIdentity);
             if (bulletCollision)
             {
                 bullets.RemoveAt(i);
                 //bullet.Position = bulletCollision.PositionB;
                 //bullet.Velocity = bulletCollision.VelocityB;
             }
         }
         CollisionResult result = other.Collide(s, groupType, collision, null);
         if (result)
         {
             if (collisionResult)
             {
                 collisionResult.PositionA = collision.Position;
                 collisionResult.VelocityA = Vector2.Zero;
             }
             else
             {
                 collisionResult = result;
             }
             takeDamage(result.Identity);
         }
     }
 }
Exemple #4
0
 public PhysicsObject GetCollisionObject(PhysicsGroupType groupType)
 {
     if (groupType == PhysicsGroupType.Physical)
     {
         return(collision);
     }
     return(null);
 }
Exemple #5
0
        public CollisionResult Collide(float s, PhysicsGroupType groupType, PhysicsObject physicsObject, CollisionIdentity identity)
        {
            CollisionResult response = CollisionResult.None;

            response = CollideBulletsSimple(s, physicsObject, bullets, bulletIdentity, bulletsToRemove);
            response = CollideBulletsSimple(s, physicsObject, cannonballs, cannonballIdentity, cannonballsToRemove);
            response = CollideBulletsSimple(s, physicsObject, snipes, snipeIdentity, snipesToRemove);
            return(response);
        }
Exemple #6
0
 private void CollideBulletsSimple(float s, ICollide other, PhysicsGroupType groupType, List <Circle> list, CollisionIdentity identity, List <Circle> removalList)
 {
     for (int i = list.Count - 1; i >= 0; i--)
     {
         Circle          c = list[i];
         CollisionResult collisionResult = other.Collide(s, groupType, c, identity);
         if (collisionResult)
         {
             removalList.Add(c);
         }
     }
 }
Exemple #7
0
        public void Collide(float s, PhysicsGroupType groupType, ICollide other)
        {
            if (groupType == PhysicsGroupType.Physical)
            {
                Weapon.Collide(s, groupType, other);

                CollisionResult playerCollision = other.Collide(s, groupType, this.collision, null);
                if (playerCollision)
                {
                    if (collisionResult)
                    {
                        //Not sure if necessary, but if we have multiple collisions in a single frame, stop all movement.
                        collisionResult.PositionA = collision.Position;
                        collisionResult.VelocityA = Vector2.Zero;
                    }
                    else
                    {
                        collisionResult = playerCollision;
                    }
                    TakeDamage(playerCollision.Identity);
                }
            }
        }
Exemple #8
0
 public PhysicsGroup(PhysicsGroupType groupType)
 {
     this.groupType = groupType;
     this.group     = new List <ICollide>();
 }
Exemple #9
0
 public void Collide(float s, PhysicsGroupType groupType, ICollide other)
 {
     CollideBulletsSimple(s, other, groupType, bullets, bulletIdentity, bulletsToRemove);
     CollideBulletsSimple(s, other, groupType, cannonballs, cannonballIdentity, cannonballsToRemove);
     CollideBulletsSimple(s, other, groupType, snipes, snipeIdentity, snipesToRemove);
 }