package hunternif.mc.atlas.client.gui.core;

/**
 * A mechanism to encapsulate actions that need to be done every time a GUI
 * switches between distinct states of behavior.
 * @author Hunternif
 */
public class GuiStates {
	/** Meant to declare anonymous classes. */
	public static interface IState {
		void onEnterState();
		void onExitState();
	}
	
	/** A simple state that does nothing upon enter or exit. */
	public static class SimpleState implements IState {
		@Override
		public void onEnterState() {}
		@Override
		public void onExitState() {}
	}
	
	private volatile IState currentState;
	
	public IState current() {
		return currentState;
	}
	
	public boolean is(IState state) {
		return currentState == state;
	}
	
	public void switchTo(IState state) {
		if (currentState != null) {
			currentState.onExitState();
		}
		currentState = state;
		if (state != null) {
			state.onEnterState();
		}
	}
}
