From d6335b6a9f74951c6ccd2c00391b015f7faa0e4b Mon Sep 17 00:00:00 2001 From: extio-de Date: Tue, 23 Dec 2025 14:48:58 +0100 Subject: [PATCH] feat(module): Enhance ModuleManager to integrate RendererWorkingSet and manage module display state --- .../game_engine/module/AbstractClientModule.java | 10 ++++++++++ .../module/ModuleManagerAutoConfiguration.java | 6 ++++-- .../game_engine/module/ModuleManagerImpl.java | 15 ++++++++++++++- .../game_engine/module/ModuleManagerTest.java | 9 ++++++--- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/extio/game_engine/module/AbstractClientModule.java b/src/main/java/de/extio/game_engine/module/AbstractClientModule.java index 85cc9f8..b24f185 100644 --- a/src/main/java/de/extio/game_engine/module/AbstractClientModule.java +++ b/src/main/java/de/extio/game_engine/module/AbstractClientModule.java @@ -11,6 +11,8 @@ public abstract class AbstractClientModule extends AbstractModule { final static int MODULE_PRIORITY_HIGH = 75; + private boolean displayed; + public AbstractClientModule() { } @@ -38,5 +40,13 @@ public abstract class AbstractClientModule extends AbstractModule { public void runUiPost() { } + + public boolean isDisplayed() { + return this.displayed; + } + + public void setDisplayed(final boolean displayed) { + this.displayed = displayed; + } } diff --git a/src/main/java/de/extio/game_engine/module/ModuleManagerAutoConfiguration.java b/src/main/java/de/extio/game_engine/module/ModuleManagerAutoConfiguration.java index e2f22a5..c130d93 100644 --- a/src/main/java/de/extio/game_engine/module/ModuleManagerAutoConfiguration.java +++ b/src/main/java/de/extio/game_engine/module/ModuleManagerAutoConfiguration.java @@ -7,14 +7,16 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import de.extio.game_engine.renderer.work.RendererWorkingSet; + @AutoConfiguration @ConditionalOnProperty(name = "game-engine.module.enabled", havingValue = "true", matchIfMissing = true) public class ModuleManagerAutoConfiguration { @Bean @ConditionalOnMissingBean - ModuleManager moduleManager(final List initialModules) { - return new ModuleManagerImpl(initialModules); + ModuleManager moduleManager(final List initialModules, final RendererWorkingSet rendererWorkingSet) { + return new ModuleManagerImpl(initialModules, rendererWorkingSet); } @Bean diff --git a/src/main/java/de/extio/game_engine/module/ModuleManagerImpl.java b/src/main/java/de/extio/game_engine/module/ModuleManagerImpl.java index b393034..4796011 100644 --- a/src/main/java/de/extio/game_engine/module/ModuleManagerImpl.java +++ b/src/main/java/de/extio/game_engine/module/ModuleManagerImpl.java @@ -10,6 +10,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; +import de.extio.game_engine.renderer.work.RendererWorkingSet; + public class ModuleManagerImpl implements InitializingBean, ModuleManager { private static final Logger LOGGER = LoggerFactory.getLogger(ModuleManagerImpl.class); @@ -17,6 +19,8 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager { private final List modulesInitial; private final List modulesAll = new ArrayList<>(); + + private final RendererWorkingSet rendererWorkingSet; private List modulesAllView = List.of(); @@ -32,8 +36,9 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager { private final Deque> lastVisibleStates = new ArrayDeque<>(); - public ModuleManagerImpl(final List initialModules) { + public ModuleManagerImpl(final List initialModules, final RendererWorkingSet rendererWorkingSet) { this.modulesInitial = initialModules; + this.rendererWorkingSet = rendererWorkingSet; } @Override @@ -105,6 +110,9 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager { this.modulesAllView = List.copyOf(this.modulesAll); this.invokeSafe(module, m -> m.onUnload()); + if (module instanceof final AbstractClientModule clientModule) { + this.rendererWorkingSet.clear(clientModule.getClass()); + } LOGGER.debug("Unloaded module " + clazz.getName()); } @@ -143,6 +151,9 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager { .map(m -> (AbstractClientModule) m) .toList(); this.modulesDisplayedClientModulesView = List.copyOf(this.modulesDisplayed); + if (module instanceof final AbstractClientModule clientModule) { + this.rendererWorkingSet.clear(clientModule.getClass()); + } LOGGER.debug("Deactivated " + clazz.getName()); } @@ -199,9 +210,11 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager { final boolean doDisplay = display || clientModule.isAlwaysDisplay(); if (doDisplay && !curDisplayed) { this.modulesDisplayed.add(clientModule); + clientModule.setDisplayed(true); this.invokeSafe(clientModule, m -> ((AbstractClientModule) m).onShow()); } else if (!doDisplay && curDisplayed) { + clientModule.setDisplayed(false); this.modulesDisplayed.removeIf(mod -> clazz.isAssignableFrom(mod.getClass())); this.invokeSafe(clientModule, m -> ((AbstractClientModule) m).onHide()); } diff --git a/src/test/java/de/extio/game_engine/module/ModuleManagerTest.java b/src/test/java/de/extio/game_engine/module/ModuleManagerTest.java index a853b12..8e22b66 100644 --- a/src/test/java/de/extio/game_engine/module/ModuleManagerTest.java +++ b/src/test/java/de/extio/game_engine/module/ModuleManagerTest.java @@ -1,6 +1,7 @@ package de.extio.game_engine.module; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; import java.util.ArrayList; import java.util.List; @@ -8,6 +9,8 @@ import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import de.extio.game_engine.renderer.work.RendererWorkingSet; + public class ModuleManagerTest { private ModuleManagerImpl moduleManager; @@ -25,7 +28,7 @@ public class ModuleManagerTest { initialModules.add(this.testModule); initialModules.add(this.testClientModule); - this.moduleManager = new ModuleManagerImpl(initialModules); + this.moduleManager = new ModuleManagerImpl(initialModules, mock(RendererWorkingSet.class)); this.moduleManager.afterPropertiesSet(); } @@ -38,7 +41,7 @@ public class ModuleManagerTest { @Test public void testAfterPropertiesSet_EmptyModules() throws Exception { - final ModuleManagerImpl emptyManager = new ModuleManagerImpl(List.of()); + final ModuleManagerImpl emptyManager = new ModuleManagerImpl(List.of(), mock(RendererWorkingSet.class)); emptyManager.afterPropertiesSet(); assertTrue(emptyManager.getModulesAll().isEmpty()); @@ -46,7 +49,7 @@ public class ModuleManagerTest { @Test public void testAfterPropertiesSet_NullModules() throws Exception { - final ModuleManagerImpl nullManager = new ModuleManagerImpl(null); + final ModuleManagerImpl nullManager = new ModuleManagerImpl(null, mock(RendererWorkingSet.class)); nullManager.afterPropertiesSet(); assertTrue(nullManager.getModulesAll().isEmpty());