示例#1
0
        private void MoveStateMachine(PalmStateCommand command)
        {
            PalmState beforeState = _palmState.CurrentState;

            _palmState.MoveNext(command);
            PalmState afterState = _palmState.CurrentState;

            GameObject nearestGameObject = null;

            if ((beforeState == PalmState.Grabbing || beforeState == PalmState.Hovering) && afterState == PalmState.Idle)
            {
                nearestGameObject = _cachedNearestGameObject;
            }
            else
            {
                _cachedNearestGameObject = Hand.Palm.NearObjects[0].gameObject;
                nearestGameObject        = _cachedNearestGameObject;
            }

            if (!nearestGameObject)
            {
                Debug.LogError("Could not reference the nearest gameobject");
                return;
            }

            _handObjectReferences.AcceptStateTransitionForObject(nearestGameObject, beforeState, afterState);
        }
        private KeyValuePair <PalmState, Action> GetNext(PalmStateCommand palmStateCommand)
        {
            PalmStateTransition transition = new PalmStateTransition(_currentState, palmStateCommand);
            KeyValuePair <PalmState, Action> nextState;

            if (!_transitions.TryGetValue(transition, out nextState))
            {
                throw new Exception("Invalid transition: " + _currentState + " -> " + palmStateCommand);
            }

            return(nextState);
        }
        /// <summary>
        /// Event to notify state machine to move onto next state.
        /// </summary>
        /// <param name="palmStateCommand">Command to exicute.</param>
        /// <returns>New palm state.</returns>
        public PalmState MoveNext(PalmStateCommand palmStateCommand)
        {
            var nextState = GetNext(palmStateCommand);

            _currentState = nextState.Key;
            if (nextState.Value != null)
            {
                nextState.Value.Invoke();
            }
            else
            {
                UnityEngine.Debug.Log("Nest state event is null");
            }
            return(_currentState);
        }
 public PalmStateTransition(PalmState currentState, PalmStateCommand palmStateCommand)
 {
     _currentState     = currentState;
     _palmStateCommand = palmStateCommand;
 }