pushing latest changes

This commit is contained in:
Speiger 2024-05-31 21:54:49 +02:00
parent 867733cdfc
commit afa3215abd
6 changed files with 88 additions and 21 deletions

View File

@ -30,7 +30,7 @@ public class NewInputTest {
Window window = manager.builder().title("Testing Engine").build();
window.visible(true);
//TODO implement window close requests
while(true) {
while(!window.shouldClose()) {
GLFW.glfwPollEvents();
window.beginFrame();
window.handleInput();
@ -38,5 +38,7 @@ public class NewInputTest {
try { Thread.sleep(100); }
catch(InterruptedException e) { e.printStackTrace(); }
}
window.destroy();
manager.destroy();
}
}

View File

@ -1,15 +1,72 @@
package speiger.src.coreengine.rendering.gui.animation;
import java.util.Objects;
import speiger.src.collections.objects.functions.consumer.ObjectFloatConsumer;
import speiger.src.collections.objects.maps.impl.misc.LinkedEnum2ObjectMap;
import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap;
import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap.Entry;
import speiger.src.collections.objects.utils.maps.Object2ObjectMaps;
import speiger.src.coreengine.rendering.gui.components.base.GuiComponent;
import speiger.src.coreengine.rendering.guiOld.helper.box.IGuiBox;
public class GuiAnimation {
Object2ObjectMap<Target, IAction> actions;
float duration;
public static class Builder {
private GuiAnimation(Object2ObjectMap<Target, IAction> actions, float duration) {
this.actions = actions;
this.duration = duration;
}
public static interface IAction {
public Builder copy() { return new Builder(this); }
public static Builder of() { return new Builder(); }
public float duration() { return duration; }
public void apply(GuiComponent owner, float progress) {
for(Entry<Target, IAction> entry : Object2ObjectMaps.fastIterable(actions)) {
IAction action = entry.getValue();
action.apply(entry.getKey(), Math.min(progress, action.duration()));
}
}
public static class Builder {
Object2ObjectMap<Target, IAction> actions = new LinkedEnum2ObjectMap<>(Target.class);
private Builder() {}
private Builder(GuiAnimation owner) {
this.actions.putAll(owner.actions);
}
public Builder add(Target target, IAction action) {
this.actions.put(target, Objects.requireNonNull(action));
return this;
}
public GuiAnimation build() {
float duration = 0F;
for(IAction action : actions.values()) {
duration = Math.max(duration, action.duration());
}
return new GuiAnimation(actions, duration);
}
}
public static enum Target {
X, Y, WIDTH, HEIGHT, SCALE, VISIBILITY
X(IGuiBox::setX),
Y(IGuiBox::setY),
WIDTH(IGuiBox::setWidth),
HEIGHT(IGuiBox::setHeight),
SCALE(IGuiBox::setScale);
ObjectFloatConsumer<IGuiBox> consumer;
private Target(ObjectFloatConsumer<IGuiBox> consumer) {
this.consumer = consumer;
}
public void set(GuiComponent component, float value) {
consumer.accept(component.getBox(), value);
}
}
}

View File

@ -0,0 +1,8 @@
package speiger.src.coreengine.rendering.gui.animation;
import speiger.src.coreengine.rendering.gui.animation.GuiAnimation.Target;
public interface IAction {
public float duration();
public void apply(Target target, float progress);
}

View File

@ -143,15 +143,12 @@ public class Window {
if(flags.isFlagSet(WINDOW_CHANGE)) updateViewport();
}
public void handleInput() {
manager.processDevices(id);
}
public void finishFrame() {
GLFW.glfwSwapBuffers(id);
}
public void handleInput() { manager.processDevices(id); }
public boolean shouldClose() { return flags.isFlagSet(CLOSE) || GLFW.glfwWindowShouldClose(id); }
public void finishFrame() { GLFW.glfwSwapBuffers(id); }
public void destroy() {
manager.removeWindow(id);
for(int i = 0,m=listeners.size();i<m;i++) {
listeners.get(i).onChanged(this, Reason.CLOSING);
}

View File

@ -1,8 +1,8 @@
package speiger.src.coreengine.rendering.input.window;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.system.Callback;
@ -79,6 +79,16 @@ public class WindowManager {
windows.put(prev.id(), prev);
}
void removeWindow(long id) {
Window window = windows.remove(id);
if(window == null) return;
if(window == activeWindow) activeWindow = null;
if(window == primaryWindow) {
Iterator<Window> iter = windows.values().iterator();
primaryWindow = iter.hasNext() ? iter.next() : null;
}
}
void updateFocus(Window window, boolean focus) {
if(focus) this.activeWindow = window;
else if(activeWindow == window) activeWindow = null;
@ -152,7 +162,6 @@ public class WindowManager {
boolean floating;
boolean borderless;
boolean center = true;
Consumer<Window> carrierThread;
private WindowBuilder(WindowManager manager) {
this.manager = manager;
@ -239,12 +248,7 @@ public class WindowManager {
fpsCap = cap;
return this;
}
public WindowBuilder carrierThread(Consumer<Window> run) {
carrierThread = run;
return this;
}
public Window build() {
return manager.create(this);
}

View File

@ -86,7 +86,6 @@ public class EventBus
public void post(Event event) {
Consumer<Event>[] listeners = getListeners(event.getClass()).getListeners();
System.out.println("Event: "+event);
if(listeners.length <= 0) return;
int index = 0;
try {