diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java b/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java index 4f26ca3..44a69d2 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/JobBoard.java @@ -11,7 +11,6 @@ import java.util.stream.Stream; import xyz.valnet.engine.graphics.Color; import xyz.valnet.engine.math.Vector2i; -import xyz.valnet.engine.math.Vector4f; import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.hadean.HadeanGame; import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn; @@ -174,6 +173,40 @@ public class JobBoard extends GameObject { // } else return null; // } + public String getValidJobs() { + Map jobs = new HashMap(); + for(Job job : availableJobs) { + if(!job.isValid()) continue; + String name = job.getJobName(); + if(!jobs.containsKey(name)) jobs.put(name, 0); + jobs.put(name, jobs.get(name) + 1); + } + String str = ""; + for(Entry entry : jobs.entrySet()) { + // int num = entry.getValue(); + // if(num == 1) str += " " + str += entry.getValue() + "x " + entry.getKey() + "\n"; + } + return str.trim(); + } + + public String getInvalidJobs() { + String str = ""; + for(Job job : availableJobs) { + if(job.isValid()) continue; + str += " " + job.getJobName() + "\n"; + } + return str; + } + + public String getTakenJobs() { + String str = ""; + for(Entry allocation : allocations.entrySet()) { + str += " " + allocation.getKey().getName() + ": " + allocation.getValue().getJobName() + "\n"; + } + return str; + } + public String details() { String takenJobsString = ""; diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java index ec378b9..abf561b 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/SelectionLayer.java @@ -213,7 +213,7 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea, ITr public void clearSelection() { if(selected.size() == 0) return; - selected.clear(); + selected = new ArrayList(); broadcastSelectionChanged(); } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java index 6500ba8..9ff9f4e 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/ExclusivityManager.java @@ -2,17 +2,20 @@ package xyz.valnet.hadean.gameobjects.ui; import xyz.valnet.engine.graphics.IModalUI; import xyz.valnet.engine.scenegraph.GameObject; +import xyz.valnet.engine.scenegraph.IKeyboardListener; import xyz.valnet.engine.scenegraph.ITransient; import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; +import xyz.valnet.hadean.gameobjects.ui.tabs.MenuTab; import xyz.valnet.hadean.gameobjects.ui.tabs.Tab; import xyz.valnet.hadean.util.Assets; -public class ExclusivityManager extends GameObject implements ITransient { +public class ExclusivityManager extends GameObject implements ITransient, IKeyboardListener { private IModalUI current = null; private boolean switching = false; private IModalUI defaultTab = null; + private IModalUI menuTab = null; public void switchTo(IModalUI tab) { if(tab == current) return; @@ -41,9 +44,25 @@ public class ExclusivityManager extends GameObject implements ITransient { else current.back(); } + private void backOrMenu() { + if(current == null) switchTo(menuTab); + else current.back(); + } + @Override protected void connect() { defaultTab = get(BuildTab.class); + menuTab = get(MenuTab.class); } + @Override + public void keyPress(int code) { + if(code == 256) { // ESCAPE + backOrMenu(); + } + } + + @Override + public void keyRelease(int code) {} + } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/JobBoardTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/JobBoardTab.java index 9512ba6..f67a2e0 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/JobBoardTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/JobBoardTab.java @@ -1,93 +1,53 @@ package xyz.valnet.hadean.gameobjects.ui.tabs; -import static xyz.valnet.engine.util.Math.lerp; - -import java.util.ArrayList; -import java.util.List; - -import xyz.valnet.engine.graphics.Drawing; import xyz.valnet.hadean.gameobjects.BottomBar; import xyz.valnet.hadean.gameobjects.JobBoard; -import xyz.valnet.hadean.gameobjects.inputlayer.SelectionLayer; -import xyz.valnet.hadean.interfaces.ISelectable; -import xyz.valnet.hadean.interfaces.ISelectionChangeListener; -import xyz.valnet.hadean.util.Assets; -import xyz.valnet.hadean.util.Layers; -public class JobBoardTab extends Tab implements ISelectionChangeListener { +public class JobBoardTab extends Tab { - private SelectionLayer selection; private JobBoard jobBoard; - private boolean opened; - private float progress = 0f; - private float width = 200; - - private int padding = 10; + private int height = 200; @Override - public void render() { - Drawing.setLayer(Layers.GENERAL_UI); - float left = lerp(-width - padding, padding, progress); - Assets.uiFrame.draw((int) left, padding, (int) width, 576 - padding * 2 - BottomBar.bottomBarHeight); - Assets.font.drawString(jobBoard.details(), (int) left + padding, padding * 2); + protected void gui() { + if(!shouldRender()) return; + + window(0, animate(576 + 50, 576 - BottomBar.bottomBarHeight - height + 1), 1024, height, () -> { + horizontal(() -> { + vertical(() -> { + text("Valid"); + text(jobBoard.getValidJobs()); + }); + space(32); + vertical(() -> { + text("Invalid"); + text(jobBoard.getInvalidJobs()); + }); + space(32); + vertical(() -> { + text("Taken"); + text(jobBoard.getTakenJobs()); + }); + }); + + }); } @Override protected void connect() { super.connect(); - selection = get(SelectionLayer.class); jobBoard = get(JobBoard.class); } - @Override - public void start() { - super.start(); - opened = false; - if(selection != null) selection.subscribe(this); - - } - - @Override - public void update(float dTime) { - progress = lerp(progress, opened ? 1 : 0, 0.05f); - } - - @Override - public void selectionChanged(List selected) { - if(selected.isEmpty()) return; - opened = false; - } - - @Override - public void evoke() { - opened = !opened; - - if(opened) { - selection.updateSelection(new ArrayList()); - } - } - @Override public String getTabName() { - return "Jobs"; + return "Work"; } @Override - protected void onClose() { - // TODO Auto-generated method stub - - } + protected void onClose() { } @Override - protected void onOpen() { - // TODO Auto-generated method stub - - } - - @Override - protected void gui() { - // TODO Auto-generated method stub - - } + protected void onOpen() { } } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java index 457d931..5f20120 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/ui/tabs/MenuTab.java @@ -28,10 +28,12 @@ public class MenuTab extends Tab { space(8); if(button("Save")) { save(); + close(); } space(8); if(button("Load")) { load(); + close(); } space(24); if(button("Main Menu")) { diff --git a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java index e6a4c55..b65f14d 100644 --- a/src/main/java/xyz/valnet/hadean/scenes/GameScene.java +++ b/src/main/java/xyz/valnet/hadean/scenes/GameScene.java @@ -14,6 +14,7 @@ import xyz.valnet.hadean.gameobjects.ui.ExclusivityManager; import xyz.valnet.hadean.gameobjects.ui.HoverQuery; import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; import xyz.valnet.hadean.gameobjects.ui.tabs.DebugTab; +import xyz.valnet.hadean.gameobjects.ui.tabs.JobBoardTab; import xyz.valnet.hadean.gameobjects.ui.tabs.MenuTab; import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn; @@ -53,7 +54,7 @@ public class GameScene extends SceneGraph { objects.add(new BottomBar()); objects.add(new ExclusivityManager()); objects.add(new BuildTab()); - // objects.add(new JobBoardTab()); + objects.add(new JobBoardTab()); objects.add(new DebugTab()); objects.add(new MenuTab());