diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/BaseWindow.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/BaseWindow.java index 3ea9a318..c0517482 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/BaseWindow.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/BaseWindow.java @@ -5,6 +5,17 @@ import com.bartlomiejpluta.base.api.game.gui.component.Component; public abstract class BaseWindow extends BaseWidget implements Window { protected Component content; + protected WindowPosition windowPosition; + + @Override + public WindowPosition getWindowPosition() { + return windowPosition; + } + + @Override + public void setWindowPosition(WindowPosition windowPosition) { + this.windowPosition = windowPosition; + } @Override protected float getContentWidth() { diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/DefaultWindowManager.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/DefaultWindowManager.java index 98397c85..0fc840e8 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/DefaultWindowManager.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/DefaultWindowManager.java @@ -73,16 +73,67 @@ public class DefaultWindowManager extends BaseWidget implements WindowManager { switch (displayMode) { case DISPLAY_STACK -> { for (var window : windows) { - window.draw(screen, gui); + drawWindow(screen, window, gui); } } case DISPLAY_TOP -> { var topWindow = windows.peekFirst(); if (topWindow != null) { - topWindow.draw(screen, gui); + drawWindow(screen, topWindow, gui); } } } } + + private void drawWindow(Screen screen, Window window, GUI gui) { + switch (window.getWindowPosition()) { + case TOP -> window.setPosition( + (screen.getWidth() - window.getWidth()) / 2, + window.getMarginTop() + ); + + case TOP_RIGHT -> window.setPosition( + screen.getWidth() - window.getWidth() - window.getMarginRight(), + window.getMarginTop() + ); + + case RIGHT -> window.setPosition( + screen.getWidth() - window.getWidth() - window.getMarginRight(), + (screen.getHeight() - window.getHeight()) / 2 + ); + + case BOTTOM_RIGHT -> window.setPosition( + screen.getWidth() - window.getWidth() - window.getMarginRight(), + screen.getHeight() - window.getHeight() - window.getMarginBottom() + ); + + case BOTTOM -> window.setPosition( + (screen.getWidth() - window.getWidth()) / 2, + screen.getHeight() - window.getHeight() - window.getMarginBottom() + ); + + case BOTTOM_LEFT -> window.setPosition( + window.getMarginLeft(), + screen.getHeight() - window.getHeight() - window.getMarginBottom() + ); + + case LEFT -> window.setPosition( + window.getMarginLeft(), + (screen.getHeight() - window.getHeight()) / 2 + ); + + case TOP_LEFT -> window.setPosition( + window.getMarginLeft(), + window.getMarginTop() + ); + + case CENTER -> window.setPosition( + (screen.getWidth() - window.getWidth()) / 2, + (screen.getHeight() - window.getHeight()) / 2 + ); + } + + window.draw(screen, gui); + } } diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/Window.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/Window.java index eef310ff..ec12d6be 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/Window.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/Window.java @@ -3,6 +3,10 @@ package com.bartlomiejpluta.base.api.game.gui.window; import com.bartlomiejpluta.base.api.game.gui.base.Widget; public interface Window extends Widget { + WindowPosition getWindowPosition(); + + void setWindowPosition(WindowPosition windowPosition); + void onOpen(WindowManager manager); void onClose(WindowManager manager); diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/WindowPosition.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/WindowPosition.java new file mode 100644 index 00000000..3ae18e31 --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/window/WindowPosition.java @@ -0,0 +1,13 @@ +package com.bartlomiejpluta.base.api.game.gui.window; + +public enum WindowPosition { + TOP, + TOP_RIGHT, + RIGHT, + BOTTOM_RIGHT, + BOTTOM, + BOTTOM_LEFT, + LEFT, + TOP_LEFT, + CENTER +}