Search in sources :

Example 6 with GameManifest

use of org.terasology.engine.game.GameManifest in project Terasology by MovingBlocks.

the class StateHeadlessSetup method createGameManifest.

public GameManifest createGameManifest() {
    GameManifest gameManifest = new GameManifest();
    Config config = context.get(Config.class);
    ModuleManager moduleManager = context.get(ModuleManager.class);
    for (Name moduleName : config.getDefaultModSelection().listModules()) {
        Module module = moduleManager.getRegistry().getLatestModuleVersion(moduleName);
        if (module != null) {
            gameManifest.addModule(module.getId(), module.getVersion());
        } else {
            logger.warn("ModuleRegistry has no latest version for module {}", moduleName);
        }
    }
    WorldGenerationConfig worldGenConfig = config.getWorldGeneration();
    // If no valid default world generator set then try to find one - no option to pick one manually in headless
    if (!worldGenConfig.getDefaultGenerator().isValid()) {
        // find the first gameplay module that is available, it should have a preferred world gen
        for (Name moduleName : config.getDefaultModSelection().listModules()) {
            Module module = moduleManager.getRegistry().getLatestModuleVersion(moduleName);
            if (StandardModuleExtension.isGameplayModule(module)) {
                SimpleUri defaultWorldGenerator = StandardModuleExtension.getDefaultWorldGenerator(module);
                worldGenConfig.setDefaultGenerator(defaultWorldGenerator);
                break;
            }
        }
    }
    SimpleUri worldGeneratorUri = worldGenConfig.getDefaultGenerator();
    gameManifest.setTitle(worldGenConfig.getWorldTitle());
    gameManifest.setSeed(worldGenConfig.getDefaultSeed());
    WorldInfo worldInfo = new WorldInfo(TerasologyConstants.MAIN_WORLD, worldGenConfig.getWorldTitle(), gameManifest.getSeed(), (long) (WorldTime.DAY_LENGTH * WorldTime.NOON_OFFSET), worldGeneratorUri);
    gameManifest.addWorld(worldInfo);
    return gameManifest;
}
Also used : GameManifest(org.terasology.engine.game.GameManifest) WorldGenerationConfig(org.terasology.engine.config.WorldGenerationConfig) Config(org.terasology.engine.config.Config) SimpleUri(org.terasology.engine.core.SimpleUri) WorldInfo(org.terasology.engine.world.internal.WorldInfo) ModuleManager(org.terasology.engine.core.module.ModuleManager) Module(org.terasology.gestalt.module.Module) WorldGenerationConfig(org.terasology.engine.config.WorldGenerationConfig) Name(org.terasology.gestalt.naming.Name)

Example 7 with GameManifest

use of org.terasology.engine.game.GameManifest in project Terasology by MovingBlocks.

the class StateHeadlessSetup method init.

@Override
public void init(GameEngine gameEngine) {
    context = gameEngine.createChildContext();
    initEntityAndComponentManagers(true);
    createLocalPlayer(context);
    GameManifest gameManifest;
    List<GameInfo> savedGames = GameProvider.getSavedGames();
    if (savedGames.size() > 0) {
        gameManifest = savedGames.get(0).getManifest();
    } else {
        gameManifest = createGameManifest();
    }
    Config config = context.get(Config.class);
    WorldInfo worldInfo = gameManifest.getWorldInfo(TerasologyConstants.MAIN_WORLD);
    config.getUniverseConfig().addWorldManager(worldInfo);
    config.getUniverseConfig().setSpawnWorldTitle(worldInfo.getTitle());
    config.getUniverseConfig().setUniverseSeed(gameManifest.getSeed());
    gameEngine.changeState(new StateLoading(gameManifest, NetworkMode.LISTEN_SERVER));
}
Also used : GameInfo(org.terasology.engine.rendering.nui.layers.mainMenu.savedGames.GameInfo) GameManifest(org.terasology.engine.game.GameManifest) StateLoading(org.terasology.engine.core.modes.StateLoading) WorldGenerationConfig(org.terasology.engine.config.WorldGenerationConfig) Config(org.terasology.engine.config.Config) WorldInfo(org.terasology.engine.world.internal.WorldInfo)

Example 8 with GameManifest

use of org.terasology.engine.game.GameManifest in project Terasology by MovingBlocks.

