Configuration for G2D rendering; Add RendererLoop; Bootstrapping
This commit is contained in:
@@ -16,4 +16,6 @@ public interface Renderer {
|
||||
|
||||
void setTitle(final String title);
|
||||
|
||||
void setRendererData(final RendererData rendererData);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package de.extio.game_engine.renderer;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
import de.extio.game_engine.renderer.model.RenderingBo;
|
||||
|
||||
@AutoConfiguration
|
||||
@ConditionalOnProperty(name = "game-engine.renderer.enabled", havingValue = "true", matchIfMissing = true)
|
||||
public class RendererConfiguration {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Bean
|
||||
public RenderingBoPool renderingBoPool(final List<RenderingBo> renderingBoImplementations) {
|
||||
final Map<Class<? extends RenderingBo>, Class<? extends RenderingBo>> mapping = new HashMap<>();
|
||||
for (final var impl : renderingBoImplementations) {
|
||||
for (final var interf : impl.getClass().getInterfaces()) {
|
||||
if (RenderingBo.class.isAssignableFrom(interf)) {
|
||||
mapping.put((Class<? extends RenderingBo>) interf, impl.getClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new RenderingBoPoolImpl(mapping);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RendererData rendererData(final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, @Qualifier("gameEngineEventConsumer") final Consumer<Object> eventConsumer) {
|
||||
final var rendererData = new RendererData(renderer, rendererControl, renderingBoPool, eventConsumer);
|
||||
renderer.setRendererData(rendererData);
|
||||
rendererControl.setRendererData(rendererData);
|
||||
renderingBoPool.setRendererData(rendererData);
|
||||
return rendererData;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RendererLoop rendererLoop(final RendererData rendererData) {
|
||||
final var rendererLoop = new RendererLoop(rendererData);
|
||||
rendererData.setRendererLoop(rendererLoop);
|
||||
rendererLoop.start();
|
||||
return rendererLoop;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -39,5 +39,7 @@ public interface RendererControl {
|
||||
void setFrameRate(int frameRate);
|
||||
|
||||
long getFrame();
|
||||
|
||||
void setRendererData(final RendererData rendererData);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.extio.game_engine.renderer;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import de.extio.game_engine.renderer.model.options.UiOptions;
|
||||
@@ -7,28 +8,33 @@ import de.extio.game_engine.renderer.model.options.VideoOptions;
|
||||
|
||||
public class RendererData {
|
||||
|
||||
private Renderer renderer;
|
||||
private final Renderer renderer;
|
||||
|
||||
private RendererControl rendererControl;
|
||||
private final RendererControl rendererControl;
|
||||
|
||||
private RenderingBoPool renderingBoPool;
|
||||
private final RenderingBoPool renderingBoPool;
|
||||
|
||||
private final Consumer<Object> eventConsumer;
|
||||
|
||||
private final UiOptions uiOptions = new UiOptions();
|
||||
|
||||
private final VideoOptions videoOptions = new VideoOptions();
|
||||
|
||||
private long frame;
|
||||
private final AtomicLong frame = new AtomicLong();
|
||||
|
||||
private Consumer<Object> eventConsumer;
|
||||
private RendererLoop rendererLoop;
|
||||
|
||||
public RendererData(final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, final Consumer<Object> eventConsumer) {
|
||||
this.renderer = renderer;
|
||||
this.rendererControl = rendererControl;
|
||||
this.renderingBoPool = renderingBoPool;
|
||||
this.eventConsumer = eventConsumer;
|
||||
}
|
||||
|
||||
public RendererControl getRendererControl() {
|
||||
return this.rendererControl;
|
||||
}
|
||||
|
||||
public void setRendererControl(final RendererControl rendererControl) {
|
||||
this.rendererControl = rendererControl;
|
||||
}
|
||||
|
||||
public UiOptions getUiOptions() {
|
||||
return this.uiOptions;
|
||||
}
|
||||
@@ -37,26 +43,18 @@ public class RendererData {
|
||||
return this.renderingBoPool;
|
||||
}
|
||||
|
||||
public void setRenderingBoPool(final RenderingBoPool renderingBoPool) {
|
||||
this.renderingBoPool = renderingBoPool;
|
||||
}
|
||||
|
||||
public long getFrame() {
|
||||
return this.frame;
|
||||
return this.frame.get();
|
||||
}
|
||||
|
||||
public void setFrame(final long frame) {
|
||||
this.frame = frame;
|
||||
|
||||
public long nextFrame() {
|
||||
return this.frame.incrementAndGet();
|
||||
}
|
||||
|
||||
public Renderer getRenderer() {
|
||||
return this.renderer;
|
||||
}
|
||||
|
||||
public void setRenderer(final Renderer renderer) {
|
||||
this.renderer = renderer;
|
||||
}
|
||||
|
||||
public VideoOptions getVideoOptions() {
|
||||
return this.videoOptions;
|
||||
}
|
||||
@@ -64,9 +62,13 @@ public class RendererData {
|
||||
public Consumer<Object> getEventConsumer() {
|
||||
return this.eventConsumer;
|
||||
}
|
||||
|
||||
public void setEventConsumer(final Consumer<Object> eventConsumer) {
|
||||
this.eventConsumer = eventConsumer;
|
||||
|
||||
public void setRendererLoop(final RendererLoop rendererLoop) {
|
||||
this.rendererLoop = rendererLoop;
|
||||
}
|
||||
|
||||
public RendererLoop getRendererLoop() {
|
||||
return this.rendererLoop;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package de.extio.game_engine.renderer;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.G2DRenderer;
|
||||
import de.extio.game_engine.renderer.g2d.G2DRendererControl;
|
||||
|
||||
public class RendererFactory {
|
||||
|
||||
public static Renderer createG2DRenderer(final RenderingBoPool renderingBoPool, final Consumer<Object> eventConsumer) {
|
||||
final var rendererData = new RendererData();
|
||||
final var renderer = new G2DRenderer(rendererData);
|
||||
rendererData.setRendererControl(new G2DRendererControl(renderer, rendererData));
|
||||
rendererData.setRenderingBoPool(renderingBoPool);
|
||||
rendererData.setRenderer(renderer);
|
||||
rendererData.setEventConsumer(eventConsumer);
|
||||
|
||||
return renderer;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package de.extio.game_engine.renderer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class RendererLoop extends Thread {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RendererLoop.class);
|
||||
|
||||
private final RendererData rendererData;
|
||||
|
||||
private volatile boolean running = true;
|
||||
|
||||
public RendererLoop(final RendererData rendererData) {
|
||||
this.rendererData = rendererData;
|
||||
this.setName("Renderer-Loop");
|
||||
this.setDaemon(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
this.rendererData.getRenderer().show();
|
||||
|
||||
LOGGER.info("Renderer loop started");
|
||||
int exceptionCount = 0;
|
||||
while (this.running) {
|
||||
try {
|
||||
this.rendererData.nextFrame();
|
||||
this.rendererData.getRenderer().run(new ArrayList<>()); // TODO: Pass actual renderables
|
||||
exceptionCount = 0;
|
||||
}
|
||||
catch (final InterruptedException e) {
|
||||
LOGGER.info("Renderer loop interrupted, shutting down");
|
||||
Thread.currentThread().interrupt();
|
||||
break;
|
||||
}
|
||||
catch (final Exception e) {
|
||||
LOGGER.error("Renderer loop caught exception", e);
|
||||
if (++exceptionCount >= 10) {
|
||||
LOGGER.error("Renderer loop exceeded maximum exception count, shutting down");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOGGER.info("Renderer loop exited");
|
||||
}
|
||||
catch (final Throwable t) {
|
||||
LOGGER.error("Renderer loop crashed", t);
|
||||
}
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
this.running = false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,4 +21,6 @@ public interface RenderingBoPool {
|
||||
*/
|
||||
void release(RenderingBo obj);
|
||||
|
||||
|
||||
void setRendererData(RendererData rendererData);
|
||||
}
|
||||
|
||||
@@ -9,9 +9,7 @@ import de.extio.game_engine.renderer.model.RenderingBo;
|
||||
|
||||
public class RenderingBoPoolImpl implements RenderingBoPool {
|
||||
|
||||
public final static Map<Class<? extends RenderingBo>, Class<? extends RenderingBo>> INTERFACE_TO_BO_G2D = new HashMap<>();
|
||||
|
||||
private final RendererData rendererData;
|
||||
public final Map<Class<? extends RenderingBo>, Class<? extends RenderingBo>> mapping;
|
||||
|
||||
private final Map<Class<? extends RenderingBo>, Stack<RenderingBo>> pool = new HashMap<>();
|
||||
|
||||
@@ -19,6 +17,8 @@ public class RenderingBoPoolImpl implements RenderingBoPool {
|
||||
|
||||
private final LastReverseMapping lastReverseMapping = new LastReverseMapping();
|
||||
|
||||
private RendererData rendererData;
|
||||
|
||||
private static class LastMapping {
|
||||
|
||||
volatile Class<? extends RenderingBo> clazz;
|
||||
@@ -34,11 +34,11 @@ public class RenderingBoPoolImpl implements RenderingBoPool {
|
||||
|
||||
volatile Stack<RenderingBo> pooled;
|
||||
}
|
||||
|
||||
public RenderingBoPoolImpl(final RendererData rendererData) {
|
||||
this.rendererData = rendererData;
|
||||
|
||||
public RenderingBoPoolImpl(final Map<Class<? extends RenderingBo>, Class<? extends RenderingBo>> mapping) {
|
||||
this.mapping = mapping;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends RenderingBo> T acquire(final Class<T> clazz) {
|
||||
@@ -54,7 +54,7 @@ public class RenderingBoPoolImpl implements RenderingBoPool {
|
||||
impl = clazz;
|
||||
}
|
||||
else {
|
||||
impl = INTERFACE_TO_BO_G2D.get(clazz);
|
||||
impl = mapping.get(clazz);
|
||||
if (impl == null) {
|
||||
throw new IllegalArgumentException(clazz.getSimpleName() + " not mapped");
|
||||
}
|
||||
@@ -114,5 +114,10 @@ public class RenderingBoPoolImpl implements RenderingBoPool {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRendererData(final RendererData rendererData) {
|
||||
this.rendererData = rendererData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package de.extio.game_engine.renderer.g2d;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@AutoConfiguration
|
||||
@ConditionalOnProperty(name = "game-engine.renderer.enabled", havingValue = "true", matchIfMissing = true)
|
||||
@ConditionalOnProperty(name = "game-engine.renderer.strategy", havingValue = "g2d", matchIfMissing = true)
|
||||
public class G2DAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
public G2DRenderer g2dRenderer(@Value("${game-engine.renderer.title:}") final String title) {
|
||||
final var renderer = new G2DRenderer();
|
||||
renderer.setTitle(title);
|
||||
return renderer;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public G2DRendererControl g2dRendererControl(final G2DRenderer renderer) {
|
||||
return new G2DRendererControl(renderer);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -39,7 +39,6 @@ import de.extio.game_engine.renderer.model.event.MouseMoveEvent;
|
||||
import de.extio.game_engine.spatial2.model.CoordI2;
|
||||
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class G2DMainFrame extends Frame {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(G2DMainFrame.class);
|
||||
@@ -62,8 +61,10 @@ public class G2DMainFrame extends Frame {
|
||||
this.setBackground(Color.BLACK);
|
||||
|
||||
try (var in = this.getClass().getClassLoader().getResourceAsStream("icon.png")) {
|
||||
final var icon = ImageIO.read(in);
|
||||
this.setIconImage(icon);
|
||||
if (in != null) {
|
||||
final var icon = ImageIO.read(in);
|
||||
this.setIconImage(icon);
|
||||
}
|
||||
}
|
||||
catch (final IOException e) {
|
||||
LOGGER.error(e.getMessage(), e);
|
||||
@@ -93,7 +94,7 @@ public class G2DMainFrame extends Frame {
|
||||
|
||||
@Override
|
||||
public void windowClosing(final WindowEvent e) {
|
||||
System.exit(0);
|
||||
G2DMainFrame.this.rendererData.getRendererLoop().shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,25 +19,15 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import de.extio.game_engine.renderer.Renderer;
|
||||
import de.extio.game_engine.renderer.RendererData;
|
||||
import de.extio.game_engine.renderer.RenderingBoPoolImpl;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DAbstractRenderingBo;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawBackground;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawEffect;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawFont;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawFpsHistory;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawImage;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawTest;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawWindow;
|
||||
import de.extio.game_engine.renderer.g2d.control.G2DDrawControl;
|
||||
import de.extio.game_engine.renderer.g2d.control.G2DDrawControlTooltip;
|
||||
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.DrawEffectRenderingBo;
|
||||
import de.extio.game_engine.renderer.model.bo.DrawFontRenderingBo;
|
||||
import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo;
|
||||
import de.extio.game_engine.renderer.model.bo.DrawTestRenderingBo;
|
||||
import de.extio.game_engine.renderer.model.bo.DrawWindowRenderingBo;
|
||||
import de.extio.game_engine.renderer.model.color.RgbaColor;
|
||||
import de.extio.game_engine.renderer.model.event.TakeScreenshotEvent;
|
||||
import de.extio.game_engine.util.RingBuffer;
|
||||
@@ -48,11 +38,11 @@ public class G2DRenderer implements Renderer {
|
||||
|
||||
private static final long SLEEP_PRECISION = TimeUnit.MILLISECONDS.toNanos(3);
|
||||
|
||||
private final RingBuffer<Integer> fpsHistory = new RingBuffer<>(90);
|
||||
|
||||
private volatile G2DMainFrame mainFrame;
|
||||
|
||||
private final RendererData rendererData;
|
||||
|
||||
private final RingBuffer<Integer> fpsHistory = new RingBuffer<>(90);
|
||||
private RendererData rendererData;
|
||||
|
||||
private long fpsMeasurement;
|
||||
|
||||
@@ -70,28 +60,20 @@ public class G2DRenderer implements Renderer {
|
||||
|
||||
private volatile boolean takeScreenshot;
|
||||
|
||||
public G2DRenderer(final RendererData rendererData) {
|
||||
public G2DRenderer() {
|
||||
LOGGER.info("ctor");
|
||||
|
||||
System.setProperty("sun.java2d.uiScale", "1");
|
||||
System.setProperty("awt.nativeDoubleBuffering", "true");
|
||||
System.setProperty("awt.useSystemAAFontSettings", "on");
|
||||
System.setProperty("swing.aatext", "true");
|
||||
|
||||
this.rendererData = rendererData;
|
||||
|
||||
// TODO: Discover with spring dm
|
||||
RenderingBoPoolImpl.INTERFACE_TO_BO_G2D.put(DrawFontRenderingBo.class, G2DDrawFont.class);
|
||||
RenderingBoPoolImpl.INTERFACE_TO_BO_G2D.put(DrawImageRenderingBo.class, G2DDrawImage.class);
|
||||
RenderingBoPoolImpl.INTERFACE_TO_BO_G2D.put(ControlRenderingBo.class, G2DDrawControl.class);
|
||||
RenderingBoPoolImpl.INTERFACE_TO_BO_G2D.put(DrawWindowRenderingBo.class, G2DDrawWindow.class);
|
||||
RenderingBoPoolImpl.INTERFACE_TO_BO_G2D.put(DrawTestRenderingBo.class, G2DDrawTest.class);
|
||||
RenderingBoPoolImpl.INTERFACE_TO_BO_G2D.put(DrawEffectRenderingBo.class, G2DDrawEffect.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
try {
|
||||
LOGGER.info("show()");
|
||||
|
||||
EventQueue.invokeAndWait(() -> {
|
||||
this.rendererData.getRendererControl().applyVideoOptions();
|
||||
});
|
||||
@@ -316,7 +298,7 @@ public class G2DRenderer implements Renderer {
|
||||
@Override
|
||||
public void setTitle(final String title) {
|
||||
this.title = title;
|
||||
if (this.mainFrame != null) {
|
||||
if (this.mainFrame != null && title != null) {
|
||||
this.mainFrame.setTitle(title);
|
||||
}
|
||||
}
|
||||
@@ -324,4 +306,9 @@ public class G2DRenderer implements Renderer {
|
||||
public String getTitle() {
|
||||
return this.title;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRendererData(final RendererData rendererData) {
|
||||
this.rendererData = rendererData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,10 +19,10 @@ public class G2DRendererControl implements RendererControl {
|
||||
|
||||
private final static CoordI2 NO_SCALING_UPPER_LIMIT = ImmutableCoordI2.create(2560, 1440);
|
||||
|
||||
private final RendererData rendererData;
|
||||
|
||||
private final G2DRenderer renderer;
|
||||
|
||||
private RendererData rendererData;
|
||||
|
||||
private CoordI2 absoluteViewportDimension = REFERENCE_RESOLUTION;
|
||||
|
||||
private CoordI2 effectiveViewportDimension = REFERENCE_RESOLUTION;
|
||||
@@ -37,9 +37,8 @@ public class G2DRendererControl implements RendererControl {
|
||||
|
||||
private volatile long videoOptionsAppliedAt;
|
||||
|
||||
public G2DRendererControl(final G2DRenderer renderer, final RendererData rendererData) {
|
||||
public G2DRendererControl(final G2DRenderer renderer) {
|
||||
this.renderer = renderer;
|
||||
this.rendererData = rendererData;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,7 +81,7 @@ public class G2DRendererControl implements RendererControl {
|
||||
else {
|
||||
mainFrame.windowed();
|
||||
}
|
||||
mainFrame.setTitle(this.renderer.getTitle());
|
||||
mainFrame.setTitle(this.renderer.getTitle() == null ? "" : this.renderer.getTitle());
|
||||
if (this.rendererData.getVideoOptions().getFrameRateTarget() == 0) {
|
||||
this.rendererData.getVideoOptions().setFrameRateTarget(this.frameRate);
|
||||
}
|
||||
@@ -252,4 +251,9 @@ public class G2DRendererControl implements RendererControl {
|
||||
public long getFrame() {
|
||||
return this.rendererData.getFrame();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRendererData(final RendererData rendererData) {
|
||||
this.rendererData = rendererData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@ import java.util.Objects;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.G2DRendererControl;
|
||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||
import de.extio.game_engine.renderer.model.color.ImmutableRgbaColor;
|
||||
@@ -23,6 +25,7 @@ import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
import de.extio.game_engine.spatial2.model.MutableCoordI2;
|
||||
import de.extio.game_engine.util.rng.ThreadLocalXorShift128Random;
|
||||
|
||||
@Component
|
||||
public class G2DDrawBackground extends G2DAbstractRenderingBo {
|
||||
|
||||
private static VolatileImage BACKGROUND_IMAGE;
|
||||
|
||||
@@ -6,6 +6,8 @@ import java.awt.Graphics2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.G2DRenderer;
|
||||
import de.extio.game_engine.renderer.g2d.control.components.ComponentRenderingSupport;
|
||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||
@@ -17,6 +19,7 @@ import de.extio.game_engine.spatial2.model.CoordI2;
|
||||
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
import de.extio.game_engine.spatial2.model.MutableCoordI2;
|
||||
|
||||
@Component
|
||||
public class G2DDrawEffect extends G2DAbstractRenderingBo implements DrawEffectRenderingBo {
|
||||
|
||||
private DrawEffectRenderingBoEffects effect;
|
||||
|
||||
@@ -8,6 +8,8 @@ import java.awt.font.TextAttribute;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
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;
|
||||
@@ -15,6 +17,7 @@ import de.extio.game_engine.spatial2.model.CoordI2;
|
||||
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
import de.extio.game_engine.spatial2.model.MutableCoordI2;
|
||||
|
||||
@Component
|
||||
public class G2DDrawFont extends G2DAbstractRenderingBo implements DrawFontRenderingBo {
|
||||
|
||||
private final static float FONT_SIZE_MIN = 12.0F;
|
||||
|
||||
@@ -4,8 +4,11 @@ import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||
|
||||
@Component
|
||||
public class G2DDrawFpsHistory extends G2DAbstractRenderingBo {
|
||||
|
||||
private Collection<Integer> history;
|
||||
|
||||
@@ -12,10 +12,13 @@ import java.util.Map;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.G2DRenderer;
|
||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||
import de.extio.game_engine.renderer.model.bo.DrawImageRenderingBo;
|
||||
|
||||
@Component
|
||||
public class G2DDrawImage extends G2DAbstractRenderingBo implements DrawImageRenderingBo {
|
||||
|
||||
private static Map<String, CachedImage> IMAGE_CACHE = new HashMap<>();
|
||||
|
||||
@@ -2,9 +2,12 @@ package de.extio.game_engine.renderer.g2d.bo.rendering;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||
import de.extio.game_engine.renderer.model.bo.DrawTestRenderingBo;
|
||||
|
||||
@Component
|
||||
public class G2DDrawTest extends G2DAbstractRenderingBo implements DrawTestRenderingBo {
|
||||
|
||||
// private static BufferedImage TILE;
|
||||
|
||||
@@ -2,12 +2,15 @@ package de.extio.game_engine.renderer.g2d.bo.rendering;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.control.components.ComponentRenderingSupport;
|
||||
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;
|
||||
import de.extio.game_engine.renderer.model.color.RgbaColor;
|
||||
|
||||
@Component
|
||||
public class G2DDrawWindow extends G2DAbstractRenderingBo implements DrawWindowRenderingBo {
|
||||
|
||||
private static final RgbaColor COLOR_WINDOW = new ImmutableRgbaColor(ComponentRenderingSupport.COLOR_COMPONENT_BORDER1.getRed(), ComponentRenderingSupport.COLOR_COMPONENT_BORDER1.getGreen(), ComponentRenderingSupport.COLOR_COMPONENT_BORDER1.getBlue());
|
||||
|
||||
@@ -8,12 +8,15 @@ import java.awt.image.BufferedImage;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.G2DRenderer;
|
||||
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;
|
||||
import de.extio.game_engine.renderer.model.color.RgbaColor;
|
||||
|
||||
@Component
|
||||
public class G2DDrawWindow2 extends G2DAbstractRenderingBo implements DrawWindowRenderingBo {
|
||||
|
||||
private static final Map<Long, G2DWindowCacheEntry> CACHE = new HashMap<>();
|
||||
|
||||
@@ -8,6 +8,7 @@ import java.util.Map;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DAbstractRenderingBo;
|
||||
import de.extio.game_engine.renderer.g2d.control.impl.G2DBaseControlImpl;
|
||||
@@ -26,6 +27,7 @@ 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.color.RgbaColor;
|
||||
|
||||
@Component
|
||||
public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRenderingBo {
|
||||
|
||||
private final static Logger LOGGER = LoggerFactory.getLogger(G2DDrawControl.class);
|
||||
|
||||
@@ -3,12 +3,15 @@ package de.extio.game_engine.renderer.g2d.control;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DAbstractRenderingBo;
|
||||
import de.extio.game_engine.renderer.g2d.bo.rendering.G2DDrawFont;
|
||||
import de.extio.game_engine.renderer.model.RenderingBoLayer;
|
||||
import de.extio.game_engine.renderer.model.color.MutableRgbaColor;
|
||||
import de.extio.game_engine.spatial2.model.CoordI2;
|
||||
|
||||
@Component
|
||||
public class G2DDrawControlTooltip extends G2DAbstractRenderingBo {
|
||||
|
||||
public static record TooltipRecord(CoordI2 position, String text) {
|
||||
|
||||
@@ -15,7 +15,7 @@ public final class UiOptions {
|
||||
|
||||
private boolean backgroundScrollingReverse1;
|
||||
|
||||
private boolean drawFps;
|
||||
private boolean drawFps = true;
|
||||
|
||||
private CoordI2 backgroundOffset0 = MutableCoordI2.create();
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package de.extio.game_engine.renderer.model.options;
|
||||
|
||||
public final class VideoOptions {
|
||||
|
||||
private VideoOptionsVideoMode videoMode = VideoOptionsVideoMode.BORDERLESS;
|
||||
private VideoOptionsVideoMode videoMode = VideoOptionsVideoMode.WINDOW;
|
||||
|
||||
private int fullScreenNumber = -1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user