From b807da7b93842d35741896b3d93519d333b2fd8c Mon Sep 17 00:00:00 2001 From: extio-de Date: Sat, 27 Dec 2025 12:57:37 +0100 Subject: [PATCH] refactor(renderer): change RenderingBoLayer enum to short type for layer representation --- .../renderer/container/legacy/ScrollBar.java | 6 ++-- .../renderer/container/legacy/Window.java | 12 +++---- .../game_engine/renderer/g2d/G2DRenderer.java | 2 +- .../bo/rendering/G2DAbstractRenderingBo.java | 3 +- .../renderer/model/AbstractRenderingBo.java | 14 ++++---- .../renderer/model/RenderingBo.java | 4 +-- .../renderer/model/RenderingBoLayer.java | 36 ++++++++++++------- .../work/RendererWorkingSetImplTest.java | 36 +++++++++---------- .../work/RenderingBoPoolImplTest.java | 12 +++---- 9 files changed, 67 insertions(+), 58 deletions(-) diff --git a/src/main/java/de/extio/game_engine/renderer/container/legacy/ScrollBar.java b/src/main/java/de/extio/game_engine/renderer/container/legacy/ScrollBar.java index d525a7d..1ed6d88 100644 --- a/src/main/java/de/extio/game_engine/renderer/container/legacy/ScrollBar.java +++ b/src/main/java/de/extio/game_engine/renderer/container/legacy/ScrollBar.java @@ -30,7 +30,7 @@ public class ScrollBar { private int lastNumElements; - private RenderingBoLayer layer = RenderingBoLayer.UI1; + private short layer = RenderingBoLayer.UI1; public ScrollBar(final String nameSuffix) { this.name = "Scrollbar_" + nameSuffix; @@ -83,11 +83,11 @@ public class ScrollBar { return this.name; } - public RenderingBoLayer getLayer() { + public short getLayer() { return this.layer; } - public void setLayer(final RenderingBoLayer layer) { + public void setLayer(final short layer) { this.layer = layer; } diff --git a/src/main/java/de/extio/game_engine/renderer/container/legacy/Window.java b/src/main/java/de/extio/game_engine/renderer/container/legacy/Window.java index 4bbae7a..1a2c48a 100644 --- a/src/main/java/de/extio/game_engine/renderer/container/legacy/Window.java +++ b/src/main/java/de/extio/game_engine/renderer/container/legacy/Window.java @@ -52,7 +52,7 @@ public class Window implements HasPositionAndDimension2, AutoCloseable { private boolean drawCloseButton; - private RenderingBoLayer renderingBoLayer; + private short renderingBoLayer; private CoordI2 lastEffectiveViewportDimension; @@ -178,7 +178,7 @@ public class Window implements HasPositionAndDimension2, AutoCloseable { .withDimensionAbsolute(this.area.getDimension()) .withPositionAbsoluteAnchorTopLeft(this.area.getPosition()) .setColor(this.color != null ? this.color : null); - if (this.renderingBoLayer != null) { + if (this.renderingBoLayer > 0) { bo.setLayer(this.renderingBoLayer); } consumer.accept(renderingBo, bo); @@ -192,8 +192,8 @@ public class Window implements HasPositionAndDimension2, AutoCloseable { .withDimensionAbsolute(this.area.getDimension()) .withPositionAbsoluteAnchorTopLeft(this.area.getPosition()) .setColor(this.color != null ? this.color : null); - if (this.renderingBoLayer != null) { - bo.setLayer(RenderingBoLayer.values()[Math.min(this.renderingBoLayer.ordinal() + 2, RenderingBoLayer.values().length - 1)]); + if (this.renderingBoLayer > 0) { + bo.setLayer((short) Math.min(this.renderingBoLayer + 20, RenderingBoLayer.TOP)); } else { bo.setLayer(RenderingBoLayer.UI1); @@ -332,11 +332,11 @@ public class Window implements HasPositionAndDimension2, AutoCloseable { this.draggable = draggable; } - public RenderingBoLayer getRenderingBoLayer() { + public short getRenderingBoLayer() { return this.renderingBoLayer; } - public void setRenderingBoLayer(final RenderingBoLayer renderingBoLayer) { + public void setRenderingBoLayer(final short renderingBoLayer) { this.renderingBoLayer = renderingBoLayer; } diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java b/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java index 2a3fb92..dc60f9b 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/G2DRenderer.java @@ -175,7 +175,7 @@ public class G2DRenderer implements Renderer { this.drawStatistics(); this.rendererData.getRendererWorkingSet().commit(this.rendererModuleId, true); this.rendererData.getRendererWorkingSet().getLiveSet(this.renderingBOs, this.rendererData.getModuleService()::isDisplayed); - this.renderingBOs.sort((bo0, bo1) -> bo0.getLayer().compareTo(bo1.getLayer())); + this.renderingBOs.sort((bo0, bo1) -> Short.compare(bo0.getLayer(), bo1.getLayer())); Graphics2D screenGraphics = null; try { diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java index ee0aec1..7a0f316 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DAbstractRenderingBo.java @@ -3,11 +3,10 @@ package de.extio.game_engine.renderer.g2d.bo.rendering; import java.awt.Graphics2D; import de.extio.game_engine.renderer.model.AbstractRenderingBo; -import de.extio.game_engine.renderer.model.RenderingBoLayer; public abstract class G2DAbstractRenderingBo extends AbstractRenderingBo { - public G2DAbstractRenderingBo(final RenderingBoLayer layer) { + public G2DAbstractRenderingBo(final short layer) { super(layer); } diff --git a/src/main/java/de/extio/game_engine/renderer/model/AbstractRenderingBo.java b/src/main/java/de/extio/game_engine/renderer/model/AbstractRenderingBo.java index 5488fa1..797d159 100644 --- a/src/main/java/de/extio/game_engine/renderer/model/AbstractRenderingBo.java +++ b/src/main/java/de/extio/game_engine/renderer/model/AbstractRenderingBo.java @@ -29,11 +29,11 @@ public abstract class AbstractRenderingBo implements RenderingBo { protected int height; - protected RenderingBoLayer layer; + protected short layer; - private final RenderingBoLayer defaultLayer; + private final short defaultLayer; - public AbstractRenderingBo(final RenderingBoLayer layer) { + public AbstractRenderingBo(final short layer) { this.layer = layer; this.defaultLayer = layer; } @@ -288,15 +288,13 @@ public abstract class AbstractRenderingBo implements RenderingBo { } @Override - public RenderingBoLayer getLayer() { + public short getLayer() { return this.layer; } @Override - public RenderingBo setLayer(final RenderingBoLayer layer) { - if (layer != null) { - this.layer = layer; - } + public RenderingBo setLayer(final short layer) { + this.layer = layer; return this; } diff --git a/src/main/java/de/extio/game_engine/renderer/model/RenderingBo.java b/src/main/java/de/extio/game_engine/renderer/model/RenderingBo.java index df8953e..750dea0 100644 --- a/src/main/java/de/extio/game_engine/renderer/model/RenderingBo.java +++ b/src/main/java/de/extio/game_engine/renderer/model/RenderingBo.java @@ -31,9 +31,9 @@ public interface RenderingBo extends AutoCloseable { /** * Sets the layer to render this bo on. Business objects are rendered layered on top of each other in the natural order of RenderingBoLayer enum fields. Objects on the same layer are rendered in the order of being added to List renderingBo. */ - RenderingBo setLayer(RenderingBoLayer layer); + RenderingBo setLayer(short layer); - RenderingBoLayer getLayer(); + short getLayer(); /** * Positions this bo with an absolute position on the viewport. x0 y0 coordinates are at the top left. Call RendererControl#getEffectiveViewportDimension to get the absolute dimension of the viewport. diff --git a/src/main/java/de/extio/game_engine/renderer/model/RenderingBoLayer.java b/src/main/java/de/extio/game_engine/renderer/model/RenderingBoLayer.java index 181b9d2..2333a0b 100644 --- a/src/main/java/de/extio/game_engine/renderer/model/RenderingBoLayer.java +++ b/src/main/java/de/extio/game_engine/renderer/model/RenderingBoLayer.java @@ -1,17 +1,29 @@ package de.extio.game_engine.renderer.model; -public enum RenderingBoLayer { +public class RenderingBoLayer { - BACKGROUND0, - BACKGROUND1, - BACKGROUND2, - FOREGROUND0, - FOREGROUND1, - FOREGROUND2, - UI_BGR, - UI0, - UI1, - UI2, - TOP; + public static final short BACKGROUND0 = 100; + public static final short BACKGROUND1 = 110; + public static final short BACKGROUND2 = 120; + + public static final short FOREGROUND0 = 1000; + public static final short FOREGROUND1 = 1100; + public static final short FOREGROUND2 = 1200; + public static final short FOREGROUND3 = 1300; + public static final short FOREGROUND4 = 1400; + public static final short FOREGROUND5 = 1500; + public static final short FOREGROUND6 = 1600; + + public static final short UI_BGR = 2000; + public static final short UI0 = 2100; + public static final short UI1 = 2200; + public static final short UI2 = 2300; + public static final short UI_TOP = 2999; + // Note: UI repeats layers per z-index up to TOP + + public static final short TOP = 30000; + + private RenderingBoLayer() { + } } diff --git a/src/test/java/de/extio/game_engine/renderer/work/RendererWorkingSetImplTest.java b/src/test/java/de/extio/game_engine/renderer/work/RendererWorkingSetImplTest.java index b0aa53e..a7b7e75 100644 --- a/src/test/java/de/extio/game_engine/renderer/work/RendererWorkingSetImplTest.java +++ b/src/test/java/de/extio/game_engine/renderer/work/RendererWorkingSetImplTest.java @@ -302,7 +302,7 @@ public class RendererWorkingSetImplTest { assertEquals(1, uncommittedAfter.size()); assertSame(bo1_replacement, uncommittedAfter.get("bo1")); } - + @Test void getLiveSetFiltersOutNotDisplayedModules() { final var boA1 = new TestBoA(); @@ -330,56 +330,56 @@ public class RendererWorkingSetImplTest { assertTrue(filteredLive.containsAll(List.of(boA1, boA2))); assertFalse(filteredLive.contains(boB1)); } - + @Test void getWithTypeReturnsTypedInstanceAndNullForUnknown() { final var boA = new TestBoA(); boA.setId("bo1"); this.workingSet.put(this.moduleA.getId(), boA); - + final var retrieved = this.workingSet.get(this.moduleA.getId(), "bo1", TestBoA.class); assertSame(boA, retrieved); - + final var notFound = this.workingSet.get(this.moduleA.getId(), "nonexistent", TestBoA.class); assertTrue(notFound == null); } - + @Test void getWithTypeThrowsClassCastForWrongType() { final var boA = new TestBoA(); boA.setId("bo1"); this.workingSet.put(this.moduleA.getId(), boA); - + assertThrows(ClassCastException.class, () -> this.workingSet.get(this.moduleA.getId(), "bo1", TestBoB.class)); } - + @Test void getOrAcquireReturnsUncommittedWhenPresent() { final var boA = new TestBoA(); boA.setId("bo1"); this.workingSet.put(this.moduleA.getId(), boA); - + final var retrieved = this.workingSet.getOrAcquire(this.moduleA.getId(), "bo1", TestBoA.class); assertSame(boA, retrieved); } - + @Test void getOrAcquireAcquiresFromPoolWhenMissing() { final var pooledBo = new TestBoA(); pooledBo.setId("pooled"); when(this.renderingBoPool.acquire("pooled", TestBoA.class)).thenReturn(pooledBo); - + final var retrieved = this.workingSet.getOrAcquire(this.moduleA.getId(), "pooled", TestBoA.class); assertSame(pooledBo, retrieved); verify(this.renderingBoPool, times(1)).acquire("pooled", TestBoA.class); } - + private static abstract class TestBoBase implements RenderingBo { private String id; - + private boolean applied; - + private boolean closed; @Override @@ -418,12 +418,12 @@ public class RendererWorkingSetImplTest { } @Override - public RenderingBo setLayer(final RenderingBoLayer layer) { + public RenderingBo setLayer(final short layer) { return this; } @Override - public RenderingBoLayer getLayer() { + public short getLayer() { return RenderingBoLayer.UI0; } @@ -501,14 +501,14 @@ public class RendererWorkingSetImplTest { public void staticCleanupAfterFrame() { } - + @Override public void setRendererData(final RendererData RendererData) { } - + @Override public void apply(RenderingBo other) { - this.applied = true; + this.applied = true; } @Override diff --git a/src/test/java/de/extio/game_engine/renderer/work/RenderingBoPoolImplTest.java b/src/test/java/de/extio/game_engine/renderer/work/RenderingBoPoolImplTest.java index 343d97c..1ea4bf8 100644 --- a/src/test/java/de/extio/game_engine/renderer/work/RenderingBoPoolImplTest.java +++ b/src/test/java/de/extio/game_engine/renderer/work/RenderingBoPoolImplTest.java @@ -334,13 +334,13 @@ public class RenderingBoPoolImplTest { } @Override - public RenderingBo setLayer(final RenderingBoLayer layer) { + public RenderingBo setLayer(final short layer) { return this; } @Override - public RenderingBoLayer getLayer() { - return null; + public short getLayer() { + return 0; } @Override @@ -483,13 +483,13 @@ public class RenderingBoPoolImplTest { } @Override - public RenderingBo setLayer(final RenderingBoLayer layer) { + public RenderingBo setLayer(final short layer) { return this; } @Override - public RenderingBoLayer getLayer() { - return null; + public short getLayer() { + return 0; } @Override