the class ReadWriteStorageManager method addGameManifestToSaveTransaction.

private void addGameManifestToSaveTransaction(SaveTransactionBuilder saveTransactionBuilder) {
    BlockManager blockManager = CoreRegistry.get(BlockManager.class);
    UniverseConfig universeConfig = config.getUniverseConfig();
    Time time = CoreRegistry.get(Time.class);
    Game game = CoreRegistry.get(Game.class);
    GameManifest gameManifest = new GameManifest(game.getName(), game.getSeed(), time.getGameTimeInMs());
    for (Module module : CoreRegistry.get(ModuleManager.class).getEnvironment()) {
        gameManifest.addModule(module.getId(), module.getVersion());
    }
    List<String> registeredBlockFamilies = Lists.newArrayList();
    for (BlockFamily family : blockManager.listRegisteredBlockFamilies()) {
        registeredBlockFamilies.add(family.getURI().toString());
    }
    gameManifest.setRegisteredBlockFamilies(registeredBlockFamilies);
    gameManifest.setBlockIdMap(blockManager.getBlockIdMap());
    List<WorldInfo> worlds = universeConfig.getWorlds();
    for (WorldInfo worldInfo : worlds) {
        gameManifest.addWorld(worldInfo);
    }
    WorldGenerator worldGenerator = CoreRegistry.get(WorldGenerator.class);
    if (worldGenerator != null) {
        WorldConfigurator worldConfigurator = worldGenerator.getConfigurator();
        Map<String, Component> params = worldConfigurator.getProperties();
        gameManifest.setModuleConfigs(worldGenerator.getUri(), params);
    }
    saveTransactionBuilder.setGameManifest(gameManifest);
}
Also used : WorldGenerator(org.terasology.engine.world.generator.WorldGenerator) WorldConfigurator(org.terasology.engine.world.generator.WorldConfigurator) Time(org.terasology.engine.core.Time) UniverseConfig(org.terasology.engine.config.UniverseConfig) ModuleManager(org.terasology.engine.core.module.ModuleManager) Game(org.terasology.engine.game.Game) GameManifest(org.terasology.engine.game.GameManifest) BlockManager(org.terasology.engine.world.block.BlockManager) WorldInfo(org.terasology.engine.world.internal.WorldInfo) BlockFamily(org.terasology.engine.world.block.family.BlockFamily) Module(org.terasology.gestalt.module.Module) Component(org.terasology.gestalt.entitysystem.component.Component) LocationComponent(org.terasology.engine.logic.location.LocationComponent) ClientComponent(org.terasology.engine.network.ClientComponent)

Example 9 with GameManifest

use of org.terasology.engine.game.GameManifest in project Terasology by MovingBlocks.

the class AdvancedGameSetupScreen method initialise.

