feat(renderer): Enhance RendererWorkingSet and related classes to support filtering of displayed modules

This commit is contained in:
extio-de
2025-12-23 15:18:52 +01:00
parent d6335b6a9f
commit 02b0886aaa
7 changed files with 72 additions and 17 deletions

View File

@@ -239,7 +239,13 @@ public class ModuleManagerImpl implements InitializingBean, ModuleManager {
@Override
public boolean isDisplayed(final Class<? extends AbstractClientModule> clazz) {
return this.modulesDisplayed.stream().anyMatch(m -> clazz.isAssignableFrom(m.getClass()));
final var modules = this.modulesDisplayed;
for (int i = 0; i < modules.size(); i++) {
if (clazz.isAssignableFrom(this.modulesDisplayed.get(i).getClass())) {
return true;
}
}
return false;
}
@Override

View File

@@ -14,6 +14,7 @@ import org.springframework.context.annotation.Bean;
import de.extio.game_engine.event.EventService;
import de.extio.game_engine.keyboard.KeycodeRegistry;
import de.extio.game_engine.module.ModuleManager;
import de.extio.game_engine.renderer.model.RenderingBo;
import de.extio.game_engine.renderer.work.RendererWorkingSet;
import de.extio.game_engine.renderer.work.RendererWorkingSetImpl;
@@ -55,9 +56,10 @@ public class RendererAutoConfiguration {
final KeycodeRegistry keycodeRegistry,
final EventService eventService,
final StorageService storageService,
final RendererWorkingSet rendererWorkingSet) {
final RendererWorkingSet rendererWorkingSet,
final ModuleManager moduleManager) {
final var rendererData = new RendererData(applicationContext, renderer, rendererControl, renderingBoPool, keycodeRegistry, eventService, storageService, rendererWorkingSet);
final var rendererData = new RendererData(applicationContext, renderer, rendererControl, renderingBoPool, keycodeRegistry, eventService, storageService, rendererWorkingSet, moduleManager);
renderer.setRendererData(rendererData);
rendererControl.setRendererData(rendererData);
renderingBoPool.setRendererData(rendererData);

View File

@@ -7,6 +7,7 @@ import org.springframework.context.ApplicationContext;
import de.extio.game_engine.event.EventService;
import de.extio.game_engine.keyboard.KeycodeRegistry;
import de.extio.game_engine.module.ModuleManager;
import de.extio.game_engine.renderer.model.options.UiOptions;
import de.extio.game_engine.renderer.model.options.VideoOptions;
import de.extio.game_engine.renderer.work.RendererWorkingSet;
@@ -36,10 +37,12 @@ public class RendererData {
private final StorageService storageService;
private final RendererWorkingSet rendererWorkingSet;
private final ModuleManager moduleManager;
private RendererLoop rendererLoop;
public RendererData(final ApplicationContext applicationContext, final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, final KeycodeRegistry keycodeRegistry, final EventService eventService, final StorageService storageService, final RendererWorkingSet rendererWorkingSet) {
public RendererData(final ApplicationContext applicationContext, final Renderer renderer, final RendererControl rendererControl, final RenderingBoPool renderingBoPool, final KeycodeRegistry keycodeRegistry, final EventService eventService, final StorageService storageService, final RendererWorkingSet rendererWorkingSet, final ModuleManager moduleManager) {
this.applicationContext = applicationContext;
this.renderer = renderer;
this.rendererControl = rendererControl;
@@ -48,6 +51,7 @@ public class RendererData {
this.eventService = eventService;
this.storageService = storageService;
this.rendererWorkingSet = rendererWorkingSet;
this.moduleManager = moduleManager;
}
public ApplicationContext getApplicationContext() {
@@ -105,4 +109,8 @@ public class RendererData {
public RendererWorkingSet getRendererWorkingSet() {
return rendererWorkingSet;
}
public ModuleManager getModuleManager() {
return moduleManager;
}
}

View File

@@ -82,6 +82,10 @@ public class G2DRenderer implements Renderer {
public void show() {
try {
LOGGER.info("show()");
this.rendererData.getModuleManager().loadModule(G2DRendererModule.class);
this.rendererData.getModuleManager().changeActiveState(G2DRendererModule.class, true);
this.rendererData.getModuleManager().changeDisplayState(G2DRendererModule.class, true);
EventQueue.invokeAndWait(() -> {
this.rendererData.getRendererControl().applyVideoOptions();
@@ -155,7 +159,7 @@ public class G2DRenderer implements Renderer {
this.drawStatistics();
this.rendererData.getRendererWorkingSet().commit(G2DRendererModule.class, true);
this.rendererData.getRendererWorkingSet().getLiveSet(this.renderingBOs);
this.rendererData.getRendererWorkingSet().getLiveSet(this.renderingBOs, clientModuleClass -> this.rendererData.getModuleManager().isDisplayed(clientModuleClass));
this.renderingBOs.sort((bo0, bo1) -> bo0.getLayer().compareTo(bo1.getLayer()));
Graphics2D screenGraphics = null;
@@ -337,6 +341,6 @@ public class G2DRenderer implements Renderer {
this.rendererData = rendererData;
}
private static abstract class G2DRendererModule extends AbstractClientModule {
public static class G2DRendererModule extends AbstractClientModule {
}
}

View File

@@ -2,6 +2,7 @@ package de.extio.game_engine.renderer.work;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import de.extio.game_engine.module.AbstractClientModule;
import de.extio.game_engine.renderer.model.RenderingBo;
@@ -20,6 +21,6 @@ public interface RendererWorkingSet {
void clear(Class<? extends AbstractClientModule> producer);
void getLiveSet(List<RenderingBo> combinedLiveSet);
void getLiveSet(List<RenderingBo> combinedLiveSet, Predicate<Class<? extends AbstractClientModule>> filter);
}

View File

@@ -11,6 +11,7 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Predicate;
import de.extio.game_engine.module.AbstractClientModule;
import de.extio.game_engine.renderer.model.RenderingBo;
@@ -90,8 +91,12 @@ public class RendererWorkingSetImpl implements RendererWorkingSet {
}
@Override
public void getLiveSet(final List<RenderingBo> combinedLiveSet) {
this.workingSet.values().forEach(rendererWork -> combinedLiveSet.addAll(rendererWork.live().values()));
public void getLiveSet(final List<RenderingBo> combinedLiveSet, final Predicate<Class<? extends AbstractClientModule>> filter) {
this.workingSet.forEach((producer, rendererWork) -> {
if (filter == null || filter.test(producer)) {
combinedLiveSet.addAll(rendererWork.live().values());
}
});
}
private RendererWork getWorkingSetByProducer(final Class<? extends AbstractClientModule> producer) {