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.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
public class KeycodeRegistryImpl implements KeycodeRegistry {
|
public class KeycodeRegistryImpl implements KeycodeRegistry {
|
||||||
|
|
||||||
private volatile Map<String, KeycodeRegistration> registry;
|
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.ApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
|
import de.extio.game_engine.keyboard.KeycodeRegistry;
|
||||||
import de.extio.game_engine.renderer.model.RenderingBo;
|
import de.extio.game_engine.renderer.model.RenderingBo;
|
||||||
|
|
||||||
@AutoConfiguration
|
@AutoConfiguration
|
||||||
@@ -33,8 +34,14 @@ public class RendererConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RendererData rendererData(final ApplicationContext applicationContext, final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, @Qualifier("gameEngineEventConsumer") final Consumer<Object> eventConsumer) {
|
public RendererData rendererData(final ApplicationContext applicationContext,
|
||||||
final var rendererData = new RendererData(applicationContext, renderer, rendererControl, renderingBoPool, eventConsumer);
|
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);
|
renderer.setRendererData(rendererData);
|
||||||
rendererControl.setRendererData(rendererData);
|
rendererControl.setRendererData(rendererData);
|
||||||
renderingBoPool.setRendererData(rendererData);
|
renderingBoPool.setRendererData(rendererData);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
import org.springframework.context.ApplicationContext;
|
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.UiOptions;
|
||||||
import de.extio.game_engine.renderer.model.options.VideoOptions;
|
import de.extio.game_engine.renderer.model.options.VideoOptions;
|
||||||
|
|
||||||
@@ -26,14 +27,17 @@ public class RendererData {
|
|||||||
|
|
||||||
private final AtomicLong frame = new AtomicLong();
|
private final AtomicLong frame = new AtomicLong();
|
||||||
|
|
||||||
|
private final KeycodeRegistry keycodeRegistry;
|
||||||
|
|
||||||
private RendererLoop rendererLoop;
|
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.applicationContext = applicationContext;
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
this.rendererControl = rendererControl;
|
this.rendererControl = rendererControl;
|
||||||
this.renderingBoPool = renderingBoPool;
|
this.renderingBoPool = renderingBoPool;
|
||||||
this.eventConsumer = eventConsumer;
|
this.eventConsumer = eventConsumer;
|
||||||
|
this.keycodeRegistry = keycodeRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplicationContext getApplicationContext() {
|
public ApplicationContext getApplicationContext() {
|
||||||
@@ -80,4 +84,8 @@ public class RendererData {
|
|||||||
return this.rendererLoop;
|
return this.rendererLoop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public KeycodeRegistry getKeycodeRegistry() {
|
||||||
|
return this.keycodeRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
package de.extio.game_engine.renderer;
|
package de.extio.game_engine.renderer;
|
||||||
|
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import de.extio.game_engine.keyboard.KeyModifiers;
|
||||||
|
import de.extio.game_engine.keyboard.KeycodeRegistration;
|
||||||
|
|
||||||
public class RendererLoop implements Runnable {
|
public class RendererLoop implements Runnable {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(RendererLoop.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(RendererLoop.class);
|
||||||
@@ -22,6 +26,10 @@ public class RendererLoop implements Runnable {
|
|||||||
this.shutdown = false;
|
this.shutdown = false;
|
||||||
|
|
||||||
try {
|
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();
|
this.rendererData.getRenderer().show();
|
||||||
|
|
||||||
LOGGER.info("Renderer loop started");
|
LOGGER.info("Renderer loop started");
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import java.awt.event.MouseWheelListener;
|
|||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
import java.awt.event.WindowListener;
|
import java.awt.event.WindowListener;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
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.MouseClickEvent;
|
||||||
import de.extio.game_engine.renderer.model.event.MouseEnterEvent;
|
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.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;
|
import de.extio.game_engine.spatial2.model.ImmutableCoordI2;
|
||||||
|
|
||||||
public class G2DMainFrame extends Frame {
|
public class G2DMainFrame extends Frame {
|
||||||
@@ -262,10 +265,27 @@ public class G2DMainFrame extends Frame {
|
|||||||
}
|
}
|
||||||
else if (event.getID() == KeyEvent.KEY_RELEASED) {
|
else if (event.getID() == KeyEvent.KEY_RELEASED) {
|
||||||
LOGGER.trace("Release {} {} {}", e.getKeyCode(), KeyEvent.getKeyText(e.getKeyCode()), G2DMainFrame.getModifiers(e));
|
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));
|
final var keyPressMessage = new KeyStrokeEvent(true, e.getKeyCode(), KeyEvent.getKeyText(e.getKeyCode()), G2DMainFrame.getModifiers(e));
|
||||||
G2DMainFrame.this.rendererData.getEventConsumer().accept(keyPressMessage);
|
G2DMainFrame.this.rendererData.getEventConsumer().accept(keyPressMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Toolkit.getDefaultToolkit().addAWTEventListener(this.aWTEventListener, AWTEvent.KEY_EVENT_MASK);
|
Toolkit.getDefaultToolkit().addAWTEventListener(this.aWTEventListener, AWTEvent.KEY_EVENT_MASK);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,9 @@ public class G2DRendererControl implements RendererControl {
|
|||||||
Toolkit.getDefaultToolkit().sync();
|
Toolkit.getDefaultToolkit().sync();
|
||||||
|
|
||||||
this.updateViewPort(false, false);
|
this.updateViewPort(false, false);
|
||||||
|
|
||||||
|
// TODO: Save video options to user preferences
|
||||||
|
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
this.renderer.getWriteLock().unlock();
|
this.renderer.getWriteLock().unlock();
|
||||||
|
|||||||
Reference in New Issue
Block a user