コード例 #1
0
 private void takeDamage(CollisionIdentity identity)
 {
     if (identity == null)
     {
         return;
     }
     if (identity.Damage > 0)
     {
         CurrentHealth    -= identity.Damage;
         tookDamage        = true;
         timeBetweenDamage = 0;
     }
 }
コード例 #2
0
 private void TakeDamage(CollisionIdentity identity)
 {
     if (identity == null)
     {
         return;
     }
     if (identity.Damage > 0)
     {
         if (Shield.Shielded)
         {
             Shield.AlertHit();
         }
         else
         {
             CurrentHealth    -= identity.Damage;
             tookDamage        = true;
             timeBetweenDamage = 0;
         }
     }
 }
コード例 #3
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);
        }
コード例 #4
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);
        }
コード例 #5
0
        private CollisionResult CollideBulletsSimple(float s, PhysicsObject physicsObject, List <Circle> list, CollisionIdentity identity, List <Circle> removalList)
        {
            CollisionResult response = CollisionResult.None;

            for (int i = list.Count - 1; i >= 0; i--)
            {
                Circle          c = list[i];
                CollisionResult collisionResult = physicsObject.Collide(s, c);
                if (collisionResult)
                {
                    removalList.Add(c);
                    collisionResult.Identity = identity;
                    response = collisionResult;
                }
            }
            return(response);
        }
コード例 #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);
         }
     }
 }
コード例 #7
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);
        }