job board & main menu + bugfixes

bottom-bar
Ivory 2023-01-29 23:26:33 -05:00
parent a24bcce937
commit 2ff6b06588
6 changed files with 86 additions and 71 deletions

View File

@ -11,7 +11,6 @@ import java.util.stream.Stream;
import xyz.valnet.engine.graphics.Color; import xyz.valnet.engine.graphics.Color;
import xyz.valnet.engine.math.Vector2i; import xyz.valnet.engine.math.Vector2i;
import xyz.valnet.engine.math.Vector4f;
import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.GameObject;
import xyz.valnet.hadean.HadeanGame; import xyz.valnet.hadean.HadeanGame;
import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn; import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn;
@ -174,6 +173,40 @@ public class JobBoard extends GameObject {
// } else return null; // } else return null;
// } // }
public String getValidJobs() {
Map<String, Integer> jobs = new HashMap<String, Integer>();
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<String, Integer> 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<Pawn, Job> allocation : allocations.entrySet()) {
str += " " + allocation.getKey().getName() + ": " + allocation.getValue().getJobName() + "\n";
}
return str;
}
public String details() { public String details() {
String takenJobsString = ""; String takenJobsString = "";

View File

@ -213,7 +213,7 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea, ITr
public void clearSelection() { public void clearSelection() {
if(selected.size() == 0) return; if(selected.size() == 0) return;
selected.clear(); selected = new ArrayList<ISelectable>();
broadcastSelectionChanged(); broadcastSelectionChanged();
} }

View File

@ -2,17 +2,20 @@ package xyz.valnet.hadean.gameobjects.ui;
import xyz.valnet.engine.graphics.IModalUI; import xyz.valnet.engine.graphics.IModalUI;
import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.GameObject;
import xyz.valnet.engine.scenegraph.IKeyboardListener;
import xyz.valnet.engine.scenegraph.ITransient; import xyz.valnet.engine.scenegraph.ITransient;
import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; 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.gameobjects.ui.tabs.Tab;
import xyz.valnet.hadean.util.Assets; 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 IModalUI current = null;
private boolean switching = false; private boolean switching = false;
private IModalUI defaultTab = null; private IModalUI defaultTab = null;
private IModalUI menuTab = null;
public void switchTo(IModalUI tab) { public void switchTo(IModalUI tab) {
if(tab == current) return; if(tab == current) return;
@ -41,9 +44,25 @@ public class ExclusivityManager extends GameObject implements ITransient {
else current.back(); else current.back();
} }
private void backOrMenu() {
if(current == null) switchTo(menuTab);
else current.back();
}
@Override @Override
protected void connect() { protected void connect() {
defaultTab = get(BuildTab.class); 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) {}
} }

View File

@ -1,93 +1,53 @@
package xyz.valnet.hadean.gameobjects.ui.tabs; 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.BottomBar;
import xyz.valnet.hadean.gameobjects.JobBoard; 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 JobBoard jobBoard;
private boolean opened; private int height = 200;
private float progress = 0f;
private float width = 200;
private int padding = 10;
@Override @Override
public void render() { protected void gui() {
Drawing.setLayer(Layers.GENERAL_UI); if(!shouldRender()) return;
float left = lerp(-width - padding, padding, progress);
Assets.uiFrame.draw((int) left, padding, (int) width, 576 - padding * 2 - BottomBar.bottomBarHeight); window(0, animate(576 + 50, 576 - BottomBar.bottomBarHeight - height + 1), 1024, height, () -> {
Assets.font.drawString(jobBoard.details(), (int) left + padding, padding * 2); horizontal(() -> {
vertical(() -> {
text("Valid");
text(jobBoard.getValidJobs());
});
space(32);
vertical(() -> {
text("Invalid");
text(jobBoard.getInvalidJobs());
});
space(32);
vertical(() -> {
text("Taken");
text(jobBoard.getTakenJobs());
});
});
});
} }
@Override @Override
protected void connect() { protected void connect() {
super.connect(); super.connect();
selection = get(SelectionLayer.class);
jobBoard = get(JobBoard.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<ISelectable> selected) {
if(selected.isEmpty()) return;
opened = false;
}
@Override
public void evoke() {
opened = !opened;
if(opened) {
selection.updateSelection(new ArrayList<ISelectable>());
}
}
@Override @Override
public String getTabName() { public String getTabName() {
return "Jobs"; return "Work";
} }
@Override @Override
protected void onClose() { protected void onClose() { }
// TODO Auto-generated method stub
}
@Override @Override
protected void onOpen() { protected void onOpen() { }
// TODO Auto-generated method stub
}
@Override
protected void gui() {
// TODO Auto-generated method stub
}
} }

View File

@ -28,10 +28,12 @@ public class MenuTab extends Tab {
space(8); space(8);
if(button("Save")) { if(button("Save")) {
save(); save();
close();
} }
space(8); space(8);
if(button("Load")) { if(button("Load")) {
load(); load();
close();
} }
space(24); space(24);
if(button("Main Menu")) { if(button("Main Menu")) {

View File

@ -14,6 +14,7 @@ import xyz.valnet.hadean.gameobjects.ui.ExclusivityManager;
import xyz.valnet.hadean.gameobjects.ui.HoverQuery; import xyz.valnet.hadean.gameobjects.ui.HoverQuery;
import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab; import xyz.valnet.hadean.gameobjects.ui.tabs.BuildTab;
import xyz.valnet.hadean.gameobjects.ui.tabs.DebugTab; 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.ui.tabs.MenuTab;
import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn; import xyz.valnet.hadean.gameobjects.worldobjects.pawn.Pawn;
@ -53,7 +54,7 @@ public class GameScene extends SceneGraph {
objects.add(new BottomBar()); objects.add(new BottomBar());
objects.add(new ExclusivityManager()); objects.add(new ExclusivityManager());
objects.add(new BuildTab()); objects.add(new BuildTab());
// objects.add(new JobBoardTab()); objects.add(new JobBoardTab());
objects.add(new DebugTab()); objects.add(new DebugTab());
objects.add(new MenuTab()); objects.add(new MenuTab());