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) {
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 void update(float dTime);
public default void fixedUpdate(float dTime) {}
}

View File

@ -72,10 +72,25 @@ public abstract class SceneGraph implements IScene {
if(saveFlag) save();
if(loadFlag) load();
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) {
obj.fixedUpdate(dTime);
}
mouseUpdate();
}
@ -114,10 +129,20 @@ public abstract class SceneGraph implements IScene {
}
}
private boolean paused = false;
public boolean isPaused() {
return paused;
}
@Override
public void enable() {
this.construct();
for(GameObject obj : objects) {
addObjectToCache(obj);
}
for(GameObject obj : objects) {
obj.link(this);
}
@ -144,10 +169,19 @@ public abstract class SceneGraph implements IScene {
objects.clear();
}
private Set<IPauser> pausers = new HashSet<IPauser>();
public void add(GameObject obj) {
newObjects.add(obj);
obj.link(this);
obj.addedToScene();
addObjectToCache(obj);
}
private void addObjectToCache(GameObject obj) {
if(obj instanceof IPauser) {
pausers.add((IPauser) obj);
}
}
public void remove(GameObject obj) {

View File

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

View File

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

View File

@ -1,9 +1,11 @@
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 height = 6 * 32 + 9 * 8;
private int height = 6 * 32 + 1 * 16 + 6 * 8 + 2 * 24;
@Override
protected void onClose() {
@ -18,12 +20,14 @@ public class MenuTab extends Tab {
@Override
protected void gui() {
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")) {
}
space(8);
if(button("Debug")) {
get(DebugTab.class).open();
}
space(8);
if(button("Save")) {
@ -36,7 +40,7 @@ public class MenuTab extends Tab {
close();
}
space(24);
if(button("Main Menu")) {
if(button("Quit to Menu")) {
}
space(8);
@ -51,4 +55,9 @@ public class MenuTab extends Tab {
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;
@Override
public void update(float dTime) {
public void fixedUpdate(float dTime) {
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.Tile9;
import xyz.valnet.engine.math.Box;
import xyz.valnet.engine.math.Vector4f;
import xyz.valnet.engine.math.Vector4i;
import xyz.valnet.engine.scenegraph.GameObject;
import xyz.valnet.engine.scenegraph.IMouseCaptureArea;
@ -125,12 +124,8 @@ public class Button extends GameObject implements IMouseCaptureArea, ITransient
private IButtonListener listener = null;
public void update() {
update(1);
}
@Override
public void update(float dTime) {
public void fixedUpdate(float dTime) {
box.x = x - (int)hPad;
box.y = y - (int)vPad;
box.z = width + ((int)hPad) * 2;