public void ChangeState(State newState) { currentState.Exit(this); previousState = currentState; currentState = newState; currentState.Enter(this); }
// Use this for initialization internal void Init(GameObject obj, Environment env) { agent = obj; controller = agent.GetComponent<AgentAI>()._controller as FSMAI; environment = env; currentState = InitialState.GetInstance(); previousState = null; currentState.Enter(this); }
/// <summary> /// Конструктор. /// Дан список конечных состояний (его длина n). В результате появляются вспомогательные состояния, /// которые первые n-1 конечных состояний сводят к n-му конечному состоянию /// В результате для проверки достаточно одного конечного состояния. /// </summary> /// <param name="_startState"> начальное состояние </param> /// <param name="_finishState"> список конечных состояний </param> /// <param name="_states"> список состояний </param> public Automation(State _startState, List<State> _finishState, List<State> _states) { startState = _startState; for (int i = 0; i < _states.Count; i++) states.Add(_states[i]); State endState = _finishState[_finishState.Count - 1]; for (int i = 0; i < _finishState.Count; i++) { State s = new State(endState.nameState); //endState.links.Add(s); foreach (var element in states) if (element.nameState == _finishState[i].nameState) { element.links.Add(new Link() { newState = s, symbol = "" }); continue; } } finishState = endState; }
public Transition(State target, FSMAction action) { this.target = target; this.action = action; }
public static FSMContext createFSMInstance(State currentState, FSMAction init, string name) { return new FSMContext(currentState, init, name); }
void ChangeState(State newState) { switch (currentState) { case State.INITIAL: break; case State.WANDER: break; case State.GO_TO_EGG: break; case State.GO_TO_SEED: break; case State.BRING_EGG: transform.GetChild(0).transform.parent = null; break; case State.BRING_SEED: if (newState == State.GO_TO_EGG) { GraphNode node = AstarPath.active.GetNearest(transform.GetChild(0).transform.position, NNConstraint.Default).node; transform.GetChild(0).transform.position = (Vector3)node.position; transform.GetChild(0).tag = "SEED"; transform.GetChild(0).transform.parent = null; break; } if (newState == State.WANDER) { transform.GetChild(0).transform.parent = null; } break; } switch (newState) { case State.INITIAL: break; case State.WANDER: pathFeeder.enabled = true; pathFeeder.target = GetTarget("wayPoint"); break; case State.GO_TO_EGG: pathFeeder.target = currentEGG; break; case State.GO_TO_SEED: pathFeeder.target = currentSEED; break; case State.BRING_EGG: currentEGG.transform.parent = transform; transform.GetChild(0).tag = "DONE"; pathFeeder.target = GetTarget("hatchingPoint"); break; case State.BRING_SEED: currentSEED.transform.parent = transform; transform.GetChild(0).tag = "DONE"; pathFeeder.target = GetTarget("storePoint"); break; } currentState = newState; }