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 94f1da5..e23230d 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 @@ -14,10 +14,10 @@ import java.util.Objects; import javax.imageio.ImageIO; - import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; +import de.extio.game_engine.renderer.RendererControl; import de.extio.game_engine.renderer.g2d.G2DRendererCondition; import de.extio.game_engine.renderer.g2d.G2DRendererControl; import de.extio.game_engine.renderer.model.RenderingBo; @@ -43,6 +43,8 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo { private final static List STARS = new ArrayList<>(); + private final static List REFERENCE_STARS = new ArrayList<>(); + private static CoordI2 STARS_LAST_VIEWPORT = ImmutableCoordI2.create(); private final CoordI2 bgrOffset = MutableCoordI2.create(); @@ -232,19 +234,33 @@ public class G2DDrawBackground extends G2DAbstractRenderingBo { } private void generateStars(final CoordI2 viewPort) { - if (STARS.isEmpty() || !viewPort.equals(STARS_LAST_VIEWPORT)) { - STARS.clear(); - - STARS_LAST_VIEWPORT = viewPort.toImmutableCoordI2(); + if (REFERENCE_STARS.isEmpty()) { final var rand = ThreadLocalXorShift128Random.current(); for (var i = 0; i < 350; i++) { - STARS.add(new Star( - ImmutableCoordI2.create(rand.nextInt(STARS_LAST_VIEWPORT.getX()), rand.nextInt(STARS_LAST_VIEWPORT.getY())), - ImmutableCoordI2.create(rand.nextInt(3) + 2, rand.nextInt(3) + 2), - new ImmutableRgbaColor(rand.nextInt(30) + 100, rand.nextInt(30) + 100, rand.nextInt(30) + 130))); + final var position = ImmutableCoordI2.create(rand.nextInt(RendererControl.REFERENCE_RESOLUTION.getX()), rand.nextInt(RendererControl.REFERENCE_RESOLUTION.getY())); + final var radius = ImmutableCoordI2.create(rand.nextInt(3) + 2, rand.nextInt(3) + 2); + final var color = new ImmutableRgbaColor(rand.nextInt(30) + 100, rand.nextInt(30) + 100, rand.nextInt(30) + 130); + + REFERENCE_STARS.add(new Star(position, radius, color)); + STARS.add(new Star(position, radius, color)); } } + + if (!viewPort.equals(STARS_LAST_VIEWPORT)) { + final double scaleX = (double) viewPort.getX() / RendererControl.REFERENCE_RESOLUTION.getX(); + final double scaleY = (double) viewPort.getY() / RendererControl.REFERENCE_RESOLUTION.getY(); + + for (int i = 0; i < REFERENCE_STARS.size(); i++) { + final var refStar = REFERENCE_STARS.get(i); + final var star = STARS.get(i); + + star.position = ImmutableCoordI2.create( + (int) (refStar.position.getX() * scaleX), + (int) (refStar.position.getY() * scaleY)); + } + STARS_LAST_VIEWPORT = viewPort.toImmutableCoordI2(); + } } private static class Star {