public void Change <New_State>() where New_State : IState, new() { if (next != null) { return; } if (!_states.TryGetValue(TypeID.Get <New_State>(), out var next_state)) { _states[TypeID.Get <New_State>()] = next_state = new New_State(); init = true; } next = next_state; }