/// <summary> /// Traces a grid vertex step back to the source. /// </summary> /// <param name="vert">The final vertex.</param> /// <returns>The number of steps taken to reach the start.</returns> public int TraceSteps(GridVertex vert) { int steps = 0; while (!vert.Equals(Unit.Coords)) { steps++; AffectedPaths.TryGetValue(vert, out vert); } return(steps); }
/// <summary> /// Executes and then deselects the action. This usually happens when right clicking after an action has been selected. /// </summary> public override void Execute() { SubtractEnergy(); Game game = Unit.Engine3D.Source as Game; GridVertex target = game.CursorController.Target; if (AffectedVertices.Contains(target)) { List <GridVertex> steps = new List <GridVertex>(); while (!target.Equals(Unit.Coords)) { steps.Add(target); AffectedPaths.TryGetValue(target, out target); } Unit.MoveSteps = steps.Reverse <GridVertex>().ToList().GetEnumerator(); Unit.MoveSteps.MoveNext(); Unit.IsMoving = true; game.UnitController.Entity.RemoveProperty <BasicMeshRenderableProperty>(); game.UnitController.SelectedAction = null; } }