示例#1
0
        public void EnemyBlockCollide(Enemy enemy, Block block)
        {
            Rectangle enemyRect    = enemy.GetBoundingBox();
            Rectangle blockRect    = block.GetBoundingBox();
            Rectangle intersection = Rectangle.Intersect(enemyRect, blockRect);

            if (intersection.Height > intersection.Width)
            {
                if (enemyRect.Right > blockRect.Left && enemyRect.Right < blockRect.Right)
                {
                    enemy.position.X = enemy.position.X - intersection.Width;
                    enemy.GoLeft();
                }
                else
                {
                    enemy.position.X = enemy.position.X + intersection.Width;
                    enemy.GoRight();
                }
            }
            else
            {
                if (enemyRect.Bottom > blockRect.Top && enemyRect.Bottom < blockRect.Bottom)
                {
                    enemy.position.Y = enemy.position.Y - intersection.Height;
                }
                else
                {
                    enemy.position.Y = enemy.position.Y + intersection.Height;
                }
            }
        }
示例#2
0
        public void PipeEnemyCollide(Enemy enemy, Pipe pipe)
        {
            Rectangle enemyRect    = enemy.GetBoundingBox();
            Rectangle pipeRect     = pipe.GetBoundingBox();
            Rectangle intersection = Rectangle.Intersect(enemyRect, pipeRect);

            if (intersection.Height > intersection.Width)
            {
                if (enemyRect.Right > pipeRect.Left && enemyRect.Right < pipeRect.Right)
                {
                    enemy.position.X = enemy.position.X - intersection.Width;
                    enemy.GoLeft();
                }
                else
                {
                    enemy.position.X = enemy.position.X + intersection.Width;
                    enemy.GoRight();
                }
            }
            else
            {
                if (enemyRect.Bottom > pipeRect.Top && enemyRect.Bottom < pipeRect.Bottom)
                {
                    enemy.position.Y = enemy.position.Y - intersection.Height;
                }
                else
                {
                    enemy.position.Y = enemy.position.Y + intersection.Height;
                }
            }
        }
        public void MarioEnemyCollide(Mario mario, Enemy enemy)
        {
            Rectangle marioRect    = mario.state.GetBoundingBox(new Vector2(mario.position.X, mario.position.Y));
            Rectangle enemyRect    = enemy.GetBoundingBox();
            Rectangle intersection = Rectangle.Intersect(marioRect, enemyRect);

            if (intersection.Height > intersection.Width)
            {
                if (!mario.isStar)
                {
                    mario.TakeDamage();
                }
                else
                {
                    enemy.TakeDamage();
                    game.gameHUD.Score += ValueHolder.enemyHurtPoints;
                }
            }
            else
            {
                if (marioRect.Bottom > enemyRect.Top && marioRect.Bottom < enemyRect.Bottom)
                {
                    enemy.TakeDamage();
                    game.ach.AchievementAdjustment(AchievementsManager.AchievementType.Enemy);
                    game.gameHUD.Score += ValueHolder.enemyHurtPoints * game.gameHUD.pointMultiplier;
                    mario.velocity.Y    = bounce;
                    game.gameHUD.pointMultiplier++;
                }
                else
                {
                    if (!mario.isStar)
                    {
                        mario.TakeDamage();
                    }
                    else
                    {
                        enemy.TakeDamage();
                        game.gameHUD.Score += ValueHolder.enemyHurtPoints;
                    }
                }
            }
        }
        public void EnemyEnemyCollide(Enemy enemy1, Enemy enemy2)
        {
            Rectangle enemy1Rect   = enemy1.GetBoundingBox();
            Rectangle enemy2Rect   = enemy2.GetBoundingBox();
            Rectangle intersection = Rectangle.Intersect(enemy1Rect, enemy2Rect);

            if (intersection.Height > intersection.Width)
            {
                if (enemy1Rect.Right > enemy2Rect.Left && enemy1Rect.Right < enemy2Rect.Right)
                {
                    enemy1.position.X -= intersection.Width;
                    enemy1.GoLeft();
                    enemy2.GoRight();
                }
                else
                {
                    enemy1.position.X += intersection.Width;
                    enemy1.GoRight();
                    enemy2.GoLeft();
                }
            }
        }