@Override
public void initialise() {
    setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation());
    remoteModuleRegistryUpdater = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat(new TargetLengthBasedClassNameAbbreviator(36).abbreviate(getClass().getName()) + "-%d").setDaemon(true).build()).submit(moduleManager.getInstallManager().updateRemoteRegistry());
    final UIText seed = find("seed", UIText.class);
    if (seed != null) {
        seed.setText(new FastRandom().nextString(32));
    }
    // skip loading module configs, limit shown modules to locally present ones
    selectModulesConfig = new SelectModulesConfig();
    selectModulesConfig.getSelectedStandardModuleExtensions().forEach(selectModulesConfig::unselectStandardModuleExtension);
    selectModulesConfig.toggleIsLocalOnlySelected();
    dependencyResolver = new DependencyResolver(moduleManager.getRegistry());
    modulesLookup = Maps.newHashMap();
    sortedModules = Lists.newArrayList();
    for (Name moduleId : moduleManager.getRegistry().getModuleIds()) {
        Module latestVersion = moduleManager.getRegistry().getLatestModuleVersion(moduleId);
        ModuleSelectionInfo info = ModuleSelectionInfo.local(latestVersion);
        modulesLookup.put(info.getMetadata().getId(), info);
        sortedModules.add(info);
    }
    sortedModules.sort(moduleInfoComparator);
    allSortedModules = new ArrayList<>(sortedModules);
    final UIList<ModuleSelectionInfo> moduleList = find("moduleList", UIList.class);
    if (moduleList != null) {
        moduleList.setList(sortedModules);
        moduleList.setItemRenderer(new AbstractItemRenderer<ModuleSelectionInfo>() {

            String getString(ModuleSelectionInfo value) {
                return value.getMetadata().getDisplayName().toString();
            }

            @Override
            public void draw(ModuleSelectionInfo value, Canvas canvas) {
                if (isSelectedGameplayModule(value) && value.isValidToSelect()) {
                    canvas.setMode("gameplay");
                } else if (value.isSelected() && value.isExplicitSelection()) {
                    canvas.setMode("enabled");
                } else if (value.isSelected()) {
                    canvas.setMode("dependency");
                } else if (!value.isPresent()) {
                    canvas.setMode("disabled");
                } else if (!value.isValidToSelect()) {
                    canvas.setMode("invalid");
                } else {
                    canvas.setMode("available");
                }
                canvas.drawText(getString(value), canvas.getRegion());
            }

            @Override
            public Vector2i getPreferredSize(ModuleSelectionInfo value, Canvas canvas) {
                String text = getString(value);
                return new Vector2i(canvas.getCurrentStyle().getFont().getWidth(text), canvas.getCurrentStyle().getFont().getLineHeight());
            }
        });
        // ItemActivateEventListener is triggered by double clicking
        moduleList.subscribe((widget, item) -> {
            if (item.isSelected() && moduleList.getSelection().isExplicitSelection()) {
                deselect(item);
            } else if (item.isValidToSelect()) {
                select(item);
            }
        });
        moduleSearch = find("moduleSearch", ResettableUIText.class);
        if (moduleSearch != null) {
            moduleSearch.subscribe((TextChangeEventListener) (oldText, newText) -> filterModules());
        }
        final Binding<ModuleMetadata> moduleInfoBinding = new ReadOnlyBinding<ModuleMetadata>() {

            @Override
            public ModuleMetadata get() {
                if (moduleList.getSelection() != null) {
                    return moduleList.getSelection().getMetadata();
                }
                return null;
            }
        };
        UILabel name = find("name", UILabel.class);
        if (name != null) {
            name.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    if (moduleInfoBinding.get() != null) {
                        return moduleInfoBinding.get().getDisplayName().toString();
                    }
                    return "";
                }
            });
        }
        UILabel installedVersion = find("installedVersion", UILabel.class);
        if (installedVersion != null) {
            installedVersion.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo sel = moduleList.getSelection();
                    if (sel == null) {
                        return "";
                    }
                    return sel.isPresent() ? sel.getMetadata().getVersion().toString() : translationSystem.translate("${engine:menu#module-version-installed-none}");
                }
            });
        }
        UILabel onlineVersion = find("onlineVersion", UILabel.class);
        if (onlineVersion != null) {
            onlineVersion.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo sel = moduleList.getSelection();
                    if (sel == null) {
                        return "";
                    }
                    return (sel.getOnlineVersion() != null) ? sel.getOnlineVersion().getVersion().toString() : "none";
                }
            });
        }
        UILabel description = find("description", UILabel.class);
        if (description != null) {
            description.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleMetadata moduleMetadata = moduleInfoBinding.get();
                    if (moduleMetadata != null) {
                        StringBuilder dependenciesNames;
                        List<DependencyInfo> dependencies = moduleMetadata.getDependencies();
                        if (dependencies != null && !dependencies.isEmpty()) {
                            dependenciesNames = new StringBuilder(translationSystem.translate("${engine:menu#module-dependencies-exist}") + ":" + '\n');
                            for (DependencyInfo dependency : dependencies) {
                                dependenciesNames.append("   ").append(dependency.getId().toString()).append('\n');
                            }
                        } else {
                            dependenciesNames = new StringBuilder(translationSystem.translate("${engine:menu#module-dependencies-empty}") + ".");
                        }
                        return moduleMetadata.getDescription().toString() + '\n' + '\n' + dependenciesNames;
                    }
                    return "";
                }
            });
        }
        UILabel status = find("status", UILabel.class);
        if (status != null) {
            status.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    if (info != null) {
                        if (isSelectedGameplayModule(info)) {
                            return translationSystem.translate("${engine:menu#module-status-activegameplay}");
                        } else if (info.isSelected() && info.isExplicitSelection()) {
                            return translationSystem.translate("${engine:menu#module-status-activated}");
                        } else if (info.isSelected()) {
                            return translationSystem.translate("${engine:menu#module-status-dependency}");
                        } else if (!info.isPresent()) {
                            return translationSystem.translate("${engine:menu#module-status-notpresent}");
                        } else if (info.isValidToSelect()) {
                            return translationSystem.translate("${engine:menu#module-status-available}");
                        } else {
                            return translationSystem.translate("${engine:menu#module-status-error}");
                        }
                    }
                    return "";
                }
            });
        }
        UIButton toggleActivate = find("toggleActivation", UIButton.class);
        if (toggleActivate != null) {
            toggleActivate.subscribe(button -> {
                ModuleSelectionInfo info = moduleList.getSelection();
                if (info != null) {
                    // Toggle
                    if (info.isSelected() && info.isExplicitSelection()) {
                        deselect(info);
                    } else if (info.isValidToSelect()) {
                        select(info);
                    }
                }
            });
            toggleActivate.bindEnabled(new ReadOnlyBinding<Boolean>() {

                @Override
                public Boolean get() {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    return info != null && info.isPresent() && !isSelectedGameplayModule(info) && (info.isSelected() || info.isValidToSelect());
                }
            });
            toggleActivate.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    if (moduleList.getSelection() != null) {
                        if (moduleList.getSelection().isExplicitSelection()) {
                            return translationSystem.translate("${engine:menu#deactivate-module}");
                        } else {
                            return translationSystem.translate("${engine:menu#activate-module}");
                        }
                    }
                    // button should be disabled
                    return translationSystem.translate("${engine:menu#activate-module}");
                }
            });
        }
        UIButton downloadButton = find("download", UIButton.class);
        if (downloadButton != null) {
            downloadButton.subscribe(button -> {
                if (moduleList.getSelection() != null) {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    startDownloadingNewestModulesRequiredFor(info);
                }
            });
            downloadButton.bindEnabled(new ReadOnlyBinding<Boolean>() {

                @Override
                public Boolean get() {
                    ModuleSelectionInfo selection = moduleList.getSelection();
                    if (null == selection) {
                        return false;
                    }
                    return selection.getOnlineVersion() != null;
                }
            });
            downloadButton.bindText(new ReadOnlyBinding<String>() {

                @Override
                public String get() {
                    ModuleSelectionInfo info = moduleList.getSelection();
                    if (info != null && !info.isPresent()) {
                        return translationSystem.translate("${engine:menu#download-module}");
                    } else {
                        return translationSystem.translate("${engine:menu#update-module}");
                    }
                }
            });
        }
        UIButton disableAll = find("disableAll", UIButton.class);
        if (disableAll != null) {
            disableAll.subscribe(button -> sortedModules.stream().filter(info -> info.isSelected() && info.isExplicitSelection()).forEach(this::deselect));
        }
        for (CheckboxAssociationEnum checkboxAssociation : CheckboxAssociationEnum.values()) {
            String checkboxName = checkboxAssociation.getCheckboxName();
            StandardModuleExtension standardModuleExtension = checkboxAssociation.getStandardModuleExtension();
            UICheckbox checkBox = find(checkboxName, UICheckbox.class);
            if (null != checkBox) {
                checkBox.setChecked(selectModulesConfig.isStandardModuleExtensionSelected(standardModuleExtension));
                checkBox.subscribe(e -> {
                    selectModulesConfig.toggleStandardModuleExtensionSelected(standardModuleExtension);
                    checkBox.setChecked(selectModulesConfig.isStandardModuleExtensionSelected(standardModuleExtension));
                    filterModules();
                });
            } else {
                logger.error("Unable to find checkbox named " + checkboxName + " in " + ASSET_URI.toString());
                selectModulesConfig.unselectStandardModuleExtension(standardModuleExtension);
            }
        }
        UICheckbox localOnlyCheckbox = find("localOnlyCheckbox", UICheckbox.class);
        localOnlyCheckbox.setChecked(selectModulesConfig.isLocalOnlySelected());
        localOnlyCheckbox.subscribe(e -> {
            selectModulesConfig.toggleIsLocalOnlySelected();
            localOnlyCheckbox.setChecked(selectModulesConfig.isLocalOnlySelected());
            filterModules();
        });
        UICheckbox uncategorizedCheckbox = find("uncategorizedCheckbox", UICheckbox.class);
        uncategorizedCheckbox.setChecked(selectModulesConfig.isUncategorizedSelected());
        uncategorizedCheckbox.subscribe(e -> {
            selectModulesConfig.toggleUncategorizedSelected();
            boolean isUncategorizedSelected = selectModulesConfig.isUncategorizedSelected();
            uncategorizedCheckbox.setChecked(isUncategorizedSelected);
            for (CheckboxAssociationEnum checkboxAssociation : CheckboxAssociationEnum.values()) {
                final String checkboxName = checkboxAssociation.getCheckboxName();
                UICheckbox checkbox = find(checkboxName, UICheckbox.class);
                if (null != checkbox) {
                    checkbox.setEnabled(!isUncategorizedSelected);
                }
            }
            filterModules();
        });
        UIButton resetAdvancedFilters = find("resetFilters", UIButton.class);
        if (resetAdvancedFilters != null) {
            // on clicking 'reset category filters' button, uncheck all advanced filters
            localOnlyCheckbox.setChecked(selectModulesConfig.isLocalOnlySelected());
            uncategorizedCheckbox.setChecked(selectModulesConfig.isUncategorizedSelected());
            resetAdvancedFilters.subscribe(button -> {
                if (selectModulesConfig.isLocalOnlySelected()) {
                    selectModulesConfig.toggleIsLocalOnlySelected();
                    localOnlyCheckbox.setChecked(selectModulesConfig.isLocalOnlySelected());
                }
                if (selectModulesConfig.isUncategorizedSelected()) {
                    selectModulesConfig.toggleUncategorizedSelected();
                    uncategorizedCheckbox.setChecked(selectModulesConfig.isUncategorizedSelected());
                }
                filterModules();
            });
            for (CheckboxAssociationEnum checkboxAssociation : CheckboxAssociationEnum.values()) {
                StandardModuleExtension standardModuleExtension = checkboxAssociation.getStandardModuleExtension();
                String checkboxName = checkboxAssociation.getCheckboxName();
                UICheckbox checkbox = find(checkboxName, UICheckbox.class);
                if (null != checkbox) {
                    checkbox.setChecked(selectModulesConfig.isStandardModuleExtensionSelected(standardModuleExtension));
                    resetAdvancedFilters.subscribe(button -> {
                        checkbox.setEnabled(!selectModulesConfig.isUncategorizedSelected());
                        if (selectModulesConfig.isStandardModuleExtensionSelected(standardModuleExtension)) {
                            selectModulesConfig.toggleStandardModuleExtensionSelected(standardModuleExtension);
                            checkbox.setChecked(selectModulesConfig.isStandardModuleExtensionSelected(standardModuleExtension));
                        }
                        filterModules();
                    });
                }
            }
            final UIButton moduleDetails = find("moduleDetails", UIButton.class);
            if (moduleDetails != null) {
                moduleDetails.bindEnabled(new ReadOnlyBinding<Boolean>() {

                    @Override
                    public Boolean get() {
                        return moduleInfoBinding.get() != null;
                    }
                });
                moduleDetails.subscribe(b -> {
                    final ModuleDetailsScreen moduleDetailsScreen = getManager().createScreen(ModuleDetailsScreen.ASSET_URI, ModuleDetailsScreen.class);
                    final Collection<Module> modules = sortedModules.stream().map(ModuleSelectionInfo::getMetadata).filter(Objects::nonNull).map(meta -> moduleManager.getRegistry().getLatestModuleVersion(meta.getId())).filter(Objects::nonNull).collect(Collectors.toList());
                    moduleDetailsScreen.setModules(modules);
                    moduleDetailsScreen.setSelectedModule(modules.stream().filter(module -> module.getId().equals(moduleInfoBinding.get().getId())).findFirst().orElse(null));
                    getManager().pushScreen(moduleDetailsScreen);
                });
            }
        }
    }
    WidgetUtil.trySubscribe(this, "createWorld", button -> {
        final UniverseSetupScreen universeSetupScreen = getManager().createScreen(UniverseSetupScreen.ASSET_URI, UniverseSetupScreen.class);
        universeWrapper.setSeed(seed.getText());
        saveConfiguration();
        universeSetupScreen.setEnvironment(universeWrapper);
        triggerForwardAnimation(universeSetupScreen);
    });
    WidgetUtil.trySubscribe(this, "play", button -> {
        if (StringUtils.isBlank(seed.getText())) {
            getManager().createScreen(MessagePopup.ASSET_URI, MessagePopup.class).setMessage("Error", "Game seed cannot be empty!");
        } else {
            universeWrapper.setSeed(seed.getText());
            saveConfiguration();
            final GameManifest gameManifest = GameManifestProvider.createGameManifest(universeWrapper, moduleManager, config);
            if (gameManifest != null) {
                gameEngine.changeState(new StateLoading(gameManifest, (universeWrapper.getLoadingAsServer()) ? NetworkMode.DEDICATED_SERVER : NetworkMode.NONE));
            } else {
                getManager().createScreen(MessagePopup.ASSET_URI, MessagePopup.class).setMessage("Error", "Can't create new game!");
            }
        }
    });
    WidgetUtil.trySubscribe(this, "return", button -> triggerBackAnimation());
    WidgetUtil.trySubscribe(this, "mainMenu", button -> {
        getManager().pushScreen("engine:mainMenuScreen");
    });
}
Also used : ModuleInstaller(org.terasology.engine.core.module.ModuleInstaller) WorldGeneratorManager(org.terasology.engine.world.generator.internal.WorldGeneratorManager) In(org.terasology.engine.registry.In) LoggerFactory(org.slf4j.LoggerFactory) WidgetUtil(org.terasology.nui.WidgetUtil) ModuleMetadata(org.terasology.gestalt.module.ModuleMetadata) ResolutionResult(org.terasology.gestalt.module.dependencyresolution.ResolutionResult) Future(java.util.concurrent.Future) Map(java.util.Map) AbstractItemRenderer(org.terasology.nui.itemRendering.AbstractItemRenderer) DependencyInfo(org.terasology.gestalt.module.dependencyresolution.DependencyInfo) Canvas(org.terasology.nui.Canvas) ResettableUIText(org.terasology.nui.widgets.ResettableUIText) StateLoading(org.terasology.engine.core.modes.StateLoading) ReadOnlyBinding(org.terasology.nui.databinding.ReadOnlyBinding) TranslationSystem(org.terasology.engine.i18n.TranslationSystem) Binding(org.terasology.nui.databinding.Binding) ImmutableSet(com.google.common.collect.ImmutableSet) StringUtils(org.codehaus.plexus.util.StringUtils) GameEngine(org.terasology.engine.core.GameEngine) CancellationException(java.util.concurrent.CancellationException) Module(org.terasology.gestalt.module.Module) Collection(java.util.Collection) UniverseWrapper(org.terasology.engine.rendering.nui.layers.mainMenu.UniverseWrapper) WaitPopup(org.terasology.engine.rendering.nui.layers.mainMenu.WaitPopup) Set(java.util.Set) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) SimpleUri(org.terasology.engine.core.SimpleUri) DependencyResolver(org.terasology.gestalt.module.dependencyresolution.DependencyResolver) Objects(java.util.Objects) UIText(org.terasology.nui.widgets.UIText) List(java.util.List) Vector2i(org.joml.Vector2i) UIList(org.terasology.nui.widgets.UIList) Name(org.terasology.gestalt.naming.Name) ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) MenuAnimationSystems(org.terasology.engine.rendering.nui.animation.MenuAnimationSystems) TerasologyConstants(org.terasology.engine.core.TerasologyConstants) ModuleManager(org.terasology.engine.core.module.ModuleManager) ModuleDetailsScreen(org.terasology.engine.rendering.nui.layers.mainMenu.moduleDetailsScreen.ModuleDetailsScreen) NetworkMode(org.terasology.engine.network.NetworkMode) TargetLengthBasedClassNameAbbreviator(ch.qos.logback.classic.pattern.TargetLengthBasedClassNameAbbreviator) DependencyResolutionFailedException(org.terasology.engine.core.module.DependencyResolutionFailedException) FastRandom(org.terasology.engine.utilities.random.FastRandom) ArrayList(java.util.ArrayList) StandardModuleExtension(org.terasology.engine.core.module.StandardModuleExtension) ResourceUrn(org.terasology.gestalt.assets.ResourceUrn) GameManifest(org.terasology.engine.game.GameManifest) Lists(com.google.common.collect.Lists) ConfirmPopup(org.terasology.engine.rendering.nui.layers.mainMenu.ConfirmPopup) GameManifestProvider(org.terasology.engine.rendering.nui.layers.mainMenu.GameManifestProvider) MessagePopup(org.terasology.engine.rendering.nui.layers.mainMenu.MessagePopup) ModuleConfig(org.terasology.engine.config.ModuleConfig) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) UILabel(org.terasology.nui.widgets.UILabel) SelectModulesConfig(org.terasology.engine.config.SelectModulesConfig) Maps(com.google.common.collect.Maps) CoreScreenLayer(org.terasology.engine.rendering.nui.CoreScreenLayer) UICheckbox(org.terasology.nui.widgets.UICheckbox) ExecutionException(java.util.concurrent.ExecutionException) Config(org.terasology.engine.config.Config) TextChangeEventListener(org.terasology.nui.widgets.TextChangeEventListener) UIButton(org.terasology.nui.widgets.UIButton) UniverseSetupScreen(org.terasology.engine.rendering.nui.layers.mainMenu.UniverseSetupScreen) Comparator(java.util.Comparator) MessagePopup(org.terasology.engine.rendering.nui.layers.mainMenu.MessagePopup) Name(org.terasology.gestalt.naming.Name) SelectModulesConfig(org.terasology.engine.config.SelectModulesConfig) ModuleDetailsScreen(org.terasology.engine.rendering.nui.layers.mainMenu.moduleDetailsScreen.ModuleDetailsScreen) UIButton(org.terasology.nui.widgets.UIButton) ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) ResettableUIText(org.terasology.nui.widgets.ResettableUIText) UIText(org.terasology.nui.widgets.UIText) List(java.util.List) UIList(org.terasology.nui.widgets.UIList) ArrayList(java.util.ArrayList) Vector2i(org.joml.Vector2i) StandardModuleExtension(org.terasology.engine.core.module.StandardModuleExtension) UILabel(org.terasology.nui.widgets.UILabel) UniverseSetupScreen(org.terasology.engine.rendering.nui.layers.mainMenu.UniverseSetupScreen) StateLoading(org.terasology.engine.core.modes.StateLoading) ReadOnlyBinding(org.terasology.nui.databinding.ReadOnlyBinding) Canvas(org.terasology.nui.Canvas) ModuleMetadata(org.terasology.gestalt.module.ModuleMetadata) FastRandom(org.terasology.engine.utilities.random.FastRandom) UICheckbox(org.terasology.nui.widgets.UICheckbox) TargetLengthBasedClassNameAbbreviator(ch.qos.logback.classic.pattern.TargetLengthBasedClassNameAbbreviator) DependencyInfo(org.terasology.gestalt.module.dependencyresolution.DependencyInfo) DependencyResolver(org.terasology.gestalt.module.dependencyresolution.DependencyResolver) ResettableUIText(org.terasology.nui.widgets.ResettableUIText) GameManifest(org.terasology.engine.game.GameManifest) Module(org.terasology.gestalt.module.Module)

