feat(demo): Enhance DemoModule with secondary window setup and UI controls
This commit is contained in:
@@ -12,8 +12,11 @@ import de.extio.game_engine.renderer.RendererControl;
|
||||
import de.extio.game_engine.renderer.container.Window;
|
||||
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.DrawImageRenderingBo;
|
||||
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.ButtonControl;
|
||||
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo.LabelControl;
|
||||
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.HorizontalAlignment;
|
||||
import de.extio.game_engine.renderer.model.event.UiControlEvent;
|
||||
import de.extio.game_engine.renderer.work.RenderingBoPool;
|
||||
import de.extio.game_engine.resource.StaticResource;
|
||||
@@ -25,33 +28,86 @@ public class DemoModule extends AbstractClientModule {
|
||||
|
||||
@Autowired
|
||||
private AudioController audioController;
|
||||
|
||||
|
||||
@Autowired
|
||||
private RenderingBoPool renderingBoPool;
|
||||
|
||||
|
||||
@Autowired
|
||||
private EventService eventService;
|
||||
|
||||
|
||||
private Window mainWindow;
|
||||
|
||||
|
||||
private Window secondaryWindow;
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
this.mainWindow = this.applicationContext.getBean(Window.class);
|
||||
this.mainWindow.setNormalizedPosition(RendererControl.REFERENCE_RESOLUTION.divide(9));
|
||||
this.mainWindow.setNormalizedDimension(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7));
|
||||
this.mainWindow.setDraggable(true);
|
||||
|
||||
|
||||
this.secondaryWindow = this.applicationContext.getBean(Window.class);
|
||||
this.secondaryWindow.setNormalizedPosition(RendererControl.REFERENCE_RESOLUTION.divide(7).multiply(3));
|
||||
this.secondaryWindow.setNormalizedDimension(RendererControl.REFERENCE_RESOLUTION.divide(7).multiply(2));
|
||||
this.secondaryWindow.setDraggable(true);
|
||||
|
||||
this.getModuleService().changeActiveState(this.getId(), true);
|
||||
this.getModuleService().changeDisplayState(this.getId(), true);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUnload() {
|
||||
this.getModuleService().unloadModule(this.mainWindow.getId());
|
||||
this.getModuleService().unloadModule(this.secondaryWindow.getId());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivate() {
|
||||
this.setupMainWindow();
|
||||
this.getModuleService().changeActiveState(this.mainWindow.getId(), true);
|
||||
this.eventService.register(UiControlEvent.class, this.getId(), this::onUiControlEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeactivate() {
|
||||
this.getModuleService().changeActiveState(this.mainWindow.getId(), false);
|
||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShow() {
|
||||
this.getModuleService().changeDisplayState(this.mainWindow.getId(), true);
|
||||
this.audioController.playMusic(null, List.of(new StaticResource(List.of("audio"), "race.ogg")), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHide() {
|
||||
this.getModuleService().changeDisplayState(this.mainWindow.getId(), false);
|
||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
||||
this.audioController.stopMusic();
|
||||
}
|
||||
|
||||
private void onUiControlEvent(final UiControlEvent event) {
|
||||
switch (event.getId()) {
|
||||
case "DemoModule_MainWindow_Label_Welcome" -> {
|
||||
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
||||
}
|
||||
|
||||
case "DemoModule_MainWindow_Label_Start" -> {
|
||||
this.audioController.play(new StaticResource(List.of("audio"), "alert2.ogg"));
|
||||
this.setupSecondaryWindow();
|
||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), true);
|
||||
this.getModuleService().changeDisplayState(this.secondaryWindow.getId(), true);
|
||||
}
|
||||
|
||||
case "DemoModule_SecondaryWindow_Button_Ok" -> {
|
||||
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
||||
this.getModuleService().changeActiveState(this.secondaryWindow.getId(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setupMainWindow() {
|
||||
var bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Label_Welcome", ControlRenderingBo.class)
|
||||
.setCaption("Welcome to Exo's Game Engine Demo!")
|
||||
.setFontSize(48)
|
||||
@@ -61,14 +117,14 @@ public class DemoModule extends AbstractClientModule {
|
||||
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 60)
|
||||
.withPositionRelative(10, 100);
|
||||
this.mainWindow.putRenderingBo(bo);
|
||||
|
||||
|
||||
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Logo", DrawImageRenderingBo.class)
|
||||
.setResource(new StaticResource(List.of("renderer"), "logo.png"))
|
||||
.withDimensionAbsolute(256, 256)
|
||||
.setLayer(RenderingBoLayer.UI0_0)
|
||||
.withPositionRelative((this.mainWindow.getNormalizedDimension().getX() - 256) / 2, 200);
|
||||
this.mainWindow.putRenderingBo(bo);
|
||||
|
||||
|
||||
bo = this.renderingBoPool.acquire("DemoModule_MainWindow_Label_Start", ControlRenderingBo.class)
|
||||
.setCaption("Start")
|
||||
.setFontSize(96)
|
||||
@@ -78,39 +134,24 @@ public class DemoModule extends AbstractClientModule {
|
||||
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(9).multiply(7).substract(20).getX(), 120)
|
||||
.withPositionRelative(10, 600);
|
||||
this.mainWindow.putRenderingBo(bo);
|
||||
|
||||
this.eventService.register(UiControlEvent.class, this.getId(), this::onUiControlEvent);
|
||||
|
||||
this.getModuleService().changeActiveState(this.mainWindow.getId(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeactivate() {
|
||||
this.getModuleService().changeActiveState(this.mainWindow.getId(), false);
|
||||
|
||||
private void setupSecondaryWindow() {
|
||||
var bo = this.renderingBoPool.acquire("DemoModule_SecondaryWindow_Text", DrawFontRenderingBo.class)
|
||||
.setText("This is a message\n\nbla bla bla...\n\nHave a nice day!")
|
||||
.setSize(32)
|
||||
.setAlignment(HorizontalAlignment.CENTER)
|
||||
.withDimensionAbsolute(RendererControl.REFERENCE_RESOLUTION.divide(7).multiply(2).substract(20).getX(), 40)
|
||||
.withPositionRelative(10, 50);
|
||||
this.secondaryWindow.putRenderingBo(bo);
|
||||
|
||||
bo = this.renderingBoPool.acquire("DemoModule_SecondaryWindow_Button_Ok", ControlRenderingBo.class)
|
||||
.setCaption("OK")
|
||||
.setType(ButtonControl.class)
|
||||
.setVisible(true)
|
||||
.setEnabled(true)
|
||||
.withDimensionAbsolute(160, 60)
|
||||
.withPositionRelative(RendererControl.REFERENCE_RESOLUTION.divide(7).getX() - 80, 200);
|
||||
this.secondaryWindow.putRenderingBo(bo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShow() {
|
||||
this.getModuleService().changeDisplayState(this.mainWindow.getId(), true);
|
||||
this.audioController.playMusic(null, List.of(new StaticResource(List.of("audio"), "race.ogg")), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHide() {
|
||||
this.getModuleService().changeDisplayState(this.mainWindow.getId(), false);
|
||||
this.audioController.stopMusic();
|
||||
}
|
||||
|
||||
private void onUiControlEvent(final UiControlEvent event) {
|
||||
switch (event.getId()) {
|
||||
case "DemoModule_MainWindow_Label_Welcome" -> {
|
||||
this.audioController.play(new StaticResource(List.of("audio"), "alert0.ogg"));
|
||||
}
|
||||
|
||||
case "DemoModule_MainWindow_Label_Start" -> {
|
||||
this.audioController.play(new StaticResource(List.of("audio"), "alert2.ogg"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user