feat(module): Enhance ModuleManager to integrate RendererWorkingSet and manage module display state
This commit is contained in:
@@ -11,6 +11,8 @@ public abstract class AbstractClientModule extends AbstractModule {
|
|||||||
|
|
||||||
final static int MODULE_PRIORITY_HIGH = 75;
|
final static int MODULE_PRIORITY_HIGH = 75;
|
||||||
|
|
||||||
|
private boolean displayed;
|
||||||
|
|
||||||
public AbstractClientModule() {
|
public AbstractClientModule() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -38,5 +40,13 @@ public abstract class AbstractClientModule extends AbstractModule {
|
|||||||
public void runUiPost() {
|
public void runUiPost() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDisplayed() {
|
||||||
|
return this.displayed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDisplayed(final boolean displayed) {
|
||||||
|
this.displayed = displayed;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,14 +7,16 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
|
|||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
|
import de.extio.game_engine.renderer.work.RendererWorkingSet;
|
||||||
|
|
||||||
@AutoConfiguration
|
@AutoConfiguration
|
||||||
@ConditionalOnProperty(name = "game-engine.module.enabled", havingValue = "true", matchIfMissing = true)
|
@ConditionalOnProperty(name = "game-engine.module.enabled", havingValue = "true", matchIfMissing = true)
|
||||||
public class ModuleManagerAutoConfiguration {
|
public class ModuleManagerAutoConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
ModuleManager moduleManager(final List<AbstractModule> initialModules) {
|
ModuleManager moduleManager(final List<AbstractModule> initialModules, final RendererWorkingSet rendererWorkingSet) {
|
||||||
return new ModuleManagerImpl(initialModules);
|
return new ModuleManagerImpl(initialModules, rendererWorkingSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
|
||||||
|
import de.extio.game_engine.renderer.work.RendererWorkingSet;
|
||||||
|
|
||||||
public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(ModuleManagerImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(ModuleManagerImpl.class);
|
||||||
@@ -17,6 +19,8 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
|||||||
private final List<AbstractModule> modulesInitial;
|
private final List<AbstractModule> modulesInitial;
|
||||||
|
|
||||||
private final List<AbstractModule> modulesAll = new ArrayList<>();
|
private final List<AbstractModule> modulesAll = new ArrayList<>();
|
||||||
|
|
||||||
|
private final RendererWorkingSet rendererWorkingSet;
|
||||||
|
|
||||||
private List<AbstractModule> modulesAllView = List.of();
|
private List<AbstractModule> modulesAllView = List.of();
|
||||||
|
|
||||||
@@ -32,8 +36,9 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
|||||||
|
|
||||||
private final Deque<List<AbstractClientModule>> lastVisibleStates = new ArrayDeque<>();
|
private final Deque<List<AbstractClientModule>> lastVisibleStates = new ArrayDeque<>();
|
||||||
|
|
||||||
public ModuleManagerImpl(final List<AbstractModule> initialModules) {
|
public ModuleManagerImpl(final List<AbstractModule> initialModules, final RendererWorkingSet rendererWorkingSet) {
|
||||||
this.modulesInitial = initialModules;
|
this.modulesInitial = initialModules;
|
||||||
|
this.rendererWorkingSet = rendererWorkingSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -105,6 +110,9 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
|||||||
this.modulesAllView = List.copyOf(this.modulesAll);
|
this.modulesAllView = List.copyOf(this.modulesAll);
|
||||||
|
|
||||||
this.invokeSafe(module, m -> m.onUnload());
|
this.invokeSafe(module, m -> m.onUnload());
|
||||||
|
if (module instanceof final AbstractClientModule clientModule) {
|
||||||
|
this.rendererWorkingSet.clear(clientModule.getClass());
|
||||||
|
}
|
||||||
|
|
||||||
LOGGER.debug("Unloaded module " + clazz.getName());
|
LOGGER.debug("Unloaded module " + clazz.getName());
|
||||||
}
|
}
|
||||||
@@ -143,6 +151,9 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
|||||||
.map(m -> (AbstractClientModule) m)
|
.map(m -> (AbstractClientModule) m)
|
||||||
.toList();
|
.toList();
|
||||||
this.modulesDisplayedClientModulesView = List.copyOf(this.modulesDisplayed);
|
this.modulesDisplayedClientModulesView = List.copyOf(this.modulesDisplayed);
|
||||||
|
if (module instanceof final AbstractClientModule clientModule) {
|
||||||
|
this.rendererWorkingSet.clear(clientModule.getClass());
|
||||||
|
}
|
||||||
|
|
||||||
LOGGER.debug("Deactivated " + clazz.getName());
|
LOGGER.debug("Deactivated " + clazz.getName());
|
||||||
}
|
}
|
||||||
@@ -199,9 +210,11 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager {
|
|||||||
final boolean doDisplay = display || clientModule.isAlwaysDisplay();
|
final boolean doDisplay = display || clientModule.isAlwaysDisplay();
|
||||||
if (doDisplay && !curDisplayed) {
|
if (doDisplay && !curDisplayed) {
|
||||||
this.modulesDisplayed.add(clientModule);
|
this.modulesDisplayed.add(clientModule);
|
||||||
|
clientModule.setDisplayed(true);
|
||||||
this.invokeSafe(clientModule, m -> ((AbstractClientModule) m).onShow());
|
this.invokeSafe(clientModule, m -> ((AbstractClientModule) m).onShow());
|
||||||
}
|
}
|
||||||
else if (!doDisplay && curDisplayed) {
|
else if (!doDisplay && curDisplayed) {
|
||||||
|
clientModule.setDisplayed(false);
|
||||||
this.modulesDisplayed.removeIf(mod -> clazz.isAssignableFrom(mod.getClass()));
|
this.modulesDisplayed.removeIf(mod -> clazz.isAssignableFrom(mod.getClass()));
|
||||||
this.invokeSafe(clientModule, m -> ((AbstractClientModule) m).onHide());
|
this.invokeSafe(clientModule, m -> ((AbstractClientModule) m).onHide());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package de.extio.game_engine.module;
|
package de.extio.game_engine.module;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -8,6 +9,8 @@ import java.util.List;
|
|||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import de.extio.game_engine.renderer.work.RendererWorkingSet;
|
||||||
|
|
||||||
public class ModuleManagerTest {
|
public class ModuleManagerTest {
|
||||||
|
|
||||||
private ModuleManagerImpl moduleManager;
|
private ModuleManagerImpl moduleManager;
|
||||||
@@ -25,7 +28,7 @@ public class ModuleManagerTest {
|
|||||||
initialModules.add(this.testModule);
|
initialModules.add(this.testModule);
|
||||||
initialModules.add(this.testClientModule);
|
initialModules.add(this.testClientModule);
|
||||||
|
|
||||||
this.moduleManager = new ModuleManagerImpl(initialModules);
|
this.moduleManager = new ModuleManagerImpl(initialModules, mock(RendererWorkingSet.class));
|
||||||
this.moduleManager.afterPropertiesSet();
|
this.moduleManager.afterPropertiesSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +41,7 @@ public class ModuleManagerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAfterPropertiesSet_EmptyModules() throws Exception {
|
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();
|
emptyManager.afterPropertiesSet();
|
||||||
|
|
||||||
assertTrue(emptyManager.getModulesAll().isEmpty());
|
assertTrue(emptyManager.getModulesAll().isEmpty());
|
||||||
@@ -46,7 +49,7 @@ public class ModuleManagerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAfterPropertiesSet_NullModules() throws Exception {
|
public void testAfterPropertiesSet_NullModules() throws Exception {
|
||||||
final ModuleManagerImpl nullManager = new ModuleManagerImpl(null);
|
final ModuleManagerImpl nullManager = new ModuleManagerImpl(null, mock(RendererWorkingSet.class));
|
||||||
nullManager.afterPropertiesSet();
|
nullManager.afterPropertiesSet();
|
||||||
|
|
||||||
assertTrue(nullManager.getModulesAll().isEmpty());
|
assertTrue(nullManager.getModulesAll().isEmpty());
|
||||||
|
|||||||
Reference in New Issue
Block a user