bottom-bar
Ivory 2023-01-30 00:30:59 -05:00
parent 5374bcaaeb
commit 175d572903
9 changed files with 66 additions and 17 deletions

View File

@ -81,4 +81,8 @@ public class GameObject implements IRenderable, ITickable, Serializable {
protected boolean getKey(int key) { protected boolean getKey(int key) {
return scene.getKey(key); return scene.getKey(key);
} }
protected boolean isPaused() {
return scene.isPaused();
}
} }

View File

@ -0,0 +1,5 @@
package xyz.valnet.engine.scenegraph;
public interface IPauser {
public boolean isPaused();
}

View File

@ -2,4 +2,5 @@ package xyz.valnet.engine.scenegraph;
public interface ITickable { public interface ITickable {
public void update(float dTime); public void update(float dTime);
public default void fixedUpdate(float dTime) {}
} }

View File

@ -72,9 +72,24 @@ public abstract class SceneGraph implements IScene {
if(saveFlag) save(); if(saveFlag) save();
if(loadFlag) load(); if(loadFlag) load();
// TICK OBJECTS paused = false;
for(IPauser pauser : pausers) {
if(pauser.isPaused()) {
paused = true;
break;
}
}
if(!paused) {
// TICK OBJECTS
for(GameObject obj : objects) {
obj.update(dTime);
}
}
// fixed TICK OBJECTS
for(GameObject obj : objects) { for(GameObject obj : objects) {
obj.update(dTime); obj.fixedUpdate(dTime);
} }
mouseUpdate(); mouseUpdate();
@ -114,10 +129,20 @@ public abstract class SceneGraph implements IScene {
} }
} }
private boolean paused = false;
public boolean isPaused() {
return paused;
}
@Override @Override
public void enable() { public void enable() {
this.construct(); this.construct();
for(GameObject obj : objects) {
addObjectToCache(obj);
}
for(GameObject obj : objects) { for(GameObject obj : objects) {
obj.link(this); obj.link(this);
} }
@ -144,10 +169,19 @@ public abstract class SceneGraph implements IScene {
objects.clear(); objects.clear();
} }
private Set<IPauser> pausers = new HashSet<IPauser>();
public void add(GameObject obj) { public void add(GameObject obj) {
newObjects.add(obj); newObjects.add(obj);
obj.link(this); obj.link(this);
obj.addedToScene(); obj.addedToScene();
addObjectToCache(obj);
}
private void addObjectToCache(GameObject obj) {
if(obj instanceof IPauser) {
pausers.add((IPauser) obj);
}
} }
public void remove(GameObject obj) { public void remove(GameObject obj) {

View File

@ -56,7 +56,7 @@ public class SelectionUI extends ImmediateUI implements ISelectionChangeListener
} }
@Override @Override
public void update(float dTime) { public void fixedUpdate(float dTime) {
openness = lerp(openness, opened ? 1 : 0, dTime / Constants.animationSpeed); openness = lerp(openness, opened ? 1 : 0, dTime / Constants.animationSpeed);
if(newSelection != null) { if(newSelection != null) {
selectionManager.updateSelection(newSelection); selectionManager.updateSelection(newSelection);

View File

@ -197,6 +197,7 @@ public class SelectionLayer extends GameObject implements IMouseCaptureArea, ITr
@Override @Override
public void mouseDown(int button) { public void mouseDown(int button) {
if(!active) return; if(!active) return;
if(isPaused()) return;
if(button == 0) { if(button == 0) {
if(initialCoords == null) { if(initialCoords == null) {

View File

@ -1,9 +1,11 @@
package xyz.valnet.hadean.gameobjects.ui.tabs; package xyz.valnet.hadean.gameobjects.ui.tabs;
public class MenuTab extends Tab { import xyz.valnet.engine.scenegraph.IPauser;
public class MenuTab extends Tab implements IPauser {
private int width = 300; private int width = 300;
private int height = 6 * 32 + 9 * 8; private int height = 6 * 32 + 1 * 16 + 6 * 8 + 2 * 24;
@Override @Override
protected void onClose() { protected void onClose() {
@ -18,12 +20,14 @@ public class MenuTab extends Tab {
@Override @Override
protected void gui() { protected void gui() {
window(1024 / 2 - width / 2, animate(-height - 50, 576 / 2 - height / 2), width, height, () -> { window(1024 / 2 - width / 2, animate(-height - 50, 576 / 2 - height / 2), width, height, () -> {
text(" === Paused ===");
space(8);
if(button("Resume")) {
close();
}
space(24);
if(button("Options")) { if(button("Options")) {
}
space(8);
if(button("Debug")) {
get(DebugTab.class).open();
} }
space(8); space(8);
if(button("Save")) { if(button("Save")) {
@ -36,7 +40,7 @@ public class MenuTab extends Tab {
close(); close();
} }
space(24); space(24);
if(button("Main Menu")) { if(button("Quit to Menu")) {
} }
space(8); space(8);
@ -51,4 +55,9 @@ public class MenuTab extends Tab {
return "Menu"; return "Menu";
} }
@Override
public boolean isPaused() {
return opened;
}
} }

View File

@ -21,7 +21,7 @@ public abstract class Tab extends ImmediateUI implements IBottomBarItem, ITransi
private ExclusivityManager exclusivityManager; private ExclusivityManager exclusivityManager;
@Override @Override
public void update(float dTime) { public void fixedUpdate(float dTime) {
animation = lerp(animation, opened ? 1 : 0, dTime / Constants.animationSpeed); animation = lerp(animation, opened ? 1 : 0, dTime / Constants.animationSpeed);
} }

View File

@ -8,7 +8,6 @@ import xyz.valnet.engine.graphics.Color;
import xyz.valnet.engine.graphics.Drawing; import xyz.valnet.engine.graphics.Drawing;
import xyz.valnet.engine.graphics.Tile9; import xyz.valnet.engine.graphics.Tile9;
import xyz.valnet.engine.math.Box; import xyz.valnet.engine.math.Box;
import xyz.valnet.engine.math.Vector4f;
import xyz.valnet.engine.math.Vector4i; import xyz.valnet.engine.math.Vector4i;
import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.GameObject;
import xyz.valnet.engine.scenegraph.IMouseCaptureArea; import xyz.valnet.engine.scenegraph.IMouseCaptureArea;
@ -125,12 +124,8 @@ public class Button extends GameObject implements IMouseCaptureArea, ITransient
private IButtonListener listener = null; private IButtonListener listener = null;
public void update() {
update(1);
}
@Override @Override
public void update(float dTime) { public void fixedUpdate(float dTime) {
box.x = x - (int)hPad; box.x = x - (int)hPad;
box.y = y - (int)vPad; box.y = y - (int)vPad;
box.z = width + ((int)hPad) * 2; box.z = width + ((int)hPad) * 2;