Integrate KeycodeRegistry into renderer components and update fullscreen toggle logic
This commit is contained in:
@@ -6,6 +6,9 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class KeycodeRegistryImpl implements KeycodeRegistry {
|
||||
|
||||
private volatile Map<String, KeycodeRegistration> registry;
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
import de.extio.game_engine.keyboard.KeycodeRegistry;
|
||||
import de.extio.game_engine.renderer.model.RenderingBo;
|
||||
|
||||
@AutoConfiguration
|
||||
@@ -33,8 +34,14 @@ public class RendererConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RendererData rendererData(final ApplicationContext applicationContext, final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, @Qualifier("gameEngineEventConsumer") final Consumer<Object> eventConsumer) {
|
||||
final var rendererData = new RendererData(applicationContext, renderer, rendererControl, renderingBoPool, eventConsumer);
|
||||
public RendererData rendererData(final ApplicationContext applicationContext,
|
||||
final Renderer renderer,
|
||||
final RendererControl rendererControl,
|
||||
final RenderingBoPool renderingBoPool,
|
||||
@Qualifier("gameEngineEventConsumer") final Consumer<Object> eventConsumer,
|
||||
final KeycodeRegistry keycodeRegistry) {
|
||||
|
||||
final var rendererData = new RendererData(applicationContext, renderer, rendererControl, renderingBoPool, eventConsumer, keycodeRegistry);
|
||||
renderer.setRendererData(rendererData);
|
||||
rendererControl.setRendererData(rendererData);
|
||||
renderingBoPool.setRendererData(rendererData);
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.util.function.Consumer;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import de.extio.game_engine.keyboard.KeycodeRegistry;
|
||||
import de.extio.game_engine.renderer.model.options.UiOptions;
|
||||
import de.extio.game_engine.renderer.model.options.VideoOptions;
|
||||
|
||||
@@ -26,14 +27,17 @@ public class RendererData {
|
||||
|
||||
private final AtomicLong frame = new AtomicLong();
|
||||
|
||||
private final KeycodeRegistry keycodeRegistry;
|
||||
|
||||
private RendererLoop rendererLoop;
|
||||
|
||||
public RendererData(final ApplicationContext applicationContext, final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, final Consumer<Object> eventConsumer) {
|
||||
public RendererData(final ApplicationContext applicationContext, final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, final Consumer<Object> eventConsumer, final KeycodeRegistry keycodeRegistry) {
|
||||
this.applicationContext = applicationContext;
|
||||
this.renderer = renderer;
|
||||
this.rendererControl = rendererControl;
|
||||
this.renderingBoPool = renderingBoPool;
|
||||
this.eventConsumer = eventConsumer;
|
||||
this.keycodeRegistry = keycodeRegistry;
|
||||
}
|
||||
|
||||
public ApplicationContext getApplicationContext() {
|
||||
@@ -80,4 +84,8 @@ public class RendererData {
|
||||
return this.rendererLoop;
|
||||
}
|
||||
|
||||
public KeycodeRegistry getKeycodeRegistry() {
|
||||
return this.keycodeRegistry;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package de.extio.game_engine.renderer;
|
||||
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import de.extio.game_engine.keyboard.KeyModifiers;
|
||||
import de.extio.game_engine.keyboard.KeycodeRegistration;
|
||||
|
||||
public class RendererLoop implements Runnable {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RendererLoop.class);
|
||||
@@ -22,6 +26,10 @@ public class RendererLoop implements Runnable {
|
||||
this.shutdown = false;
|
||||
|
||||
try {
|
||||
this.rendererData.getKeycodeRegistry().registerDefault(new KeycodeRegistration("toggleFullScreen", "675", KeyEvent.VK_ENTER, KeyModifiers.MODIFIER_ALT, "ALT ENTER"));
|
||||
|
||||
// TODO: Load video options from user preferences
|
||||
|
||||
this.rendererData.getRenderer().show();
|
||||
|
||||
LOGGER.info("Renderer loop started");
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.awt.event.MouseWheelListener;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.event.WindowListener;
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
@@ -37,6 +38,8 @@ import de.extio.game_engine.renderer.model.event.KeyStrokeEvent;
|
||||
import de.extio.game_engine.renderer.model.event.MouseClickEvent;
|
||||
import de.extio.game_engine.renderer.model.event.MouseEnterEvent;
|
||||
import de.extio.game_engine.renderer.model.event.MouseMoveEvent;
|
||||
import de.extio.game_engine.renderer.model.options.VideoOptions;
|
||||
import de.extio.game_engine.renderer.model.options.VideoOptions.VideoOptionsVideoMode;
|
||||
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||
|
||||
public class G2DMainFrame extends Frame {
|
||||
@@ -262,10 +265,27 @@ public class G2DMainFrame extends Frame {
|
||||
}
|
||||
else if (event.getID() == KeyEvent.KEY_RELEASED) {
|
||||
LOGGER.trace("Release {} {} {}", e.getKeyCode(), KeyEvent.getKeyText(e.getKeyCode()), G2DMainFrame.getModifiers(e));
|
||||
if (G2DMainFrame.this.rendererData.getKeycodeRegistry().check("toggleFullScreen", e.getKeyCode(), G2DMainFrame.getModifiers(e))) {
|
||||
final VideoOptions clientVideoOptions = G2DMainFrame.this.rendererData.getVideoOptions();
|
||||
if (clientVideoOptions.getVideoMode() == VideoOptionsVideoMode.FULLSCREEN || clientVideoOptions.getVideoMode() == VideoOptionsVideoMode.BORDERLESS) {
|
||||
clientVideoOptions.setVideoMode(VideoOptionsVideoMode.WINDOW);
|
||||
}
|
||||
else {
|
||||
if (Objects.requireNonNullElse(System.getProperty("os.name"), "").toLowerCase().contains("windows")) {
|
||||
clientVideoOptions.setVideoMode(VideoOptionsVideoMode.BORDERLESS);
|
||||
}
|
||||
else {
|
||||
clientVideoOptions.setVideoMode(VideoOptionsVideoMode.FULLSCREEN);
|
||||
}
|
||||
}
|
||||
G2DMainFrame.this.rendererData.getRendererControl().applyVideoOptions();
|
||||
}
|
||||
else {
|
||||
final var keyPressMessage = new KeyStrokeEvent(true, e.getKeyCode(), KeyEvent.getKeyText(e.getKeyCode()), G2DMainFrame.getModifiers(e));
|
||||
G2DMainFrame.this.rendererData.getEventConsumer().accept(keyPressMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Toolkit.getDefaultToolkit().addAWTEventListener(this.aWTEventListener, AWTEvent.KEY_EVENT_MASK);
|
||||
}
|
||||
|
||||
@@ -88,6 +88,9 @@ public class G2DRendererControl implements RendererControl {
|
||||
Toolkit.getDefaultToolkit().sync();
|
||||
|
||||
this.updateViewPort(false, false);
|
||||
|
||||
// TODO: Save video options to user preferences
|
||||
|
||||
}
|
||||
finally {
|
||||
this.renderer.getWriteLock().unlock();
|
||||
|
||||
Reference in New Issue
Block a user