Esempio n. 1
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);
         }
     }
 }
Esempio n. 2
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);
         }
     }
 }
Esempio n. 3
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);
                }
            }
        }