# HG changeset patch # User IBBoard # Date 1334605634 -3600 # Node ID 0d032c04210edbe61db04fc94efb1b71a417bec6 # Parent e6c93ceba1197a81acce1f8dccecb3cbadd95f98 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 diff -r e6c93ceba119 -r 0d032c04210e API/Commands/RemoveUnitCommand.cs --- 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 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(); + 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