protected virtual void InitializeStateMachineCore()
        {
            stateMachineCore = new StateMachineCore <IStateNodeService>(UpdateStateNodeStatus, false);
            stateNodeList.StateNodes.ForEach(node => stateMachineCore.RegisterStateNode(node, new StateNodeCore <IStateNodeService>(node, stateMachineCore)));

            var stateNode = stateNodeList.GetStateNode(stateNodeList.FirstState.GetType());

            if (stateNode != null)
            {
                CurrentState  = stateNode;
                PreviousState = stateNode;
                StartCoroutine(STMCore.StartStateMachine(stateNode));
            }
        }
        public virtual void UpdateState <NODE_TYPE>() where NODE_TYPE : IStateNodeService
        {
            var stateNode = stateNodeList.GetStateNode <NODE_TYPE>();

            if (stateNode != null)
            {
                bool isSuccess = STMCore.TryMoveState(stateNode);

                if (isSuccess)
                {
                    PreviousState = CurrentState;
                    CurrentState  = stateNode;
                }
            }
        }
        public virtual void UpdateState(Type type)
        {
            var stateNode = stateNodeList.GetStateNode(type);

            if (stateNode != null)
            {
                bool isSuccess = STMCore.TryMoveState(stateNode);

                if (isSuccess)
                {
                    PreviousState = CurrentState;
                    CurrentState  = stateNode;
                }
            }
        }
 public virtual void ShutdownSTM()
 {
     STMCore.Shutdown();
 }