/// <summary> /// Swaps target state to current state /// </summary> /// <param name="obj">A reference to the object</param> void SwapStates(ref T obj) { //Make sure we have a valid controller if (EqualityComparer <T> .Default.Equals(obj, default) || _target == _current || _target == null) { return; } //Call end on our current state _current.State_End(ref obj); //Swap our states around #if PREVIOUS_STATE_MACHINE _previous = _current; #endif _current = _target; _target = null; //call state on our new state _current.State_Start(ref obj); }