diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawBackground.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawBackground.java index 1ca6468..207b866 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawBackground.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawBackground.java @@ -20,6 +20,7 @@ import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.G2DRendererControl; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor; import de.extio.game_engine.renderer.model.color.RgbaColor; @@ -50,7 +51,7 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo { private final CoordI2 overflow = MutableCoordI2.create(); - private final List stars = new ArrayList<>(); + private List stars; private CoordI2 starsViewport = ImmutableCoordI2.create(); @@ -58,6 +59,33 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo { super(RenderingBoLayer.BACKGROUND0); } + @Override + public void apply(RenderingBo other) { + super.apply(other); + + if (other instanceof G2DDrawBackground o) { + this.bgrOffset.setXY(o.bgrOffset); + this.sourceOffset.setXY(o.sourceOffset); + this.destPosition.setXY(o.destPosition); + this.destPosition2.setXY(o.destPosition2); + this.overflow.setXY(o.overflow); + this.starsViewport = o.starsViewport; + this.stars = o.stars; // shallow copy for performance + } + } + + @Override + public void close() throws Exception { + super.close(); + + this.bgrOffset.setXY(0, 0); + this.sourceOffset.setXY(0, 0); + this.destPosition.setXY(0, 0); + this.destPosition2.setXY(0, 0); + this.overflow.setXY(0, 0); + this.starsViewport = ImmutableCoordI2.create(); + } + @Override public boolean isScreenshotRelevant() { return false; @@ -207,10 +235,17 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo { } private void generateStars(final CoordI2 viewPort) { - if (!viewPort.equals(this.starsViewport)) { + if (this.stars == null || !viewPort.equals(this.starsViewport)) { + if (this.stars == null) { + this.stars = new ArrayList<>(); + } + else { + this.stars.clear(); + } + this.starsViewport = viewPort.toImmutableCoordI2(); final var rand = ThreadLocalXorShift128Random.current(); - this.stars.clear(); + for (var i = 0; i < 350; i++) { this.stars.add(new Star( ImmutableCoordI2.create(rand.nextInt(this.starsViewport.getX()), rand.nextInt(this.starsViewport.getY())), diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawEffect.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawEffect.java index 22b2d75..e36f4ce 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawEffect.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawEffect.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRenderer; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.control.components.ComponentRenderingSupport; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBoEffects; @@ -255,6 +256,23 @@ public class G2DDrawEffect extends G2DAbstractRenderingBo implements DrawEffectR this.customDouble0 = 0.0; this.customString0 = null; } + + @Override + public void apply(final RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawEffect o) { + this.effect = o.effect; + if (o.relativeCoordinates != null) { + this.relativeCoordinates = List.copyOf(o.relativeCoordinates); + } else { + this.relativeCoordinates = null; + } + this.customInt0 = o.customInt0; + this.customDouble0 = o.customDouble0; + this.customString0 = o.customString0; + } + } @Override public DrawEffectRenderingBo setEffect(final DrawEffectRenderingBoEffects effect) { diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFont.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFont.java index ed7e55a..b411436 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFont.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFont.java @@ -12,6 +12,7 @@ import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBoTextAlignment; @@ -108,6 +109,17 @@ public class G2DDrawFont extends G2DAbstractRenderingBo implements DrawFontRende } } + @Override + public void apply(final RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawFont o) { + this.text = o.text; + this.size = o.size; + this.alignment = o.alignment; + } + } + @Override public void close() throws Exception { super.close(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFpsHistory.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFpsHistory.java index c13c2f0..fb79df0 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFpsHistory.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawFpsHistory.java @@ -8,6 +8,7 @@ import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; @Conditional(G2DRendererCondition.class) @@ -68,6 +69,15 @@ public class G2DDrawFpsHistory extends G2DAbstractRenderingBo { } } + @Override + public void apply(final RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawFpsHistory o) { + this.history = o.history; + } + } + @Override public void close() throws Exception { super.close(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java index f261b04..60059d3 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawImage.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRenderer; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo; @@ -116,6 +117,19 @@ public class G2DDrawImage extends G2DAbstractRenderingBo implements DrawImageRen cachedImage.setUsed(true); } + @Override + public void apply(RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawImage o) { + this.resourceName = o.resourceName; + this.transparency = o.transparency; + this.imageData = o.imageData; + this.scaledX = o.scaledX; + this.scaledY = o.scaledY; + } + } + @Override public void close() throws Exception { super.close(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow.java index c1c7765..2ae5c5c 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.control.components.ComponentRenderingSupport; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo; import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor; @@ -62,6 +63,15 @@ public class G2DDrawWindow extends G2DAbstractRenderingBo implements DrawWindowR ComponentRenderingSupport.drawDecorativeBorderFilled(graphics, sx + strength, sy + strength, sw - strength * 2, sh - strength * 2, strength, cMain); } + @Override + public void apply(final RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawWindow o) { + this.thickBorder = o.thickBorder; + } + } + @Override public void close() throws Exception { super.close(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java index f4bf852..e7021a0 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/bo/rendering/G2DDrawWindow2.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Component; import de.extio.game_engine.renderer.g2d.G2DRenderer; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo; import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor; @@ -82,6 +83,17 @@ public class G2DDrawWindow2 extends G2DAbstractRenderingBo implements DrawWindow } } + @Override + public void apply(final RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawWindow2 o) { + this.color = o.color; + this.thickBorder = o.thickBorder; + this.awtColor = o.awtColor; + } + } + @Override public void close() throws Exception { super.close(); diff --git a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java index 79d7e33..8a8b310 100644 --- a/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java +++ b/src/main/java/de/extio/game_engine/renderer/g2d/control/G2DDrawControl.java @@ -24,6 +24,7 @@ import de.extio.game_engine.renderer.g2d.control.impl.G2DTextfieldControlImpl2; import de.extio.game_engine.renderer.g2d.control.impl.G2DToggleButtonControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DTooltipControl; import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowCloseButtonControlImpl; +import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.bo.ControlRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBoTextAlignment; @@ -310,6 +311,26 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen } } } + + @Override + public void apply(final RenderingBo other) { + super.apply(other); + + if (other instanceof final G2DDrawControl o) { + this.controlId = o.controlId; + this.clazz = o.clazz; + this.caption = o.caption; + this.controlGroup = o.controlGroup; + this.fontSize = o.fontSize; + this.customData = o.customData; + this.customData2 = o.customData2; + this.customData3 = o.customData3; + this.customData4 = o.customData4; + this.visible = o.visible; + this.enabled = o.enabled; + this.tooltip = o.tooltip; + } + } @Override public void close() throws Exception { 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 32e2f16..f74be57 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 @@ -226,6 +226,21 @@ public abstract class AbstractRenderingBo implements RenderingBo { this.layer = this.defaultLayer; } + @Override + public void apply(final RenderingBo other) { + if (other instanceof final AbstractRenderingBo abstractRenderingBo) { + this.id = abstractRenderingBo.id; + this.color = abstractRenderingBo.color; + this.x = abstractRenderingBo.x; + this.y = abstractRenderingBo.y; + this.localX = abstractRenderingBo.localX; + this.localY = abstractRenderingBo.localY; + this.width = abstractRenderingBo.width; + this.height = abstractRenderingBo.height; + this.layer = abstractRenderingBo.layer; + } + } + @Override public void closeStatic() { 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 1fe7dd9..51c1209 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 @@ -107,6 +107,8 @@ public interface RenderingBo extends AutoCloseable { */ RenderingBo withPositionRelative(HasPosition2 position); + void apply(RenderingBo other); + void closeStatic(); void setRendererData(RendererData RendererData);