diff options
Diffstat (limited to 'Thronefall_v1.0/Decompile/ThronefallUIElement.cs')
-rw-r--r-- | Thronefall_v1.0/Decompile/ThronefallUIElement.cs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/ThronefallUIElement.cs b/Thronefall_v1.0/Decompile/ThronefallUIElement.cs new file mode 100644 index 0000000..e2c9d64 --- /dev/null +++ b/Thronefall_v1.0/Decompile/ThronefallUIElement.cs @@ -0,0 +1,166 @@ +using UnityEngine; +using UnityEngine.Events; + +public abstract class ThronefallUIElement : MonoBehaviour +{ + public enum NavigationDirection + { + Right, + Left, + Up, + Down + } + + public enum SelectionState + { + Default, + Focussed, + Selected, + FocussedAndSelected + } + + protected SelectionState currentState; + + protected SelectionState previousState; + + public bool ignoreMouse; + + public bool autoSelectOnFocus; + + public bool cannotBeSelected; + + public ThronefallUIElement leftNav; + + public ThronefallUIElement rightNav; + + public ThronefallUIElement topNav; + + public ThronefallUIElement botNav; + + public UnityEvent onSelectionStateChange = new UnityEvent(); + + public UnityEvent onApply = new UnityEvent(); + + public UnityEvent<NavigationDirection> onEmptyNavigate = new UnityEvent<NavigationDirection>(); + + public SelectionState CurrentState => currentState; + + public SelectionState PreviousState => previousState; + + public virtual bool dragable => false; + + public void Apply() + { + if (!SceneTransitionManager.instance.SceneTransitionIsRunning) + { + onApply.Invoke(); + OnApply(); + } + } + + public void Select() + { + SetState(SelectionState.Selected); + } + + public void Focus() + { + SetState(SelectionState.Focussed); + } + + public void FocusAndSelect() + { + SetState(SelectionState.FocussedAndSelected); + } + + public void Clear() + { + SetState(SelectionState.Default); + } + + public void HardStateSet(SelectionState selectionState) + { + currentState = selectionState; + previousState = selectionState; + OnHardStateSet(selectionState); + } + + protected abstract void OnApply(); + + protected abstract void OnClear(); + + protected abstract void OnSelect(); + + protected abstract void OnFocus(); + + protected abstract void OnFocusAndSelect(); + + protected abstract void OnHardStateSet(SelectionState selectionState); + + private void SetState(SelectionState state) + { + if (state != currentState) + { + previousState = currentState; + currentState = state; + switch (currentState) + { + case SelectionState.Default: + OnClear(); + break; + case SelectionState.Focussed: + OnFocus(); + break; + case SelectionState.Selected: + OnSelect(); + break; + case SelectionState.FocussedAndSelected: + OnFocusAndSelect(); + break; + } + onSelectionStateChange.Invoke(); + } + } + + public ThronefallUIElement TryNavigate(NavigationDirection direction) + { + if (SceneTransitionManager.instance.SceneTransitionIsRunning) + { + return this; + } + ThronefallUIElement thronefallUIElement = null; + switch (direction) + { + case NavigationDirection.Down: + thronefallUIElement = botNav; + break; + case NavigationDirection.Up: + thronefallUIElement = topNav; + break; + case NavigationDirection.Left: + thronefallUIElement = leftNav; + break; + case NavigationDirection.Right: + thronefallUIElement = rightNav; + break; + } + if ((bool)thronefallUIElement && !thronefallUIElement.gameObject.activeInHierarchy) + { + return thronefallUIElement.TryNavigate(direction); + } + onEmptyNavigate.Invoke(direction); + return thronefallUIElement; + } + + public virtual void OnDrag(Vector2 mousePosition) + { + } + + public virtual void OnDragEnd() + { + } + + public virtual void OnDragStart() + { + } +} |