protected Automata move_transition(Transition trans)
	{
		// if the from_state is above ours, we need to get to the pivot first
		trans.invoke_entry(this);
		if (current != null){
			while (current != trans.pivot) {
				if (current == null){
					Debug.LogError("Automata not on transition path.");
					return this;
				}
				eject();
			}
		} else {
			move_direct(trans.pivot);
		}
		trans.invoke_transfer(this);
		foreach(State down in trans.downswing){
			move_direct(down);
		}
		trans.invoke_exit(this);
		return this;
	}