private bool ExecuteAction(IAIAction action, Token token) { if (action is IAIAction.IConditional conditional) { return(ExecuteAction(action, conditional, token)); } else if (action.Execute(token)) { if (cancelableAction != null && cancelableAction != action) { cancelableAction.Cancel(new IAIAction.ICancelable.Token(Source)); cancelableAction = null; } if (action is IAIAction.ICancelable cancelAction) { cancelableAction = cancelAction; } if (currentAIAction != action && action is IAIAction.IStartable startableAction) { startableAction.Start(new IAIAction.IStartable.Token(Source)); } currentAIAction = action; return(true); } else if (cancelableAction == action) { cancelableAction.Cancel(new IAIAction.ICancelable.Token(Source)); cancelableAction = null; } return(false); }
public void CancelAction() { if (cancelableAction == null) { return; } cancelableAction.Cancel(new IAIAction.ICancelable.Token(Source)); cancelableAction = null; currentAIAction = null; }
public bool Execute() { Token token = new Token(Source); foreach (IAIAction action in Actions) { if (ExecuteAction(action, token)) { return(true); } } if (cancelableAction != null) { cancelableAction.Cancel(new IAIAction.ICancelable.Token(Source)); cancelableAction = null; } currentAIAction = null; return(false); }
public void RemoveAction(IAIAction action) { if (cancelableAction == action) { cancelableAction.Cancel(new IAIAction.ICancelable.Token(Source)); cancelableAction = null; } if (action is IAIAction.IReinitialize reinitializeAction) { reinitializeActions.Remove(reinitializeAction); } if (action is IAIAction.IStartable startableAction) { startableActions.Remove(startableAction); } if (action is IAIAction.IRemove removeAction) { removeAction.Remove(); } actions.Remove(action); }