예제 #1
0
        private static void EnemyDetection(ILevel level, Game1 game, Rectangle marioRect)
        {
            foreach (IEnemy item in level.EnemyList)
            {
                Rectangle enemyRect = item.Sprite.Area(item.Location);
                if (marioRect.Intersects(enemyRect) && !game.MarioSprite.IsDead())
                {
                    MarioAndEnemyCollisionHandling.HandleCollision(game.MarioSprite, item);
                }
            }


            for (int i = 0; i < level.EnemyList.Count - 1; i++)
            {
                for (int j = i + 1; j < level.EnemyList.Count; j++)
                {
                    IEnemy enemy1 = level.EnemyList.ElementAt <IEnemy>(i);
                    IEnemy enemy2 = level.EnemyList.ElementAt <IEnemy>(j);
                    if (enemy1.Sprite.Area(enemy1.Location).Intersects(enemy2.Sprite.Area(enemy2.Location)))
                    {
                        EnemyAndEnemyCollisionHandling.HandleCollision(enemy1, enemy2);
                    }
                }
            }
        }
        private static void HeightSmallerThanWidth(IMario mario, IBlock item, Rectangle collisionRectangle, ISprite block)
        {
            if (block.Area(item.Location).Top > mario.Area().Top)
            {
                Mario.GroundedStatus = true;
                Mario.DisableJump    = false;
                Mario.JumpStatus     = false;
                Mario.LocationY     -= (collisionRectangle.Height);
                MarioAndEnemyCollisionHandling.SetBonusPoint(false);
                Mario.ResetVelocity();
                writeCollision(mario.Area(), block.Area(item.Location), "bottom");
            }
            else if (block.Area(item.Location).Top <= mario.Area().Top)
            {
                Mario.LocationY += collisionRectangle.Height;
                Mario.ResetVelocity();
                block.CollisionSprite();
                item.BecomeUsed();
                writeCollision(mario.Area(), block.Area(item.Location), "top");
            }

            collisionRectangle = Rectangle.Intersect(mario.Area(), block.Area(item.Location));
            if (collisionRectangle.Right == block.Area(item.Location).Right)
            {
                Mario.LocationX += collisionRectangle.Width + 1;
                writeCollision(mario.Area(), block.Area(item.Location), "left");
            }
            else if (collisionRectangle.Left == block.Area(item.Location).Left)
            {
                Mario.LocationX -= (collisionRectangle.Width + 1);
                writeCollision(mario.Area(), block.Area(item.Location), "right");
            }
        }