//Movement actions public void DownAction() { int heightChange = SourceRectangle.Height; if (!(ActionState is MarioActionStateJump)) { ActionState.ActionDown(); } heightChange = SourceRectangle.Height - heightChange; CollisionDetection.FixCollisionFromStateChange(this, heightChange); }
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)); } }