Exemplo n.º 1
0
        public static void HandleCollision(IDavis davis, IEnemy enemy, CollisionSide side, IWorld world)
        {
            if (side != CollisionSide.None)
            {
                if (!(enemy.PhysicsState is JulianKnockBackState))
                {
                    if (davis.PhysicsState is FlyingKneeState || davis.PhysicsState is ShoryukenState || davis.PhysicsState is ShunpoState)
                    {
                        enemy.TakeDamage();
                        world.HUD.score += 100;
                    }
                }

                //if collision is not on bottom
                if (side == CollisionSide.Top)
                {
                    if (!enemy.Dead && !davis.DeadFlag && !(enemy.PhysicsState is JulianKnockBackState))
                    {
                        enemy.TakeDamage();
                        world.HUD.score += 100;
                    }
                }
                else
                {
                    if (!enemy.Dead && davis.DavisStatus != DavisStatus.Invincible && !davis.DeadFlag && !(davis.PhysicsState is FlyingKneeState) && !(davis.PhysicsState is ShoryukenState && !(davis.PhysicsState is ShunpoState)))
                    {
                        davis.DavisDeath();
                        world.HUD.lives--;
                    }
                }
            }
        }
Exemplo n.º 2
0
 public static void HandleCollision(IDavis davis, IItem item, CollisionSide side, IWorld world)
 {
     if (side != CollisionSide.None)
     {
         if (item is Flower)
         {
             Sounds.Instance.PlayDrinkMilk();
             world.HUD.score += 1500;
             davis.DavisState.Static();
         }
         else if (item is Mushroom)
         {
             Sounds.Instance.PlayHealSound();
             world.HUD.lives += 1;
             davis.DavisState.Static();
         }
         else if (item is Coin)
         {
             world.HUD.coins++;
             world.HUD.score += 50;
             Sounds.Instance.PlayItemPickUp();
         }
         else if (item is Key)
         {
             world.HUD.score += 150;
             Sounds.Instance.PlayKeyPickUp();
             davis.KeyFlag = true;
         }
         world.ObjectToRemove.Add(item);
     }
 }
