diff --git a/src/main/java/speiger/src/coreengine/NewInputTest.java b/src/main/java/speiger/src/coreengine/NewInputTest.java index 314dbee..6c9155f 100644 --- a/src/main/java/speiger/src/coreengine/NewInputTest.java +++ b/src/main/java/speiger/src/coreengine/NewInputTest.java @@ -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(); } } diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/animation/GuiAnimation.java b/src/main/java/speiger/src/coreengine/rendering/gui/animation/GuiAnimation.java index e39f8b9..0d58032 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/animation/GuiAnimation.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/animation/GuiAnimation.java @@ -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 actions; + float duration; - public static class Builder { - + private GuiAnimation(Object2ObjectMap 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 entry : Object2ObjectMaps.fastIterable(actions)) { + IAction action = entry.getValue(); + action.apply(entry.getKey(), Math.min(progress, action.duration())); + } + } + + public static class Builder { + Object2ObjectMap 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 consumer; + + private Target(ObjectFloatConsumer consumer) { + this.consumer = consumer; + } + + public void set(GuiComponent component, float value) { + consumer.accept(component.getBox(), value); + } } } diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/animation/IAction.java b/src/main/java/speiger/src/coreengine/rendering/gui/animation/IAction.java new file mode 100644 index 0000000..a1b62ec --- /dev/null +++ b/src/main/java/speiger/src/coreengine/rendering/gui/animation/IAction.java @@ -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); +} \ No newline at end of file diff --git a/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java b/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java index cb52e7d..31307ed 100644 --- a/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java +++ b/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java @@ -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 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 carrierThread; private WindowBuilder(WindowManager manager) { this.manager = manager; @@ -239,12 +248,7 @@ public class WindowManager { fpsCap = cap; return this; } - - public WindowBuilder carrierThread(Consumer run) { - carrierThread = run; - return this; - } - + public Window build() { return manager.create(this); } diff --git a/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java b/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java index c100e2a..254a611 100644 --- a/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java +++ b/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java @@ -86,7 +86,6 @@ public class EventBus public void post(Event event) { Consumer[] listeners = getListeners(event.getClass()).getListeners(); - System.out.println("Event: "+event); if(listeners.length <= 0) return; int index = 0; try {