Exemple #1
0
        internal bool MeetsPreconditions(WorldStateManager worldState)
        {
            foreach (WorldProperty condition in Preconditions)
            {
                if (worldState.IsInState(condition))
                {
                    return(true);
                }
            }

            return(Preconditions.Count == 0);
        }
Exemple #2
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);
        }
Exemple #3
0
 public bool CanExit(WorldStateManager worldState)
 {
     return(worldState.IsInState(_runtimeExitConditions));
 }