/// <summary> /// Checks the transitions, swaps the current state if any return true. /// Then updates the current state if we have one /// </summary> public void DoState(ref T obj) { //Don't do anything if we don't have a reference to the controller if (EqualityComparer <T> .Default.Equals(obj, default)) { return; } //Represents the start function if (_current == null && _target != null) { _current = _target; _current.State_Start(ref obj); } //Make sure we have a state we can call if (_current != null) { //Do we need to make a global transition //Do we need to make a transition out of the current state if (CheckTransitions(ref obj, ref globalTransitions, null) || CheckTransitions(ref obj, ref _current.transitions, _current.ignoreTransition)) { //Swap the states SwapStates(ref obj); } //Call update on our current state _current.State_Update(ref obj); } }