From ed9b183c53d64706ee26ad84ed8e5b2a3ddbbdb0 Mon Sep 17 00:00:00 2001 From: Ivory Date: Sat, 28 Jan 2023 03:06:31 -0500 Subject: [PATCH] exclusivity manager, not applied to selectionui --- .../gameobjects/ui/ExclusivityManager.java | 33 +++++++++++++++++++ .../hadean/gameobjects/ui/tabs/Tab.java | 12 ++++--- .../xyz/valnet/hadean/scenes/GameScene.java | 2 ++ 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java new file mode 100644 index 0000000..70b7bd2 --- /dev/null +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java @@ -0,0 +1,33 @@ +package xyz.valnet.hadean.gameobjects.ui; + +import xyz.valnet.engine.scenegraph.GameObject; +import xyz.valnet.hadean.gameobjects.ui.tabs.Tab; +import xyz.valnet.hadean.util.Assets; + +public class ExclusivityManager extends GameObject { + private Tab current = null; + + private boolean switching = false; + + public void switchTo(Tab tab) { + if(tab == current) return; + if(tab == null) { + closeCurrent(); + return; + } + Assets.sndBubble.play(); + switching = true; + if(current != null) current.close(); + current = tab; + current.open(); + switching = false; + } + + public void closeCurrent() { + if(switching) return; + Assets.sndCancel.play(); + current.close(); + current = null; + } + +} diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java index 39bff29..e3b8368 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/Tab.java @@ -1,11 +1,12 @@ package xyz.valnet.hadean.gameobjects.ui.tabs; +import static xyz.valnet.engine.util.Math.*; + import xyz.valnet.engine.graphics.ImmediateUI; import xyz.valnet.engine.scenegraph.ITransient; -import static xyz.valnet.engine.util.Math.lerp; import xyz.valnet.hadean.gameobjects.BottomBar; +import xyz.valnet.hadean.gameobjects.ui.ExclusivityManager; import xyz.valnet.hadean.interfaces.IBottomBarItem; -import xyz.valnet.hadean.util.Assets; import xyz.valnet.hadean.util.Layers; public abstract class Tab extends ImmediateUI implements IBottomBarItem, ITransient { @@ -15,6 +16,8 @@ public abstract class Tab extends ImmediateUI implements IBottomBarItem, ITransi protected boolean opened = false; private float animation = 0f; + private ExclusivityManager exclusivityManager; + @Override public void update(float dTime) { animation = lerp(animation, opened ? 1 : 0, dTime / 20); @@ -23,6 +26,7 @@ public abstract class Tab extends ImmediateUI implements IBottomBarItem, ITransi @Override protected void connect() { bottombar = get(BottomBar.class); + exclusivityManager = get(ExclusivityManager.class); } @Override @@ -56,15 +60,15 @@ public abstract class Tab extends ImmediateUI implements IBottomBarItem, ITransi public final void open() { if(opened) return; - Assets.sndBubble.play(); opened = true; + exclusivityManager.switchTo(this); onOpen(); } public final void close() { if(!opened) return; - Assets.sndCancel.play(); opened = false; + exclusivityManager.closeCurrent(); onClose(); } diff --git a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java index 618cdce..527846a 100644 --- a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java +++ b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java @@ -10,6 +10,7 @@ import xyz.valnet.hadean.gameobjects.SelectionUI; import xyz.valnet.hadean.gameobjects.Terrain; import xyz.valnet.hadean.gameobjects.inputlayer.BuildLayer; import xyz.valnet.hadean.gameobjects.inputlayer.SelectionLayer; +import xyz.valnet.hadean.gameobjects.ui.ExclusivityManager; import xyz.valnet.hadean.gameobjects.ui.HoverQuery; import xyz.valnet.hadean.gameobjects.ui.Popup; import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; @@ -53,6 +54,7 @@ public class GameScene extends SceneGraph { objects.add(new HoverQuery()); objects.add(new BottomBar()); + objects.add(new ExclusivityManager()); objects.add(new BuildTab()); // objects.add(new JobBoardTab()); objects.add(new DebugTab());