public bool ChangeState(Type stateType, params object[] args) { //if same type if (_currentState == stateType) { return(false); } //if not the one to be changing to if (!_states.TryGetValue(stateType, out tdIState newState)) { return(false); } //correct one if (_currentState != null && _states.TryGetValue(_currentState, out tdIState currentState)) { currentState.OnStateExit(args); } _currentState = stateType; newState.OnStateEnter(args); _existing = newState; return(true); }
void InitializeFSM() { foreach (tdEntityState s in EntityStates) { string strType = $"td{s}State"; Type t = Type.GetType(strType); if (t == null) { throw new Exception(strType + " doesnt implement yet"); } tdIState state = (tdIState)Activator.CreateInstance(t, this, 0); this.RegisterState(state); } string csString = $"td{FirstEntityState}State"; Type cs = Type.GetType(csString); ChangeState(cs); }
public void RegisterState(tdIState state) { _states[state.GetType()] = state; }