Exemplo n.º 3
0
        private static void CheckCharactersSurroundingBox(IDavis movers, IWorld world)
        {
            var i = (int)(movers.Location.X / (world as World).UNIT_SIZE);
            var j = (int)(movers.Location.Y / (world as World).UNIT_SIZE);

            if (!(world as World).IsIndexOutOfBounds(i, j))
            {
                // Get instance of character reference in the World Grid
                IDavis moverObject = (IDavis)world.GetObject(movers, i, j);

                if (moverObject != null)
                {
                    int hitBoxWidthScaleFactor  = (int)(moverObject.HitBox.Width / (world as World).UNIT_SIZE) + 1;
                    int hitBoxHeightScaleFactor = (int)(moverObject.HitBox.Height / (world as World).UNIT_SIZE) + 1;
                    int offsetFactor            = Variables.Variable.offsetRange; // Magic number here!

                    for (int iOffset = -offsetFactor * hitBoxWidthScaleFactor; iOffset < (offsetFactor + 1) * hitBoxWidthScaleFactor; iOffset++)
                    {
                        for (int jOffset = -offsetFactor * hitBoxHeightScaleFactor; jOffset < (offsetFactor + 1) * hitBoxHeightScaleFactor; jOffset++)
                        {
                            if (!(world as World).IsIndexOutOfBounds(i + iOffset, j + jOffset))
                            {
                                if (world.WorldGrid[i + iOffset][j + jOffset].Count != 0)
                                {
                                    for (int k = 0; k < world.WorldGrid[i + iOffset][j + jOffset].Count; k++)
                                    {
                                        var target = world.WorldGrid[i + iOffset][j + jOffset][k];
                                        if (!target.Equals(moverObject) && (target is IBlock || target is IItem || target is IEnemy))
                                        {
                                            var side = GetCollisionSide(Rectangle.Intersect(moverObject.HitBox, target.HitBox), moverObject.HitBox, target.HitBox);
                                            /*if (side != CollisionSide.None)*/
                                            {
                                                if (target is IBlock)
                                                {
                                                    DavisBlockCollisionHandler.HandleCollision(moverObject, (IBlock)target, side, world);
                                                }
                                                if (target is IItem)
                                                {
                                                    DavisItemCollisionHandler.HandleCollision(moverObject, (IItem)target, side, world);
                                                }
                                                if (target is IEnemy)
                                                {
                                                    DavisEnemyCollisionHandler.HandleCollision(moverObject, (IEnemy)target, side, world);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
 public DavisToBatCommand(IDavis davis)
 {
     this.davis = davis;
 }
Exemplo n.º 5
0
 public DavisCrouchCommand(IDavis davis)
 {
     this.davis = davis;
 }
Exemplo n.º 6
0
 public DavisJumpCommand(IDavis davis)
 {
     this.davis = davis;
 }
Exemplo n.º 7
0
 public DavisStaticCommand(IDavis davis)
 {
     this.davis = davis;
 }
 public DavisTurnLeftCommand(IDavis davis)
 {
     this.davis = davis;
 }
 public DavisToWoodyCommand(IDavis davis)
 {
     this.davis = davis;
 }
 public DavisShootBulletCommand(IDavis davis, IWorld world)
 {
     this.davis = davis;
     this.world = world;
 }
Exemplo n.º 11
0
        public static void HandleCollision(IDavis davis, IBlock block, CollisionSide side, IWorld world)
        {
            switch (side)
            {
            case CollisionSide.Bottom:
                if (block is HiddenBlock && davis.PhysicsState is JumpState)
                {
                    block.SpecialState();
                }
                if (block is CoinBrick && davis.PhysicsState is JumpState)
                {
                    CoinBrick coinBrick = (CoinBrick)block;
                    if (coinBrick.CoinCounter > 0)
                    {
                        world.AddObject(new Coin(new Vector2(block.Location.X, block.Location.Y - 45)));
                        coinBrick.CoinCounter--;
                        coinBrick.IsBumped = true;
                    }
                }
                else if (block is QuestionBlock)
                {
                    block.SpecialState();
                }
                else if (block is Brick)
                {
                    Brick brick = (Brick)block;
                    brick.Bumped();
                }
                else if (block is MushroomBlock)
                {
                    if (!block.IsBumped)
                    {
                        world.AddObject(new Mushroom(new Vector2(block.Location.X, block.Location.Y - 25)));
                        block.SpecialState();
                        block.IsBumped = true;
                    }
                }
                else if (block is CoinBlock)
                {
                    if (!block.IsBumped)
                    {
                        world.AddObject(new Mushroom(new Vector2(block.Location.X, block.Location.Y - 25)));
                        block.SpecialState();
                        block.IsBumped = true;
                    }
                }
                else if (block is FlowerBlock)
                {
                    if (!block.IsBumped)
                    {
                        world.AddObject(new Flower(new Vector2(block.Location.X, block.Location.Y - 30)));
                        block.SpecialState();
                        block.IsBumped = true;
                    }
                }
                if (!(block is EmptyBlock))
                {
                    davis.Location     = new Vector2(davis.Location.X, block.Location.Y + block.HitBox.Height);
                    davis.PhysicsState = new FallState(davis);
                }

                break;

            case CollisionSide.Top:
                //if not hidden block
                if (!block.IsHidden && !(davis.PhysicsState is FlyingKneeState) && !(davis.PhysicsState is ShoryukenState) && !(davis.PhysicsState is ShunpoState))
                {
                    davis.DavisState.Land();
                    davis.PhysicsState = new StandingState(davis);
                    davis.Location     = new Vector2(davis.Location.X, block.Location.Y - davis.HitBox.Height);
                }
                break;

            case CollisionSide.Left:
                if (!(block.IsHidden))
                {
                    if (!((block is CastleDoor) && davis.KeyFlag))
                    {
                        if (!(block is Door && world.HUD.score > Variables.Variable.doorOpenScore))
                        {
                            davis.Location = new Vector2(block.Location.X - davis.HitBox.Width, davis.Location.Y);
                        }
                    }
                }
                break;

            case CollisionSide.Right:
                if (!(block.IsHidden))
                {
                    if (!(block is Door && world.HUD.score > Variables.Variable.doorOpenScore))
                    {
                        davis.Location = new Vector2(block.Location.X + block.HitBox.Width, davis.Location.Y);
                    }
                }
                break;

            case CollisionSide.None:
                break;
            }
        }
 public DavisSpecialAttackCommand(IDavis davis)
 {
     this.davis = davis;
 }
 public DavisTurnRightCommand(IDavis davis)
 {
     this.davis = davis;
 }