internal bool MeetsPreconditions(WorldStateManager worldState) { foreach (WorldProperty condition in Preconditions) { if (worldState.IsInState(condition)) { return(true); } } return(Preconditions.Count == 0); }
public bool Update(WorldStateManager worldState) { foreach (Action optionalAction in OptionalActions) { if (!_completedActions.Contains(optionalAction) && !_runningActions.Contains(optionalAction) && worldState.IsInState(optionalAction.RuntimePreconditions)) { _runningActions.Add(optionalAction); } } for (int idx = _runningActions.Count - 1; idx >= 0; idx--) { if (!_runningActions[idx].CanExit(worldState)) { _runningActions[idx].Perform(); } else { _completedActions.Add(_runningActions[idx]); _runningActions.RemoveAt(idx); } } if (_runningActions.Count == 0) { Cleanup(); return(false); } return(true); }
public bool CanExit(WorldStateManager worldState) { return(worldState.IsInState(_runtimeExitConditions)); }