/// <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); }