Search in sources :

Example 1 with RegisterSystem

use of org.terasology.engine.entitySystem.systems.RegisterSystem in project Terasology by MovingBlocks.

the class ComponentSystemManager method loadSystems.

public void loadSystems(ModuleEnvironment environment, NetworkMode netMode) {
    DisplayDevice display = context.get(DisplayDevice.class);
    boolean isHeadless = display.isHeadless();
    ListMultimap<Name, Class<?>> systemsByModule = ArrayListMultimap.create();
    for (Class<?> type : environment.getTypesAnnotatedWith(RegisterSystem.class)) {
        if (!ComponentSystem.class.isAssignableFrom(type)) {
            logger.error("Cannot load {}, must be a subclass of ComponentSystem", type.getSimpleName());
            continue;
        }
        Name moduleId = environment.getModuleProviding(type);
        RegisterSystem registerInfo = type.getAnnotation(RegisterSystem.class);
        if (registerInfo.value().isValidFor(netMode.isAuthority(), isHeadless) && areOptionalRequirementsContained(registerInfo, environment)) {
            systemsByModule.put(moduleId, type);
        }
    }
    for (Module module : environment.getModulesOrderedByDependencies()) {
        for (Class<?> system : systemsByModule.get(module.getId())) {
            String id = module.getId() + ":" + system.getSimpleName();
            logger.debug("Registering system {}", id);
            if (checkOptionalDependenciesPresent(system)) {
                tryToLoadSystem(system, id);
            } else {
                logger.warn("Skip system {} for loading - possibly missing optional dependencies", id);
            }
        }
    }
}
Also used : DisplayDevice(org.terasology.engine.core.subsystem.DisplayDevice) RegisterSystem(org.terasology.engine.entitySystem.systems.RegisterSystem) ComponentSystem(org.terasology.engine.entitySystem.systems.ComponentSystem) Module(org.terasology.gestalt.module.Module) Name(org.terasology.gestalt.naming.Name)

Aggregations

DisplayDevice (org.terasology.engine.core.subsystem.DisplayDevice)1 ComponentSystem (org.terasology.engine.entitySystem.systems.ComponentSystem)1 RegisterSystem (org.terasology.engine.entitySystem.systems.RegisterSystem)1 Module (org.terasology.gestalt.module.Module)1 Name (org.terasology.gestalt.naming.Name)1