/// <summary> /// Метод обновления объектов выбранного экрана /// </summary> public void Update() { int index = _enemiesObjects.FindIndex(e => e.IsShow); if (index == -1) { Log.AddMessage($"Все противники уничтожены. Новый уровень."); foreach (BaseObject enemy in _enemiesObjects) { enemy.Respawn(Game.GenerateRandomPointBehindScreen()); } if (Game._random.Next(0, 2) == 1) { _enemiesObjects.Add(ManagerEnemies.getAsteroid()); } else { _enemiesObjects.Add(ManagerEnemies.getAlien()); } foreach (BaseObject bonus in _bonuses) { bonus.Respawn(Game.GenerateRandomPointBehindScreen()); } } foreach (BaseObject obj in _neitralObjects) { obj.Update(); } foreach (BaseObject enemy in _enemiesObjects) { if (enemy.IsShow) { enemy.Update(); foreach (BaseObject bullet in _bullets) { if (bullet.IsShow && enemy.isCollision(bullet)) { enemy.IsShow = false; bullet.IsShow = false; _score++; Log.AddMessage($"Пуля {bullet.Tag} уничтожила {enemy.Tag}"); } } if (enemy.isCollision(_ship)) { _ship.EnergyLow(10); enemy.IsShow = false; Log.AddMessage($"Корабль поврежден объектом {enemy.Tag}"); } } } foreach (BaseObject bonus in _bonuses) { if (bonus.IsShow) { bonus.Update(); if (bonus.isCollision(_ship)) { _ship.GetBonus(bonus); bonus.IsShow = false; Log.AddMessage($"Корабль получил бонус {bonus.Tag}"); } } } foreach (BaseObject bullet in _bullets) { if (bullet.IsShow) { bullet.Update(); if (bullet is Bullet) { var temp = bullet as Bullet; if (!temp.IsAlive) { Log.AddMessage($"Дальность полета пули привышена {bullet.Tag}"); bullet.IsShow = false; } } } } }