Пример #1
0
    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);
    }
Пример #2
0
    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);
    }
Пример #3
0
 public void RegisterState(tdIState state)
 {
     _states[state.GetType()] = state;
 }