Example 10 with GameManifest

use of org.terasology.engine.game.GameManifest in project Terasology by MovingBlocks.

the class NewGameScreen method initialise.

@Override
public void initialise() {
    setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation());
    UILabel gameTypeTitle = find("gameTypeTitle", UILabel.class);
    if (gameTypeTitle != null) {
        gameTypeTitle.bindText(new ReadOnlyBinding<String>() {

            @Override
            public String get() {
                if (isLoadingAsServer()) {
                    return translationSystem.translate("${engine:menu#select-multiplayer-game-sub-title}");
                } else {
                    return translationSystem.translate("${engine:menu#select-singleplayer-game-sub-title}");
                }
            }
        });
    }
    final UIText gameName = find("gameName", UIText.class);
    setGameName(gameName);
    final UIDropdownScrollable<Module> gameplay = find("gameplay", UIDropdownScrollable.class);
    gameplay.setOptions(getGameplayModules());
    gameplay.setVisibleOptions(5);
    gameplay.bindSelection(new Binding<Module>() {

        Module selected;

        @Override
        public Module get() {
            return selected;
        }

        @Override
        public void set(Module value) {
            setSelectedGameplayModule(value);
            selected = value;
        }
    });
    gameplay.setOptionRenderer(new StringTextRenderer<Module>() {

        @Override
        public String getString(Module value) {
            return value.getMetadata().getDisplayName().value();
        }

        @Override
        public void draw(Module value, Canvas canvas) {
            canvas.getCurrentStyle().setTextColor(validateModuleDependencies(value.getId()) ? Color.WHITE : Color.RED);
            super.draw(value, canvas);
            canvas.getCurrentStyle().setTextColor(Color.WHITE);
        }
    });
    UILabel gameplayDescription = find("gameplayDescription", UILabel.class);
    gameplayDescription.bindText(new ReadOnlyBinding<String>() {

        @Override
        public String get() {
            Module selectedModule = gameplay.getSelection();
            if (selectedModule != null) {
                return selectedModule.getMetadata().getDescription().value();
            } else {
                return "";
            }
        }
    });
    AdvancedGameSetupScreen advancedSetupGameScreen = getManager().createScreen(AdvancedGameSetupScreen.ASSET_URI, AdvancedGameSetupScreen.class);
    WidgetUtil.trySubscribe(this, "advancedSetup", button -> {
        universeWrapper.setGameName(gameName.getText());
        advancedSetupGameScreen.setUniverseWrapper(universeWrapper);
        triggerForwardAnimation(advancedSetupGameScreen);
    });
    WidgetUtil.trySubscribe(this, "play", button -> {
        if (gameName.getText().isEmpty()) {
            universeWrapper.setGameName(GameProvider.getNextGameName());
        }
        universeWrapper.setGameName(GameProvider.getNextGameName(gameName.getText()));
        if (gameplay.getOptions().isEmpty()) {
            logger.error("No gameplay modules present");
            MessagePopup errorPopup = getManager().pushScreen(MessagePopup.ASSET_URI, MessagePopup.class);
            errorPopup.setMessage("Error", "Can't create new game without modules!");
        }
        GameManifest gameManifest = GameManifestProvider.createGameManifest(universeWrapper, moduleManager, config);
        if (gameManifest != null) {
            gameEngine.changeState(new StateLoading(gameManifest, (isLoadingAsServer()) ? NetworkMode.DEDICATED_SERVER : NetworkMode.NONE));
        } else {
            MessagePopup errorPopup = getManager().createScreen(MessagePopup.ASSET_URI, MessagePopup.class);
            errorPopup.setMessage("Error", "Can't create new game!");
        }
    });
    WidgetUtil.trySubscribe(this, "close", button -> {
        if (GameProvider.isSavesFolderEmpty()) {
            // skip selectGameScreen and get back directly to main screen
            getManager().pushScreen("engine:mainMenuScreen");
        } else {
            triggerBackAnimation();
        }
    });
    WidgetUtil.trySubscribe(this, "mainMenu", button -> {
        getManager().pushScreen("engine:mainMenuScreen");
    });
}
Also used : UILabel(org.terasology.nui.widgets.UILabel) StateLoading(org.terasology.engine.core.modes.StateLoading) Canvas(org.terasology.nui.Canvas) AdvancedGameSetupScreen(org.terasology.engine.rendering.nui.layers.mainMenu.advancedGameSetupScreen.AdvancedGameSetupScreen) GameManifest(org.terasology.engine.game.GameManifest) UIText(org.terasology.nui.widgets.UIText) Module(org.terasology.gestalt.module.Module)

Aggregations

GameManifest (org.terasology.engine.game.GameManifest)13 StateLoading (org.terasology.engine.core.modes.StateLoading)8 WorldInfo (org.terasology.engine.world.internal.WorldInfo)5 Module (org.terasology.gestalt.module.Module)5 GameEngine (org.terasology.engine.core.GameEngine)4 SimpleUri (org.terasology.engine.core.SimpleUri)4 IOException (java.io.IOException)3 Config (org.terasology.engine.config.Config)3 ModuleManager (org.terasology.engine.core.module.ModuleManager)3 Path (java.nio.file.Path)2 Map (java.util.Map)2 WorldGenerationConfig (org.terasology.engine.config.WorldGenerationConfig)2 Name (org.terasology.gestalt.naming.Name)2 Canvas (org.terasology.nui.Canvas)2 UILabel (org.terasology.nui.widgets.UILabel)2 UIText (org.terasology.nui.widgets.UIText)2 TargetLengthBasedClassNameAbbreviator (ch.qos.logback.classic.pattern.TargetLengthBasedClassNameAbbreviator)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1