예제 #1
0
        //Movement actions
        public void DownAction()
        {
            int heightChange = SourceRectangle.Height;

            if (!(ActionState is MarioActionStateJump))
            {
                ActionState.ActionDown();
            }
            heightChange = SourceRectangle.Height - heightChange;
            CollisionDetection.FixCollisionFromStateChange(this, heightChange);
        }
예제 #2
0
        public override void CollisionResponse(IEntity entity, CollisionDetection.Direction direction)
        {
            if (entity is AbstractEnemy && !(entity is Canon))
            {
                if (PowerStateEnum != PowerStateType.Star)
                {
                    if (!((AbstractEnemy)entity is AbstractKoopa) && (entity is PiranhaPlant || (direction != CollisionDetection.Direction.down && direction != CollisionDetection.Direction.downnov)))
                    {
                        TakeDamage();
                    }
                    else
                    {
                        //player gets points
                        if (entity is BulletBill)
                        {
                            if (ActionStateEnum == ActionStateType.Jumping)
                            {
                                OnGround = true;
                                ActionState.ActionDown();
                            }
                        }
                        else if (entity is AbstractKoopa)
                        {
                            IEnemyState koopaState = ((AbstractEnemy)entity).EnemyState;
                            if (!(koopaState is KoopaShellState) && !(direction == CollisionDetection.Direction.down || direction == CollisionDetection.Direction.downnov))
                            {
                                TakeDamage();
                            }
                            else if (koopaState is KoopaShellState && ((KoopaShellState)koopaState).GetDeadly() && !(direction == CollisionDetection.Direction.down || direction == CollisionDetection.Direction.downnov))
                            {
                                TakeDamage();
                            }
                            else if (ActionStateEnum != ActionStateType.HoldingShell && holding && koopaState is KoopaShellState && !((KoopaShellState)koopaState).GetDeadly())
                            {
                                ActionState.Leave(new MarioHoldingShellState(this, (AbstractKoopa)entity, ActionState));
                            }
                            else
                            {
                                if (direction == CollisionDetection.Direction.down || direction == CollisionDetection.Direction.downnov)
                                {
                                    Velocity = new Vector2(Velocity.X, -4f);
                                    OnRaiseCollisionEvent(new MarioCollisionEventArgs(entity));
                                }
                            }
                        }
                        else
                        {
                            Velocity = new Vector2(Velocity.X, -4f);
                            OnRaiseCollisionEvent(new MarioCollisionEventArgs(entity));
                        }
                    }
                }
                else
                {
                    OnRaiseCollisionEvent(new MarioCollisionEventArgs(entity));//player gets points
                }
            }
            else if (entity is IBlock)
            {
                switch (direction)
                {
                case CollisionDetection.Direction.down:
                    if (ActionStateEnum == ActionStateType.Jumping)
                    {
                        ActionState.ActionDown();
                    }
                    break;

                case CollisionDetection.Direction.up:
                    ActionState.ActionDown();
                    OnRaiseCollisionEvent(new MarioCollisionEventArgs(entity));
                    break;

                case CollisionDetection.Direction.downnov:
                    if (ActionState is MarioActionStateJump)
                    {
                        ActionState.ActionDown();
                    }
                    break;

                case CollisionDetection.Direction.upnov:
                    ActionState.ActionDown();
                    OnRaiseCollisionEvent(new MarioCollisionEventArgs(entity));
                    break;
                }
            }
            else if (entity is IItem)
            {
                if (entity is Star)
                {
                    StarAction();
                }
                if (entity is FireFlower)
                {
                    ActionFireFlower();
                }
                if (entity is SuperMushroom)
                {
                    SuperMushroomAction(false);
                }
                //mario gets points
                if (entity is Key key)
                {
                    System.Diagnostics.Debug.WriteLine(key.KeyNum);
                }
                OnRaiseCollisionEvent(new MarioCollisionEventArgs(entity));
            }
        }