Esempio n. 1
0
        private void Bullets_timer_Tick(object sender, EventArgs e)
        {
            Bullet toRemovePlayerBullet = null;
            Enemy  toRemoveEnemy        = null;

            this.model.screen.playerBullets?.ForEach(playerBullet => {
                playerBullet.Move();

                model.screen.enemies?.ForEach(enemy =>
                {
                    PathGeometry combGeoBulletVSEnemy = playerBullet.CombinedGeos(enemy);
                    if (combGeoBulletVSEnemy != null && combGeoBulletVSEnemy.GetArea() > 0)
                    {
                        enemy.Health        -= playerBullet.Damage;
                        toRemovePlayerBullet = playerBullet;
                        if (enemy.Health < 1)
                        {
                            toRemoveEnemy = enemy;
                            logic.RemoveEnemyBullet(toRemoveEnemy.bullet);
                        }
                    }
                });
                if (playerBullet != null)
                {
                    PathGeometry combGeoBulletVSGround = playerBullet?.CombinedGeos(this.model.screen.groundLine);
                    double bulletCx = (playerBullet.RealArea.Bounds.Right + playerBullet.RealArea.Bounds.Left) / 2;
                    if (combGeoBulletVSGround != null && combGeoBulletVSGround.GetArea() > 0 ||
                        bulletCx < 0 || playerBullet.CY < 0 ||
                        playerBullet.CY > this.model.GameHeight || bulletCx > this.model.GameWidth)
                    {
                        toRemovePlayerBullet = playerBullet;
                    }
                }
            });
            logic.RemoveEnemy(toRemoveEnemy);
            logic.RemovePlayerBullet(toRemovePlayerBullet);

            this.model.screen.enemies?.ForEach(enemy =>
            {
                if (enemy.bullet == null)
                {
                    enemy.EnemyShoot(model.player.CX);
                    logic.AddEnemyBullet(enemy.bullet);
                    return;
                }
                Bullet toRemoveEnemyBullet = null;

                enemy.bullet.Move();
                PathGeometry combGeoBulletVSGround = enemy.bullet.CombinedGeos(this.model.screen.groundLine);
                double bulletCx = (enemy.bullet.RealArea.Bounds.Right + enemy.bullet.RealArea.Bounds.Left) / 2;
                if (combGeoBulletVSGround.GetArea() > 0 ||
                    bulletCx < 0 || enemy.bullet.CY < 0 ||
                    enemy.bullet.CY > this.model.GameHeight || bulletCx > this.model.GameWidth)
                {
                    toRemoveEnemyBullet = enemy.bullet;
                    enemy.bullet        = null;
                }

                PathGeometry combGeoBulletVSPlayer = enemy.bullet?.CombinedGeos(model.player);
                if (combGeoBulletVSPlayer != null && combGeoBulletVSPlayer.GetArea() > 0)
                {
                    toRemoveEnemyBullet = enemy.bullet;
                    enemy.bullet        = null;
                    logic.DecreasePlayerLife();
                    logic.RespawnPlayer();
                }
                logic.RemoveEnemyBullet(toRemoveEnemyBullet);
            });

            this.InvalidateVisual();
        }