/
puma
/
ppa
Обзор
Документация
Войти
/
puma
/
ppa
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Commands/ChangeFormationCommand.cs
57 строк
3 KB
Margarita
new
29 май 2026, 17:05
29 май 2026, 17:05
cc969a9
Код
Авторство
О чём код?
/// <summary> /// Команда «Перестроить армию»: меняет текущее построение боя. /// Поддерживает отмену — сохраняет предыдущее построение и восстанавливает его при Undo(). /// Имеет два режима: консольный (показывает диалог выбора) и GUI (построение задаётся снаружи). /// </summary> public class ChangeFormationCommand : IGameCommand { private readonly Battle _battle; private IBattleFormation? _previousFormation; private IBattleFormation? _chosenFormation; public string Name => "Перестроить армию"; /// <summary>Отмена доступна после первого выполнения.</summary> public bool CanUndo => _previousFormation != null; /// <summary>Для консольной версии — построение выбирается интерактивно при Execute().</summary> public ChangeFormationCommand(Battle battle) { _battle = battle; } /// <summary>Для GUI — построение задаётся заранее, диалог не показывается.</summary> public ChangeFormationCommand(Battle battle, IBattleFormation newFormation) { _battle = battle; _chosenFormation = newFormation; } /// <summary> /// Запоминает текущее построение, затем применяет новое. /// В консольном режиме показывает диалог выбора через BattleFormationSelector. /// </summary> public void Execute() { _previousFormation = _battle.CurrentFormation; if (_chosenFormation == null) { var selector = new BattleFormationSelector(); _chosenFormation = selector.SelectFormation(); } _battle.CurrentFormation = _chosenFormation; System.Console.WriteLine($"\n✓ Построение изменено на: {_chosenFormation.Name}"); } /// <summary> /// Возвращает предыдущее построение. Swap-логика позволяет повторно делать Redo. /// </summary> public void Undo() { if (_previousFormation == null) return; var current = _battle.CurrentFormation; _battle.CurrentFormation = _previousFormation; _previousFormation = current; System.Console.WriteLine($"\n↩ Построение возвращено: {_battle.CurrentFormation.Name}"); } }