From 7c0a3be105d1ad73cfcec53ea085af61d0f4cf09 Mon Sep 17 00:00:00 2001 From: Ivory Date: Wed, 18 Jan 2023 17:31:27 -0500 Subject: [PATCH] new selection ui --- .../hadean/gameobjects/SelectionUI.java | 77 +++++++++++++------ .../xyz/valnet/hadean/scenes/GameScene.java | 2 +- 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/SelectionUI.java b/src/main/java/xyz/valnet/hadean/gameobjects/SelectionUI.java index bc8d91a..90673b1 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/SelectionUI.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/SelectionUI.java @@ -2,14 +2,16 @@ package xyz.valnet.hadean.gameobjects; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Set; import xyz.valnet.engine.graphics.ImmediateUI; -import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.scenegraph.ITransient; import xyz.valnet.hadean.gameobjects.inputlayer.SelectionLayer; import xyz.valnet.hadean.interfaces.ISelectable; import xyz.valnet.hadean.interfaces.ISelectionChangeListener; +import xyz.valnet.hadean.util.Action; import xyz.valnet.hadean.util.Layers; import xyz.valnet.hadean.util.detail.Detail; @@ -22,6 +24,7 @@ public class SelectionUI extends ImmediateUI implements ISelectionChangeListener private String genericName; private List selected = new ArrayList(); private transient SelectedByType selectedByType = new SelectedByType(); + private transient Set actions = new HashSet(); private SelectionLayer selectionManager; @@ -56,12 +59,17 @@ public class SelectionUI extends ImmediateUI implements ISelectionChangeListener selected = newSelection; selectedByType.clear(); selectedCount = newSelection.size(); + actions.clear(); for(ISelectable selectable : newSelection) { Class clazz = selectable.getClass(); properName = selectable.getName(); genericName = selectable.getGenericName(); + for(Action action : selectable.getActions()) { + actions.add(action); + } + if(!selectedByType.containsKey(clazz)) { selectedByType.put(clazz, new ArrayList()); @@ -80,34 +88,53 @@ public class SelectionUI extends ImmediateUI implements ISelectionChangeListener protected void gui() { if(selected.isEmpty()) return; - if(selectedByType.size() == 1) { - if(selectedCount == 1) { - text(properName + "\n "); - group(); - Detail[] details = selected.get(0).getDetails(); - if(details.length == 0) { - text("No details available."); - } else for(Detail detail : details) { - text(detail.toString(15)); + window(padding, 576 - padding - height - BottomBar.bottomBarHeight, width, height, () -> { + if(selectedByType.size() == 1) { + if(selectedCount == 1) { + text(properName); + space(8); + group(() -> { + Detail[] details = selected.get(0).getDetails(); + if(details.length == 0) { + text("No details available."); + } else for(Detail detail : details) { + text(detail.toString(15)); + } + }); + } else { + text("" + selectedCount + "x " + genericName); } - groupEnd(); } else { - text("" + selectedCount + "x " + genericName); - } - } else { - text(this.selected.size() + " items selected"); - text(""); - - for(var entry : selectedByType.entrySet()) { - List list = entry.getValue(); - int count = list.size(); - if(count <= 0) continue; - String name = list.get(0).getGenericName(); - - if(button(name, count + "x " + name)) { - newSelection = list; + text(this.selected.size() + " items selected"); + + for(var entry : selectedByType.entrySet()) { + space(8); + List list = entry.getValue(); + int count = list.size(); + if(count <= 0) continue; + String name = list.get(0).getGenericName(); + + if(button(name, count + "x " + name)) { + newSelection = list; + } } } + }); + + if(selectedByType.size() == 1) { + root(padding * 2 + width, 576 - 32 - padding - BottomBar.bottomBarHeight, 1000, 32, () -> { + horizontal(() -> { + for(Action action : actions) { + if(button(action.name)) { + for(ISelectable selectable : selected) { + selectable.runAction(action); + } + } + space(8); + } + }); + }); } + } } diff --git a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java index ae353b0..e37d02e 100644 --- a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java +++ b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java @@ -45,7 +45,7 @@ public class GameScene extends SceneGraph { } objects.add(new SelectionLayer()); - // objects.add(new SelectionUI()); + objects.add(new SelectionUI()); objects.add(new BuildLayer());