Esempio n. 1
0
        /// <summary>
        /// Creates and initializes a new state. This method should be used in a postfix patch
        /// on InitializeStates if new states are to be added.
        /// </summary>
        /// <typeparam name="T">The state machine type.</typeparam>
        /// <typeparam name="I">The state machine Instance type.</typeparam>
        /// <typeparam name="M">The state machine Target type.</typeparam>
        /// <param name="sm">The base state machine.</param>
        /// <param name="name">The state name.</param>
        /// <returns>The new state.</returns>
        public static GameStateMachine <T, I, M> .State CreateState <T, I, M>(
            this GameStateMachine <T, I, M> sm, string name) where M : IStateMachineTarget
            where T : GameStateMachine <T, I, M, object> where I :
        GameStateMachine <T, I, M, object> .GameInstance
        {
            var state = new GameStateMachine <T, I, M> .State();

            if (string.IsNullOrEmpty(name))
            {
                name = "State";
            }
            if (sm == null)
            {
                throw new ArgumentNullException(nameof(sm));
            }
            state.defaultState = sm.GetDefaultState();
            // Process any sub parameters
            sm.CreateStates(state);
            sm.BindState(sm.root, state, name);
            return(state);
        }