private void ProcessActions(List <ICombatAction> actions, IActionPlan plan)
        {
            if (actions.Count > 0)
            {
                var nextAction = actions[0];
                var poiFactory = new PointOfInterestFactory(BattleViewState.Dimensions);
                var poi        = nextAction.GetPointofInterest(poiFactory);

                Action panListener = null;
                panListener = new Action(() => {
                    Action listener = null;
                    listener        = new Action(() => {
                        ProcessActions(actions.Skip(1).ToList(), plan);
                        ActionCompleteSignal.RemoveListener(listener);
                    });
                    ActionCompleteSignal.AddListener(listener);
                    AnimateActionSignal.Dispatch(nextAction);

                    CameraPanCompleteSignal.RemoveListener(panListener);
                });
                CameraPanCompleteSignal.AddListener(panListener);
                PanToPointOfInterestSignal.Dispatch(poi);
            }
            else if (plan.HasActionsRemaining())
            {
                ProcessActions(plan.NextActionStep(BattleViewState.Battle), plan);
            }
            else
            {
                Release();
                EnemyTurnCompleteSignal.Dispatch();
            }
        }
        public override void Execute()
        {
            var battle = BattleViewState.Battle;
            var plan   = battle.GetActionPlan(ArmyType.Enemy);

            if (plan.HasActionsRemaining())
            {
                Retain();
                ProcessActions(plan.NextActionStep(battle), plan);
            }
            else
            {
                EnemyTurnCompleteSignal.Dispatch();
            }
        }