feat(renderer): Add apply method to RenderingBo interface and implement in rendering classes

This commit is contained in:
extio-de
2025-12-25 15:27:53 +01:00
parent 7436f04406
commit 3ce76decff
10 changed files with 152 additions and 3 deletions

View File

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.G2DRendererCondition;
import de.extio.game_engine.renderer.g2d.G2DRendererControl; 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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor; import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor;
import de.extio.game_engine.renderer.model.color.RgbaColor; 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 CoordI2 overflow = MutableCoordI2.create();
private final List<Star> stars = new ArrayList<>(); private List<Star> stars;
private CoordI2 starsViewport = ImmutableCoordI2.create(); private CoordI2 starsViewport = ImmutableCoordI2.create();
@@ -58,6 +59,33 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo {
super(RenderingBoLayer.BACKGROUND0); 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 @Override
public boolean isScreenshotRelevant() { public boolean isScreenshotRelevant() {
return false; return false;
@@ -207,10 +235,17 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo {
} }
private void generateStars(final CoordI2 viewPort) { 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(); this.starsViewport = viewPort.toImmutableCoordI2();
final var rand = ThreadLocalXorShift128Random.current(); final var rand = ThreadLocalXorShift128Random.current();
this.stars.clear();
for (var i = 0; i < 350; i++) { for (var i = 0; i < 350; i++) {
this.stars.add(new Star( this.stars.add(new Star(
ImmutableCoordI2.create(rand.nextInt(this.starsViewport.getX()), rand.nextInt(this.starsViewport.getY())), ImmutableCoordI2.create(rand.nextInt(this.starsViewport.getX()), rand.nextInt(this.starsViewport.getY())),

View File

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRenderer; import de.extio.game_engine.renderer.g2d.G2DRenderer;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.G2DRendererCondition;
import de.extio.game_engine.renderer.g2d.control.components.ComponentRenderingSupport; 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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBo;
import de.extio.game_engine.renderer.model.bo.DrawEffectRenderingBoEffects; 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.customDouble0 = 0.0;
this.customString0 = null; 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 @Override
public DrawEffectRenderingBo setEffect(final DrawEffectRenderingBoEffects effect) { public DrawEffectRenderingBo setEffect(final DrawEffectRenderingBoEffects effect) {

View File

@@ -12,6 +12,7 @@ import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; 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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBo;
import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBoTextAlignment; 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 @Override
public void close() throws Exception { public void close() throws Exception {
super.close(); super.close();

View File

@@ -8,6 +8,7 @@ import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; 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.RenderingBoLayer;
@Conditional(G2DRendererCondition.class) @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 @Override
public void close() throws Exception { public void close() throws Exception {
super.close(); super.close();

View File

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRenderer; import de.extio.game_engine.renderer.g2d.G2DRenderer;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; 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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo;
@@ -116,6 +117,19 @@ public class G2DDrawImage extends G2DAbstractRenderingBo implements DrawImageRen
cachedImage.setUsed(true); 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 @Override
public void close() throws Exception { public void close() throws Exception {
super.close(); super.close();

View File

@@ -7,6 +7,7 @@ import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.G2DRendererCondition;
import de.extio.game_engine.renderer.g2d.control.components.ComponentRenderingSupport; 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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo;
import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor; 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); 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 @Override
public void close() throws Exception { public void close() throws Exception {
super.close(); super.close();

View File

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
import de.extio.game_engine.renderer.g2d.G2DRenderer; import de.extio.game_engine.renderer.g2d.G2DRenderer;
import de.extio.game_engine.renderer.g2d.G2DRendererCondition; 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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo; import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo;
import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor; 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 @Override
public void close() throws Exception { public void close() throws Exception {
super.close(); super.close();

View File

@@ -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.G2DToggleButtonControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DTooltipControl; 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.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.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo; import de.extio.game_engine.renderer.model.bo.ControlRenderingBo;
import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBoTextAlignment; 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 @Override
public void close() throws Exception { public void close() throws Exception {

View File

@@ -226,6 +226,21 @@ public abstract class AbstractRenderingBo implements RenderingBo {
this.layer = this.defaultLayer; 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 @Override
public void closeStatic() { public void closeStatic() {

View File

@@ -107,6 +107,8 @@ public interface RenderingBo extends AutoCloseable {
*/ */
RenderingBo withPositionRelative(HasPosition2 position); RenderingBo withPositionRelative(HasPosition2 position);
void apply(RenderingBo other);
void closeStatic(); void closeStatic();
void setRendererData(RendererData RendererData); void setRendererData(RendererData RendererData);