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.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<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() {
String takenJobsString = "";

View File

@ -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<ISelectable>();
broadcastSelectionChanged();
}

View File

@ -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) {}
}

View File

@ -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<ISelectable> selected) {
if(selected.isEmpty()) return;
opened = false;
}
@Override
public void evoke() {
opened = !opened;
if(opened) {
selection.updateSelection(new ArrayList<ISelectable>());
}
}
@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() { }
}

View File

@ -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")) {

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.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());