/
romashov.z
/
PPAGame
Обзор
Документация
Войти
/
romashov.z
/
PPAGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Core/Commands/CommandHistory.cs
59 строк
2 KB
Zakhar Romashov
Исправлен баг с id юнита и реализован весь функционал для последнего демо
28 май 2026, 23:32
28 май 2026, 23:32
c35199f
Код
Авторство
О чём код?
using System.Collections.Generic; namespace ArmyBattleGame { // Хранит стеки Undo и Redo и начальный снапшот для сброса в начало. // Паттерн Command + Memento: каждая команда перед исполнением // передаёт сюда снапшот текущего состояния через RecordBeforeCommand. class CommandHistory { private readonly Stack<BattleFieldMemento> _undoStack = new(); private readonly Stack<BattleFieldMemento> _redoStack = new(); private BattleFieldMemento? _initialState; public bool CanUndo => _undoStack.Count > 0; public bool CanRedo => _redoStack.Count > 0; public bool CanReset => _initialState != null; // Запомнить состояние до первого хода — для «Отбросить в начало». public void SaveInitialState(BattleFieldMemento memento) { _initialState = memento; } // Вызывается командой перед исполнением: // сохраняет снапшот в стек Undo и очищает Redo. public void RecordBeforeCommand(BattleFieldMemento snapshot) { _undoStack.Push(snapshot); _redoStack.Clear(); } // Отменить ход: возвращает состояние для восстановления, // текущий снапшот помещает в Redo. public BattleFieldMemento? Undo(BattleFieldMemento currentSnapshot) { if (!CanUndo) return null; _redoStack.Push(currentSnapshot); return _undoStack.Pop(); } // Повторить отменённый ход: возвращает состояние для восстановления, // текущий снапшот помещает в Undo. public BattleFieldMemento? Redo(BattleFieldMemento currentSnapshot) { if (!CanRedo) return null; _undoStack.Push(currentSnapshot); return _redoStack.Pop(); } // Отбросить в начало: очищает оба стека, возвращает начальный снапшот. public BattleFieldMemento? Reset() { _undoStack.Clear(); _redoStack.Clear(); return _initialState; } } }