Add support for windows positions

This commit is contained in:
2021-03-12 10:48:22 +01:00
parent ff5bb33059
commit cafad00389
4 changed files with 81 additions and 2 deletions

View File

@@ -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() {

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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
}