Пример #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);
        }
Пример #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)
                {
                    if (collisionResult)
                    {
                        collisionResult.PositionA = collision.Position;
                        collisionResult.VelocityA = Vector2.Zero;
                    }
                    else
                    {
                        collisionResult = result.Switch();
                    }
                    takeDamage(identity);
                    response = result;
                }
            }
            return(response);
        }