/
expens1ve
/
project_war
Обзор
Документация
Войти
/
expens1ve
/
project_war
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
solid
UI/Commands/ExecuteStepCommand.cs
67 строк
3 KB
Vadim
add command, undo, redo
20 май 2026, 01:42
20 май 2026, 01:42
27e173e
Код
Авторство
О чём код?
using System; using project_war.Engine.Interfaces; using project_war.Models.Interfaces; using project_war.UI.Interfaces; namespace project_war.UI.Commands { public class ExecuteStepCommand : IUndoableCommand { private readonly IGameService _gameService; private readonly IBattlefield _battlefield; private readonly IArmy _army1; private readonly IArmy _army2; private readonly Action _executeStepLogic; private readonly Func<int> _getRound; private readonly Action<int, string> _setRoundAndFormation; private string? _snapshotBefore; private string? _snapshotAfter; public ExecuteStepCommand( IGameService gameService, IBattlefield battlefield, IArmy army1, IArmy army2, Action executeStepLogic, Func<int> getRound, Action<int, string> setRoundAndFormation) { _gameService = gameService ?? throw new ArgumentNullException(nameof(gameService)); _battlefield = battlefield ?? throw new ArgumentNullException(nameof(battlefield)); _army1 = army1 ?? throw new ArgumentNullException(nameof(army1)); _army2 = army2 ?? throw new ArgumentNullException(nameof(army2)); _executeStepLogic = executeStepLogic ?? throw new ArgumentNullException(nameof(executeStepLogic)); _getRound = getRound ?? throw new ArgumentNullException(nameof(getRound)); _setRoundAndFormation = setRoundAndFormation ?? throw new ArgumentNullException(nameof(setRoundAndFormation)); } public void Execute() { // Делаем снимок ДО _snapshotBefore = _gameService.GetStateSnapshot(_army1, _army2, _getRound(), _battlefield.CurrentFormation.GetType().Name); // Выполняем логику хода (перемещение в следующий раунд, ResolveCombat) _executeStepLogic.Invoke(); // Делаем снимок ПОСЛЕ _snapshotAfter = _gameService.GetStateSnapshot(_army1, _army2, _getRound(), _battlefield.CurrentFormation.GetType().Name); } public void Undo() { if (_snapshotBefore != null) { _gameService.ApplySnapshotToArmies(_snapshotBefore, _army1, _army2, _setRoundAndFormation); } } public void Redo() { if (_snapshotAfter != null) { _gameService.ApplySnapshotToArmies(_snapshotAfter, _army1, _army2, _setRoundAndFormation); } } } }