protected override GUIFSM <Button> CreateFSM() { var iState = new ButtonState(); iState.AddTransition(GUIEventID.MouseEnter, 1); iState.AddTransition(GUIEventID.FocusGained, 2); var hState = new ButtonState(); hState.AddTransition(GUIEventID.MouseExit, 0); hState.AddTransition(GUIEventID.FocusGained, 3); var fState = new FocusedState(); fState.AddTransition(GUIEventID.FocusLost, 0); fState.AddTransition(GUIEventID.MouseEnter, 3); var fhState = new FocusedState(); fhState.AddTransition(GUIEventID.FocusLost, 1); fhState.AddTransition(GUIEventID.MouseExit, 2); fhState.AddTransition(GUIEventID.LeftMouseDown, 4); var phState = new PressedState(); phState.AddTransition(GUIEventID.LeftMouseUp, 3); phState.AddTransition(GUIEventID.MouseExit, 5); phState.AddTransition(GUIEventID.FocusLost, 1); var pState = new FocusedState(); pState.AddTransition(GUIEventID.MouseEnter, 4); pState.AddTransition(GUIEventID.LeftMouseUp, 2); pState.AddTransition(GUIEventID.FocusLost, 0); return(new GUIFSM <Button>(this, new GUIState <Button>[] { iState, hState, fState, fhState, phState, pState })); }