Mercurial > repos > IBDev-IBBoard.WarFoundry.API
changeset 473:0d032c04210e
Re #359: Add "only contained" attribute to unit types
* Make sure remove handles sub-units as well
Note: warning the user that the unit has sub-units rather than just removing them is left to the UI
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Mon, 16 Apr 2012 20:47:14 +0100 |
parents | e6c93ceba119 |
children | e47cb422aac1 |
files | API/Commands/RemoveUnitCommand.cs |
diffstat | 1 files changed, 28 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/API/Commands/RemoveUnitCommand.cs Mon Apr 16 20:14:23 2012 +0100 +++ b/API/Commands/RemoveUnitCommand.cs Mon Apr 16 20:47:14 2012 +0100 @@ -6,6 +6,7 @@ using IBBoard.Commands; using IBBoard.Lang; using IBBoard.WarFoundry.API.Objects; +using System.Collections.Generic; namespace IBBoard.WarFoundry.API.Commands { @@ -15,12 +16,15 @@ public class RemoveUnitCommand : Command { private Unit unit; + private Unit parentUnit; private ArmyCategory cat; + private List<RemoveUnitCommand> subCommands; public RemoveUnitCommand(Unit toRemove) { unit = toRemove; cat = unit.Category; + parentUnit = unit.ParentUnit; } public override bool CanExecute() @@ -44,20 +48,43 @@ } } + private void Prepare() + { + subCommands = new List<RemoveUnitCommand>(); + foreach (Unit containedUnit in unit.ContainedUnits) + { + RemoveUnitCommand removeUnitCommand = new RemoveUnitCommand(containedUnit); + removeUnitCommand.Prepare(); + subCommands.Add(removeUnitCommand); + } + } public override bool Execute() { - this.Redo(); + Prepare(); + Redo(); return true; } public override void Redo() { + unit.ParentUnit = null; cat.RemoveUnit(unit); + + foreach (RemoveUnitCommand subCommand in subCommands) + { + subCommand.Redo(); + } } public override void Undo() { + unit.ParentUnit = parentUnit; cat.AddUnit(unit); + + foreach (RemoveUnitCommand subCommand in subCommands) + { + subCommand.Undo(); + } } public override string Name