diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 00000000000..7e340a776a6 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java deleted file mode 100644 index 824afce8015..00000000000 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java +++ /dev/null @@ -1,377 +0,0 @@ -// Copyright 2021 The Terasology Foundation -// SPDX-License-Identifier: Apache-2.0 -package org.terasology.engine.rendering.nui.layers.mainMenu; - -import com.google.common.collect.Lists; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.terasology.engine.config.Config; -import org.terasology.engine.context.Context; -import org.terasology.engine.context.internal.ContextImpl; -import org.terasology.engine.core.SimpleUri; -import org.terasology.engine.core.bootstrap.EnvironmentSwitchHandler; -import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.metadata.ComponentLibrary; -import org.terasology.engine.registry.CoreRegistry; -import org.terasology.engine.registry.In; -import org.terasology.engine.rendering.assets.texture.Texture; -import org.terasology.engine.rendering.assets.texture.TextureData; -import org.terasology.engine.rendering.nui.CoreScreenLayer; -import org.terasology.engine.rendering.nui.NUIManager; -import org.terasology.engine.rendering.nui.animation.MenuAnimationSystems; -import org.terasology.engine.rendering.nui.layers.mainMenu.preview.FacetLayerPreview; -import org.terasology.engine.rendering.nui.layers.mainMenu.preview.PreviewGenerator; -import org.terasology.engine.utilities.Assets; -import org.terasology.engine.world.generator.WorldConfigurator; -import org.terasology.engine.world.generator.WorldGenerator; -import org.terasology.engine.world.generator.internal.WorldGeneratorManager; -import org.terasology.engine.world.generator.plugin.TempWorldGeneratorPluginLibrary; -import org.terasology.engine.world.generator.plugin.WorldGeneratorPluginLibrary; -import org.terasology.engine.world.zones.Zone; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; -import org.terasology.gestalt.entitysystem.component.Component; -import org.terasology.gestalt.module.ModuleEnvironment; -import org.terasology.gestalt.module.dependencyresolution.DependencyResolver; -import org.terasology.gestalt.module.dependencyresolution.ResolutionResult; -import org.terasology.gestalt.module.exceptions.UnresolvedDependencyException; -import org.terasology.math.TeraMath; -import org.terasology.nui.WidgetUtil; -import org.terasology.nui.databinding.Binding; -import org.terasology.nui.layouts.PropertyLayout; -import org.terasology.nui.properties.OneOfProviderFactory; -import org.terasology.nui.properties.Property; -import org.terasology.nui.properties.PropertyOrdering; -import org.terasology.nui.properties.PropertyProvider; -import org.terasology.nui.widgets.UIButton; -import org.terasology.nui.widgets.UIDropdown; -import org.terasology.nui.widgets.UIImage; -import org.terasology.nui.widgets.UISlider; -import org.terasology.nui.widgets.UIText; -import org.terasology.reflection.metadata.FieldMetadata; -import org.terasology.reflection.reflect.ReflectFactory; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.Callable; -import java.util.stream.Collectors; - -/** - * Shows a preview of the generated world and provides some - * configuration options to tweak the generation process. - */ -public class PreviewWorldScreen extends CoreScreenLayer { - - public static final ResourceUrn ASSET_URI = new ResourceUrn("engine:previewWorldScreen"); - - private static final Logger logger = LoggerFactory.getLogger(PreviewWorldScreen.class); - - @In - private ModuleManager moduleManager; - - @In - private ModuleAwareAssetTypeManager assetTypeManager; - - @In - private WorldGeneratorManager worldGeneratorManager; - - @In - private Config config; - - @In - private Context context; - - private WorldGenerator worldGenerator; - - private UIImage previewImage; - private UISlider zoomSlider; - private UIDropdown zoneSelector; - private UIButton applyButton; - - private UIText seed; - - private PreviewGenerator previewGen; - - - private Context subContext; - private ModuleEnvironment environment; - - private Texture texture; - - private boolean triggerUpdate; - private String targetZone = "Surface"; - - public PreviewWorldScreen() { - } - - public void setEnvironment() throws Exception { - - // TODO: pass world gen and module list directly rather than using the config - SimpleUri worldGenUri = config.getWorldGeneration().getDefaultGenerator(); - - DependencyResolver resolver = new DependencyResolver(moduleManager.getRegistry()); - ResolutionResult result = resolver.resolve(config.getDefaultModSelection().listModules()); - if (result.isSuccess()) { - subContext = new ContextImpl(context); - CoreRegistry.setContext(subContext); - environment = moduleManager.loadEnvironment(result.getModules(), false); - subContext.put(WorldGeneratorPluginLibrary.class, new TempWorldGeneratorPluginLibrary(environment, subContext)); - EnvironmentSwitchHandler environmentSwitchHandler = context.get(EnvironmentSwitchHandler.class); - environmentSwitchHandler.handleSwitchToPreviewEnvironment(subContext, environment); - genTexture(); - - worldGenerator = WorldGeneratorManager.createWorldGenerator(worldGenUri, subContext, environment); - worldGenerator.setWorldSeed(seed.getText()); - - List previewZones = Lists.newArrayList(worldGenerator.getZones()) - .stream() - .filter(z -> !z.getPreviewLayers().isEmpty()) - .collect(Collectors.toList()); - if (previewZones.isEmpty()) { - zoneSelector.setVisible(false); - previewGen = new FacetLayerPreview(environment, worldGenerator); - } else { - zoneSelector.setVisible(true); - zoneSelector.setOptions(previewZones); - zoneSelector.setSelection(previewZones.get(0)); - } - - configureProperties(); - } else { - throw new UnresolvedDependencyException("Unable to resolve dependencies for " + worldGenUri); - } - } - - private void genTexture() { - int imgWidth = 384; - int imgHeight = 384; - ByteBuffer buffer = ByteBuffer.allocateDirect(imgWidth * imgHeight * Integer.BYTES); - ByteBuffer[] data = new ByteBuffer[]{buffer}; - ResourceUrn uri = new ResourceUrn("engine:terrainPreview"); - TextureData texData = new TextureData(imgWidth, imgHeight, data, Texture.WrapMode.CLAMP, Texture.FilterMode.LINEAR); - texture = Assets.generateAsset(uri, texData, Texture.class); - - previewImage = find("preview", UIImage.class); - previewImage.setImage(texture); - } - - @Override - public void update(float delta) { - super.update(delta); - - if (triggerUpdate) { - updatePreview(); - triggerUpdate = false; - } - } - - private void configureProperties() { - - PropertyLayout propLayout = find("properties", PropertyLayout.class); - propLayout.setOrdering(PropertyOrdering.byLabel()); - propLayout.clear(); - - WorldConfigurator worldConfig = worldGenerator.getConfigurator(); - - Map params = worldConfig.getProperties(); - - for (String key : params.keySet()) { - Class clazz = params.get(key).getClass(); - Component comp = config.getModuleConfig(worldGenerator.getUri(), key, clazz); - if (comp != null) { - worldConfig.setProperty(key, comp); // use the data from the config instead of defaults - } - } - - ComponentLibrary compLib = subContext.get(ComponentLibrary.class); - - for (String label : params.keySet()) { - - PropertyProvider provider = new PropertyProvider(context.get(ReflectFactory.class), context.get(OneOfProviderFactory.class)) { - @Override - protected Binding createTextBinding(Object target, FieldMetadata fieldMetadata) { - return new WorldConfigBinding<>(worldConfig, label, compLib, fieldMetadata); - } - - @Override - protected Binding createFloatBinding(Object target, FieldMetadata fieldMetadata) { - return new WorldConfigNumberBinding(worldConfig, label, compLib, fieldMetadata); - } - }; - - Component target = params.get(label); - List> properties = provider.createProperties(target); - propLayout.addProperties(label, properties); - } - } - - private void resetEnvironment() { - - CoreRegistry.setContext(context); - - if (environment != null) { - EnvironmentSwitchHandler environmentSwitchHandler = context.get(EnvironmentSwitchHandler.class); - environmentSwitchHandler.handleSwitchBackFromPreviewEnvironment(subContext); - environment.close(); - environment = null; - } - - previewGen.close(); - - WorldConfigurator worldConfig = worldGenerator.getConfigurator(); - - Map params = worldConfig.getProperties(); - if (params != null) { - config.setModuleConfigs(worldGenerator.getUri(), params); - } - } - - @Override - public void initialise() { - setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation()); - - zoomSlider = find("zoomSlider", UISlider.class); - if (zoomSlider != null) { - zoomSlider.setValue(2f); - } - - seed = find("seed", UIText.class); - - zoneSelector = find("zoneSelector", UIDropdown.class); - - applyButton = find("apply", UIButton.class); - if (applyButton != null) { - applyButton.subscribe(widget -> updatePreview()); - } - - WidgetUtil.trySubscribe(this, "close", w -> { - resetEnvironment(); - triggerBackAnimation(); - }); - } - - @Override - public boolean isLowerLayerVisible() { - return false; - } - - public void bindSeed(Binding binding) { - if (seed == null) { - // TODO: call initialize through NUIManager instead of onOpened() - seed = find("seed", UIText.class); - } - seed.bindText(binding); - } - - private void updatePreview() { - - final NUIManager manager = context.get(NUIManager.class); - final WaitPopup popup = manager.pushScreen(WaitPopup.ASSET_URI, WaitPopup.class); - popup.setMessage("Updating Preview", "Please wait ..."); - - ProgressListener progressListener = progress -> - popup.setMessage("Updating Preview", String.format("Please wait ... %d%%", (int) (progress * 100f))); - - Callable operation = () -> { - if (seed != null) { - worldGenerator.setWorldSeed(seed.getText()); - } - int zoom = TeraMath.floorToInt(zoomSlider.getValue()); - TextureData data = texture.getData(); - - if (zoneSelector.isVisible()) { - previewGen = zoneSelector.getSelection().preview(worldGenerator); - } - previewGen.render(data, zoom, progressListener); - - return data; - }; - - popup.onSuccess(texture::reload); - popup.startOperation(operation, true); - } - - /** - * Updates a world configurator through setProperty() whenever Binding#set() is called. - */ - private static class WorldConfigBinding implements Binding { - private final String label; - private final WorldConfigurator worldConfig; - private final FieldMetadata fieldMetadata; - private final ComponentLibrary compLib; - - protected WorldConfigBinding(WorldConfigurator config, String label, ComponentLibrary compLib, FieldMetadata fieldMetadata) { - this.worldConfig = config; - this.label = label; - this.compLib = compLib; - this.fieldMetadata = fieldMetadata; - } - - @Override - public T get() { - Component comp = worldConfig.getProperties().get(label); - return fieldMetadata.getValue(comp); - } - - @Override - public void set(T value) { - T old = get(); - - if (!Objects.equals(old, value)) { - cloneAndSet(label, value); - } - } - - private void cloneAndSet(String group, Object value) { - Component comp = worldConfig.getProperties().get(group); - Component clone = compLib.copy(comp); - fieldMetadata.setValue(clone, value); - - // notify the world generator about the new component - worldConfig.setProperty(label, clone); - } - } - - private static class WorldConfigNumberBinding implements Binding { - - private WorldConfigBinding binding; - - @SuppressWarnings("unchecked") - protected WorldConfigNumberBinding(WorldConfigurator config, String label, ComponentLibrary compLib, FieldMetadata field) { - Class type = field.getType(); - if (type == Integer.TYPE || type == Integer.class) { - this.binding = new WorldConfigBinding<>(config, label, compLib, - (FieldMetadata) field); - } else if (type == Float.TYPE || type == Float.class) { - this.binding = new WorldConfigBinding<>(config, label, compLib, - (FieldMetadata) field); - } - } - - @Override - public Float get() { - Number val = binding.get(); - if (val instanceof Float) { - // use boxed instance directly - return (Float) val; - } - // create a boxed instance otherwise - return val.floatValue(); - } - - @Override - @SuppressWarnings("unchecked") - public void set(Float value) { - Class type = binding.fieldMetadata.getType(); - if (type == Integer.TYPE || type == Integer.class) { - ((Binding) binding).set(value.intValue()); - } else if (type == Float.TYPE || type == Float.class) { - ((Binding) binding).set(value); - } - } - } -} - - diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/StartPlayingScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/StartPlayingScreen.java index ce661fe073d..cf3708df4a2 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/StartPlayingScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/StartPlayingScreen.java @@ -7,7 +7,6 @@ import org.terasology.engine.context.Context; import org.terasology.engine.core.GameEngine; import org.terasology.engine.core.SimpleUri; -import org.terasology.engine.core.TerasologyConstants; import org.terasology.engine.core.modes.StateLoading; import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.game.GameManifest; @@ -19,15 +18,12 @@ import org.terasology.engine.rendering.nui.animation.MenuAnimationSystems; import org.terasology.engine.rendering.world.WorldSetupWrapper; import org.terasology.engine.world.internal.WorldInfo; -import org.terasology.engine.world.time.WorldTime; import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.nui.Canvas; import org.terasology.nui.WidgetUtil; import org.terasology.nui.widgets.UIImage; import org.terasology.nui.widgets.UILabel; -import java.util.List; - public class StartPlayingScreen extends CoreScreenLayer { public static final ResourceUrn ASSET_URI = new ResourceUrn("engine:startPlayingScreen"); @@ -45,7 +41,6 @@ public class StartPlayingScreen extends CoreScreenLayer { private TranslationSystem translationSystem; private Texture texture; - private List worldSetupWrappers; private UniverseWrapper universeWrapper; private WorldSetupWrapper targetWorld; @@ -70,19 +65,8 @@ public void initialise() { SimpleUri uri; WorldInfo worldInfo; + //TODO: if we don't do that here, where do we do it? or does the world not show up in the game manifest? //gameManifest.addWorld(worldInfo); - int i = 0; - for (WorldSetupWrapper world : worldSetupWrappers) { - if (world != targetWorld) { - i++; - uri = world.getWorldGeneratorInfo().getUri(); - worldInfo = new WorldInfo(TerasologyConstants.MAIN_WORLD + i, world.getWorldName().toString(), - world.getWorldGenerator().getWorldSeed(), (long) (WorldTime.DAY_LENGTH * WorldTime.NOON_OFFSET), uri); - gameManifest.addWorld(worldInfo); - config.getUniverseConfig().addWorldManager(worldInfo); - } - - } gameEngine.changeState(new StateLoading(gameManifest, (universeWrapper.getLoadingAsServer()) ? NetworkMode.DEDICATED_SERVER @@ -99,20 +83,18 @@ public void onOpened() { UIImage previewImage = find("preview", UIImage.class); previewImage.setImage(texture); - UILabel subitle = find("subtitle", UILabel.class); - subitle.setText(translationSystem.translate("${engine:menu#start-playing}") + " in " + targetWorld.getWorldName().toString()); + UILabel subtitle = find("subtitle", UILabel.class); + subtitle.setText(translationSystem.translate("${engine:menu#start-playing}") + " in " + targetWorld.getWorldName().toString()); } /** * This method is called before the screen comes to the forefront to set the world in which the player is about to spawn. * - * @param worldSetupWrapperList The world in which the player is going to spawn. * @param targetWorldTexture The world texture generated in {@link WorldPreGenerationScreen} to be displayed on this screen. */ - public void setTargetWorld(List worldSetupWrapperList, WorldSetupWrapper spawnWorld, + public void setTargetWorld(WorldSetupWrapper spawnWorld, Texture targetWorldTexture, Context context) { texture = targetWorldTexture; - worldSetupWrappers = worldSetupWrapperList; universeWrapper = context.get(UniverseWrapper.class); targetWorld = spawnWorld; } diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/UniverseSetupScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/UniverseSetupScreen.java index 9d6ec26d239..9ff3983524b 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/UniverseSetupScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/UniverseSetupScreen.java @@ -79,22 +79,18 @@ public class UniverseSetupScreen extends CoreScreenLayer { @In private Config config; - private List worlds = Lists.newArrayList(); private ModuleEnvironment environment; private ModuleAwareAssetTypeManager assetTypeManager; private Context context; - private int worldNumber; - private String selectedWorld = ""; - private int indexOfSelectedWorld; - private WorldSetupWrapper copyOfSelectedWorld; + private WorldSetupWrapper selectedWorld; @Override public void initialise() { setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation()); - final UIDropdownScrollable worldGenerator = find("worldGenerators", UIDropdownScrollable.class); - if (worldGenerator != null) { - worldGenerator.bindOptions(new ReadOnlyBinding>() { + final UIDropdownScrollable worldGenerators = find("worldGenerators", UIDropdownScrollable.class); + if (worldGenerators != null) { + worldGenerators.bindOptions(new ReadOnlyBinding>() { @Override public List get() { // grab all the module names and their dependencies @@ -102,7 +98,10 @@ public List get() { final Set enabledModuleNames = new HashSet<>(getAllEnabledModuleNames()); final List result = Lists.newArrayList(); for (WorldGeneratorInfo option : worldGeneratorManager.getWorldGenerators()) { - if (enabledModuleNames.contains(option.getUri().getModuleName())) { + //TODO: There should not be a reference from the engine to some module. + // The engine must be agnostic to what modules may do. + if (enabledModuleNames.contains(option.getUri().getModuleName()) + && !option.getUri().toString().equals("CoreWorlds:heightMap")) { result.add(option); } } @@ -110,8 +109,8 @@ public List get() { return result; } }); - worldGenerator.setVisibleOptions(3); - worldGenerator.bindSelection(new Binding() { + worldGenerators.setVisibleOptions(3); + worldGenerators.bindSelection(new Binding() { @Override public WorldGeneratorInfo get() { // get the default generator from the config. This is likely to have a user triggered selection. @@ -138,7 +137,7 @@ public void set(WorldGeneratorInfo value) { } } }); - worldGenerator.setOptionRenderer(new StringTextRenderer() { + worldGenerators.setOptionRenderer(new StringTextRenderer() { @Override public String getString(WorldGeneratorInfo value) { if (value != null) { @@ -148,56 +147,16 @@ public String getString(WorldGeneratorInfo value) { } }); } - final UIDropdownScrollable worldsDropdown = find("worlds", UIDropdownScrollable.class); - worldsDropdown.bindSelection(new Binding() { - @Override - public String get() { - return selectedWorld; - } - - @Override - public void set(String value) { - selectedWorld = value; - indexOfSelectedWorld = findIndex(worlds, selectedWorld); - } - }); WidgetUtil.trySubscribe(this, "close", button -> triggerBackAnimation() ); - WidgetUtil.trySubscribe(this, "worldConfig", button -> { - final WorldSetupScreen worldSetupScreen = getManager().createScreen(WorldSetupScreen.ASSET_URI, WorldSetupScreen.class); - try { - if (!worlds.isEmpty() || !selectedWorld.isEmpty()) { - worldSetupScreen.setWorld(context, findWorldByName(), worldsDropdown); - triggerForwardAnimation(worldSetupScreen); - } else { - getManager().pushScreen(MessagePopup.ASSET_URI, MessagePopup.class) - .setMessage("Worlds List Empty!", "No world found to configure."); - } - } catch (UnresolvedWorldGeneratorException e) { - logger.error("Can't configure the world! due to {}", e.getMessage()); - } - }); - - WidgetUtil.trySubscribe(this, "addGenerator", button -> { - //TODO: there should not be a reference from the engine to some module - the engine must be agnostic to what - // modules may do - if (worldGenerator.getSelection().getUri().toString().equals("CoreWorlds:heightMap")) { - getManager().pushScreen(MessagePopup.ASSET_URI, MessagePopup.class) - .setMessage("HeightMap not supported", - "HeightMap is not supported for advanced setup right now, a game template will be introduced soon."); - } else { - addNewWorld(worldGenerator.getSelection()); - worldsDropdown.setOptions(worldNames()); - } - }); - WidgetUtil.trySubscribe(this, "continue", button -> { final WorldPreGenerationScreen worldPreGenerationScreen = getManager().createScreen(WorldPreGenerationScreen.ASSET_URI, WorldPreGenerationScreen.class); - if (!worlds.isEmpty()) { + addNewWorld(worldGenerators.getSelection()); + if (selectedWorld != null) { final WaitPopup loadPopup = getManager().pushScreen(WaitPopup.ASSET_URI, WaitPopup.class); loadPopup.setMessage("Loading", "please wait ..."); loadPopup.onSuccess(result -> { @@ -231,14 +190,7 @@ public void set(String value) { public void onOpened() { super.onOpened(); - worlds.clear(); - worldNumber = 0; - final UIDropdownScrollable worldsDropdown = find("worlds", UIDropdownScrollable.class); - if (worldsDropdown != null) { - worldsDropdown.setOptions(worldNames()); - } - selectedWorld = ""; - indexOfSelectedWorld = findIndex(worlds, selectedWorld); + selectedWorld = null; } private Set getAllEnabledModuleNames() { @@ -262,23 +214,6 @@ private void recursivelyAddModuleDependencies(Set modules, Name moduleName } } - /** - * returns true if 'name' matches (case-insensitive) with another world already present - * @param name The world name to be checked - */ - public boolean worldNameMatchesAnother(String name) { - boolean taken = false; - - for (WorldSetupWrapper worldTaken: worlds) { - if (worldTaken.getWorldName().toString().equalsIgnoreCase(name)) { - taken = true; - break; - } - } - - return taken; - } - /** * Called whenever the user decides to add a new world. * @param worldGeneratorInfo The {@link WorldGeneratorInfo} object for the new world. @@ -286,24 +221,7 @@ public boolean worldNameMatchesAnother(String name) { private void addNewWorld(WorldGeneratorInfo worldGeneratorInfo) { String selectedWorldName = worldGeneratorInfo.getDisplayName(); - while (worldNameMatchesAnother(selectedWorldName + "-" + worldNumber)) { - ++worldNumber; - } - - selectedWorld = worldGeneratorInfo.getDisplayName() + '-' + worldNumber; - worlds.add(new WorldSetupWrapper(new Name(worldGeneratorInfo.getDisplayName() + '-' + worldNumber), worldGeneratorInfo)); - indexOfSelectedWorld = findIndex(worlds, selectedWorld); - ++worldNumber; - } - - /** - * This method refreshes the worlds drop-down menu when world name is changed and updates variable selectedWorld. - * @param worldsDropdown the drop-down to work on - */ - public void refreshWorldDropdown(UIDropdownScrollable worldsDropdown) { - worldsDropdown.setOptions(worldNames()); - copyOfSelectedWorld = worlds.get(indexOfSelectedWorld); - selectedWorld = copyOfSelectedWorld.getWorldName().toString(); + selectedWorld = new WorldSetupWrapper(new Name(selectedWorldName), worldGeneratorInfo); } /** @@ -342,23 +260,6 @@ public void setEnvironment(UniverseWrapper wrapper) { } } - /** - * Looks for the index of a selected world from the given list. - * @param worldsList the list to search - * @param worldName the name of the world to find - * @return the found index value or -1 if not found - */ - private int findIndex(List worldsList, String worldName) { - for (int i = 0; i < worldsList.size(); i++) { - WorldSetupWrapper currentWorldFromList = worldsList.get(i); - Name customName = currentWorldFromList.getWorldName(); - if (customName.toString().equals(worldName)) { - return i; - } - } - return -1; - } - private void initAssets() { ModuleEnvironment environment = context.get(ModuleManager.class).getEnvironment(); @@ -380,40 +281,9 @@ private void initAssets() { } /** - * Create a list of the names of the world, so that they can be displayed as simple String - * in the drop-down. - * @return A list of world names encoded as a String - */ - public List worldNames() { - final List worldNamesList = Lists.newArrayList(); - for (WorldSetupWrapper world : worlds) { - worldNamesList.add(world.getWorldName().toString()); - } - return worldNamesList; - } - - /** - * This method takes the name of the selected world as String and return the corresponding - * WorldSetupWrapper object. - * @return {@link WorldSetupWrapper} object. - */ - public WorldSetupWrapper findWorldByName() { - for (WorldSetupWrapper world : worlds) { - if (world.getWorldName().toString().equals(selectedWorld)) { - return world; - } - } - return null; - } - - public List getWorldsList() { - return worlds; - } - - /** - * @return the selcted world in the drop-down. + * @return the selected world in the drop-down. */ - public String getSelectedWorld() { + public WorldSetupWrapper getSelectedWorld() { return selectedWorld; } diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldPreGenerationScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldPreGenerationScreen.java index c5c5bc3e0bd..42e443bd941 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldPreGenerationScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldPreGenerationScreen.java @@ -20,10 +20,10 @@ import org.terasology.gestalt.naming.Name; import org.terasology.nui.WidgetUtil; import org.terasology.nui.databinding.Binding; -import org.terasology.nui.widgets.UIDropdownScrollable; import org.terasology.nui.widgets.UIImage; import org.terasology.nui.widgets.UISlider; import org.terasology.nui.widgets.UISliderOnChangeTriggeredListener; +import org.terasology.nui.widgets.UIText; import org.terasology.engine.registry.In; import org.terasology.engine.rendering.nui.CoreScreenLayer; import org.terasology.engine.rendering.nui.NUIManager; @@ -63,9 +63,7 @@ public class WorldPreGenerationScreen extends CoreScreenLayer implements UISlide private UIImage previewImage; private Context context; private PreviewGenerator previewGen; - private List worldList; - private String selectedWorld; - private List worldNames; + private WorldSetupWrapper selectedWorld; private int seedNumber; private UISlider zoomSlider; @@ -81,15 +79,12 @@ public void setEnvironment(Context subContext) throws UnresolvedWorldGeneratorEx context = subContext; environment = context.get(ModuleEnvironment.class); context.put(WorldGeneratorPluginLibrary.class, new TempWorldGeneratorPluginLibrary(environment, context)); - worldList = context.get(UniverseSetupScreen.class).getWorldsList(); selectedWorld = context.get(UniverseSetupScreen.class).getSelectedWorld(); - worldNames = context.get(UniverseSetupScreen.class).worldNames(); - setWorldGenerators(); + ensureWorldGeneratorIsSet(); + selectedWorld.getWorldGenerator().setWorldSeed(createSeed(selectedWorld.getWorldName().toString())); - worldGenerator = findWorldByName(selectedWorld).getWorldGenerator(); - final UIDropdownScrollable worldsDropdown = find("worlds", UIDropdownScrollable.class); - worldsDropdown.setOptions(worldNames); + worldGenerator = selectedWorld.getWorldGenerator(); genTexture(); List previewZones = Lists.newArrayList(worldGenerator.getZones()) @@ -111,52 +106,36 @@ public void initialise() { zoomSlider.setUiSliderOnChangeTriggeredListener(this); } - - final UIDropdownScrollable worldsDropdown = find("worlds", UIDropdownScrollable.class); - worldsDropdown.bindSelection(new Binding() { + final UIText worldName = find("worldName", UIText.class); + worldName.bindText(new Binding() { @Override public String get() { - return selectedWorld; + return selectedWorld.getWorldName().toString(); } @Override public void set(String value) { - selectedWorld = value; - try { - if (findWorldByName(selectedWorld).getWorldGenerator() == null) { - worldGenerator = WorldGeneratorManager.createWorldGenerator(findWorldByName(selectedWorld) - .getWorldGeneratorInfo().getUri(), context, environment); - findWorldByName(selectedWorld).setWorldGenerator(worldGenerator); - } else { - worldGenerator = findWorldByName(selectedWorld).getWorldGenerator(); - } - if (worldGenerator.getWorldSeed() == null) { - worldGenerator.setWorldSeed(createSeed(selectedWorld)); - } - previewGen = new FacetLayerPreview(environment, worldGenerator); - updatePreview(); - } catch (UnresolvedWorldGeneratorException e) { - e.printStackTrace(); - } + // no-op + // field should be read-only } }); WidgetUtil.trySubscribe(this, "reRoll", button -> { - worldGenerator.setWorldSeed(createSeed(selectedWorld)); + worldGenerator.setWorldSeed(createSeed(selectedWorld.getWorldName().toString())); updatePreview(); }); StartPlayingScreen startPlayingScreen = getManager().createScreen(StartPlayingScreen.ASSET_URI, StartPlayingScreen.class); WidgetUtil.trySubscribe(this, "continue", button -> { - startPlayingScreen.setTargetWorld(worldList, findWorldByName(selectedWorld), texture, context); + startPlayingScreen.setTargetWorld(selectedWorld, texture, context); triggerForwardAnimation(startPlayingScreen); }); WorldSetupScreen worldSetupScreen = getManager().createScreen(WorldSetupScreen.ASSET_URI, WorldSetupScreen.class); WidgetUtil.trySubscribe(this, "config", button -> { try { - if (!selectedWorld.isEmpty()) { - worldSetupScreen.setWorld(context, findWorldByName(selectedWorld), worldsDropdown); + if (!selectedWorld.getWorldName().isEmpty()) { + worldSetupScreen.setWorld(context, selectedWorld); triggerForwardAnimation(worldSetupScreen); } else { getManager().pushScreen(MessagePopup.ASSET_URI, MessagePopup.class) @@ -168,10 +147,6 @@ public void set(String value) { }); WidgetUtil.trySubscribe(this, "close", button -> { - final UniverseSetupScreen universeSetupScreen = - getManager().createScreen(UniverseSetupScreen.ASSET_URI, UniverseSetupScreen.class); - UIDropdownScrollable worldsDropdownOfUniverse = universeSetupScreen.find("worlds", UIDropdownScrollable.class); - universeSetupScreen.refreshWorldDropdown(worldsDropdownOfUniverse); triggerBackAnimation(); }); @@ -185,15 +160,15 @@ public void onOpened() { super.onOpened(); try { - if (findWorldByName(selectedWorld).getWorldGenerator() == null) { - worldGenerator = WorldGeneratorManager.createWorldGenerator(findWorldByName(selectedWorld) + if (selectedWorld.getWorldGenerator() == null) { + worldGenerator = WorldGeneratorManager.createWorldGenerator(selectedWorld .getWorldGeneratorInfo().getUri(), context, environment); - findWorldByName(selectedWorld).setWorldGenerator(worldGenerator); + selectedWorld.setWorldGenerator(worldGenerator); } else { - worldGenerator = findWorldByName(selectedWorld).getWorldGenerator(); + worldGenerator = selectedWorld.getWorldGenerator(); } if (worldGenerator.getWorldSeed().isEmpty()) { - worldGenerator.setWorldSeed(createSeed(selectedWorld)); + worldGenerator.setWorldSeed(createSeed(selectedWorld.getWorldName().toString())); } previewGen = new FacetLayerPreview(environment, worldGenerator); updatePreview(); @@ -202,12 +177,13 @@ public void onOpened() { } } + //TODO: this does not actually only set it when configure is called from WorldPreGenerationScreen, but also if called from UniverseSetupScreen /** * Set seletedWorld when configure from WorldPreGenerationScreen * @param newNameToSet */ public void setName(Name newNameToSet) { - selectedWorld = newNameToSet.toString(); + selectedWorld.setWorldName(newNameToSet); } /** @@ -252,21 +228,6 @@ private void updatePreview() { popup.startOperation(operation, true); } - /** - * This method takes the name of the world selected in the worldsDropdown - * as String and return the corresponding WorldSetupWrapper object. - * - * @return {@link WorldSetupWrapper} object of the selected world. - */ - private WorldSetupWrapper findWorldByName(String searchWorld) { - for (WorldSetupWrapper world : worldList) { - if (world.getWorldName().toString().equals(searchWorld)) { - return world; - } - } - return null; - } - /** * Creates a unique world seed by appending the world name with an incrementing number, on top of the universe seed. * @@ -278,17 +239,15 @@ private String createSeed(String world) { return seed + world + seedNumber++; } - private void setWorldGenerators() { - for (WorldSetupWrapper worldSetupWrapper : worldList) { - if (worldSetupWrapper.getWorldGenerator() == null) { - try { - worldSetupWrapper.setWorldGenerator(WorldGeneratorManager.createWorldGenerator(findWorldByName( - worldSetupWrapper.getWorldName().toString()).getWorldGeneratorInfo().getUri(), context, environment)); - } catch (UnresolvedWorldGeneratorException e) { - e.printStackTrace(); - } + private void ensureWorldGeneratorIsSet() { + if (selectedWorld.getWorldGenerator() == null) { + try { + selectedWorld.setWorldGenerator(WorldGeneratorManager.createWorldGenerator( + selectedWorld.getWorldGeneratorInfo().getUri(), context, environment)); + } catch (UnresolvedWorldGeneratorException e) { + //TODO: this will likely fail at game creation time later-on due to lack of world generator - don't just ignore this + e.printStackTrace(); } - worldSetupWrapper.getWorldGenerator().setWorldSeed(createSeed(worldSetupWrapper.getWorldName().toString())); } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java index 7bb95ee29e5..bdf90f8ff82 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java @@ -28,7 +28,6 @@ import org.terasology.nui.properties.Property; import org.terasology.nui.properties.PropertyOrdering; import org.terasology.nui.properties.PropertyProvider; -import org.terasology.nui.widgets.UIDropdownScrollable; import org.terasology.nui.widgets.UILabel; import org.terasology.nui.widgets.UIText; import org.terasology.reflection.metadata.FieldMetadata; @@ -60,17 +59,12 @@ public class WorldSetupScreen extends CoreScreenLayer { private Context context; private WorldConfigurator oldWorldConfig; private Name newWorldName; - private UIDropdownScrollable worldsDropdown; @Override public void initialise() { setAnimationSystem(MenuAnimationSystems.createDefaultSwipeAnimation()); - WidgetUtil.trySubscribe(this, "close", button -> { - final UniverseSetupScreen universeSetupScreen = - getManager().createScreen(UniverseSetupScreen.ASSET_URI, UniverseSetupScreen.class); - final WorldPreGenerationScreen worldPreGenerationScreen = - getManager().createScreen(WorldPreGenerationScreen.ASSET_URI, WorldPreGenerationScreen.class); + WidgetUtil.trySubscribe(this, "close", button -> { UIText customWorldName = find("customisedWorldName", UIText.class); boolean goBack = false; @@ -83,10 +77,6 @@ public void initialise() { } else if (customWorldName.getText().equalsIgnoreCase(world.getWorldName().toString())) { //same name as before: go back to universe setup goBack = true; - } else if (universeSetupScreen.worldNameMatchesAnother(customWorldName.getText())) { - //if same name is already used, inform user with a popup - getManager().pushScreen(MessagePopup.ASSET_URI, MessagePopup.class) - .setMessage("Name Already Used!", "Please use a different name for this world"); } else { //no match found: go back to universe setup goBack = true; @@ -95,8 +85,6 @@ public void initialise() { if (goBack) { newWorldName = new Name(customWorldName.getText()); world.setWorldName(newWorldName); - universeSetupScreen.refreshWorldDropdown(worldsDropdown); - worldPreGenerationScreen.setName(newWorldName); triggerBackAnimation(); } }); @@ -129,11 +117,10 @@ public void onOpened() { * @param worldSelected the world whose configurations are to be changed. * @throws UnresolvedWorldGeneratorException */ - public void setWorld(Context subContext, WorldSetupWrapper worldSelected, UIDropdownScrollable dropDown) + public void setWorld(Context subContext, WorldSetupWrapper worldSelected) throws UnresolvedWorldGeneratorException { world = worldSelected; context = subContext; - worldsDropdown = dropDown; SimpleUri worldGenUri = worldSelected.getWorldGeneratorInfo().getUri(); environment = context.get(ModuleEnvironment.class); context.put(WorldGeneratorPluginLibrary.class, new TempWorldGeneratorPluginLibrary(environment, context)); diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang index e94decf18e5..56a1c4ae60d 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang @@ -254,7 +254,6 @@ "motion-blur": "motion-blur", "mouse-sensitivity": "mouse-sensitivity", "movement-dead-zone": "movement-dead-zone", - "multi-world-warning": "multi-world-warning", "multiplayer-identities": "multiplayer-identities", "music-volume": "music-volume", "new-binding": "new-binding", @@ -440,6 +439,7 @@ "world-config-preview": "world-config-preview", "world-configuration": "world-configuration", "world-generator": "world-generator", + "world-name": "world-name", "world-pre-generation": "world-pre-generation", "world-seed": "world-seed", "world-setup": "world-setup", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_cs.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_cs.lang index 7179a7508de..261cc7c397f 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_cs.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_cs.lang @@ -250,7 +250,6 @@ "motion-blur": "Rozmazání pohybem", "mouse-sensitivity": "Citlivost myši", "movement-dead-zone": "Mrtvá zóna pohybové osy", - "multi-world-warning": "VAROVÁNÍ: Multi-world není dokončen, pouze finálně vybraný svět bude k dispozici!", "music-volume": "Hlasitost hudby", "new-binding": "Nové přiřazení", "new-game-title": "Nová hra", @@ -290,7 +289,7 @@ "player-settings-identities-import": "Importovat...", "player-settings-title": "Nastavení hráče", "please-wait": "Prosím počkej...", - "pregeneration-description": "Vyber svět ze seznamu k náhledu. Klikni na Přegenerovat k náhodnému výběru nového seedu nebo na Nastavit pro detailní úpravu světa", + "pregeneration-description": "Klikni na Přegenerovat k náhodnému výběru nového seedu nebo na Nastavit pro detailní úpravu světa", "preview-world-title": "Náhled světa...", "preview-zoom-factor": "Přiblížení", "previous-toolbar-item": "Předchozí předmět v toolbaru", @@ -396,7 +395,7 @@ "this-language-English": "Czech", "this-language-native": "Česky", "universe-setup": "Nastavení Vesmíru", - "universe-setup-description": "Vyber generátor světa a přidej ho. Poté vyber a nastav světy z čerstvě vyplněného seznamu světů.", + "universe-setup-description": "Vyber generátor světa.", "update-module": "Aktualizovat", "time-progression-during-pre-generation": "Postup času během předgenerace", "validation-username-max-length": "Jméno nesmí být delší než 100 znaků", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_de.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_de.lang index 80f66a0dfeb..69ae53f7dad 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_de.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_de.lang @@ -248,5 +248,6 @@ "widget-selection-prompt": "Bitte wähle ein Widget aus:", "widget-selection-title": "Widget-Auswahl", "world-config-preview": "Details ...", + "world-name": "Weltname", "world-seed": "Seed" } diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang index ef11b1edc13..53540ee2557 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang @@ -259,7 +259,6 @@ "motion-blur": "Motion Blur", "mouse-sensitivity": "Mouse Sensitivity", "movement-dead-zone": "Movement Axis Dead Zone", - "multi-world-warning": "WARNING: Multi-world is not completed, only the final selected world will be available!", "multiplayer-identities": "Multiplayer identities:", "music-volume": "Music Volume", "new-binding": "New binding", @@ -299,7 +298,7 @@ "player-settings-identities-import": "Import...", "player-settings-title": "Player Settings", "please-wait": "Please wait...", - "pregeneration-description": "Select a world in the drop-down to see it previewed. Click Re-Roll to randomly pick a new seed or Configure to manually tweak the world further", + "pregeneration-description": "Click Re-Roll to randomly pick a new seed or Configure to manually tweak the world further", "preview-world-title": "Preview World...", "preview-zoom-factor": "Zoom", "previous-toolbar-item": "Previous Toolbar Item", @@ -411,7 +410,7 @@ "this-language-English": "English", "this-language-native": "English", "universe-setup": "Universe Setup", - "universe-setup-description": "Pick a world generator and add it. Then select and configure worlds from the freshly filled Worlds dropdown.", + "universe-setup-description": "Pick a world generator.", "update-module": "Update", "time-progression-during-pre-generation": "Time progression during pre-generation", "validation-username-max-length": "Username can't be longer then 100 chars", @@ -457,6 +456,7 @@ "world-config-preview": "Details...", "world-configuration": "World Configuration", "world-generator": "World Generator", + "world-name": "World Name", "world-pre-generation": "World Pre-generation", "world-seed": "Seed", "world-setup": "World Setup", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_fr.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_fr.lang index e1fd06ffb72..26977592153 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_fr.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_fr.lang @@ -249,7 +249,6 @@ "motion-blur": "Flou cinétique", "mouse-sensitivity": "Sensibilité de la souris", "movement-dead-zone": "Mouvement dans l'axe de la zone morte", - "multi-world-warning": "AVERTISSEMENT: le multi-monde n'est pas terminé, seul le dernier monde sélectionné sera disponible !", "music-volume": "Volume de la musique", "new-binding": "Nouveau racourcie", "new-game-title": "Nouvelle partie", @@ -288,7 +287,7 @@ "player-settings-identities-import": "Import...", "player-settings-title": "Paramètres du joueur", "please-wait": "Veuillez patienter...", - "pregeneration-description": "Sélectionnez un monde dans le menu déroulant pour le voir en aperçu. Cliquez sur Jet-de-dés pour choisir au hasard une nouvelle graine ou sur Configurer pour modifier manuellement le monde", + "pregeneration-description": "Cliquez sur Jet-de-dés pour choisir au hasard une nouvelle graine ou sur Configurer pour modifier manuellement le monde", "preview-world-title": "Prévisualisation du monde...", "preview-zoom-factor": "Zoom", "previous-toolbar-item": "Barre d'outil précédente", @@ -392,7 +391,7 @@ "this-language-English": "French", "this-language-native": "Français", "universe-setup": "Configuration de l'univers", - "universe-setup-description": "Choisissez un générateur de monde et ajoutez-le. Ensuite, sélectionnez et configurez des mondes dans la liste déroulante des mondes fraîchement remplie.", + "universe-setup-description": "Choisissez un générateur de monde.", "update-module": "Mise à jour", "time-progression-during-pre-generation": "Progression de temps pendant la pré-génération", "validation-username-max-length": "Le nom d'utilisateur ne peut pas être plus long que 100 caractères", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_ja.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_ja.lang index f9b1735a1eb..44b70300e80 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_ja.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_ja.lang @@ -252,7 +252,6 @@ "motion-blur": "モーション・ブラー", "mouse-sensitivity": "マウスの感度", "movement-dead-zone": "移動する座標は行けません", - "multi-world-warning": "警告: 多重ワールドは終わってません,最後に選択されたワールドのみ利用可能です!", "music-volume": "音量", "new-binding": "新しいバインディング", "new-game-title": "ニュー・ゲーム", @@ -291,7 +290,7 @@ "player-settings-identities-import": "インポート...", "player-settings-title": "プレイヤーのセッティング", "please-wait": "しばらくお待ちください", - "pregeneration-description": "ドロップ・ダウンから観たいワールドを選べ。リロールをクリックすることで新しいシードをランダムに選びます。または手動でワールドを微設定することもできます", + "pregeneration-description": "「再ロール」をクリックして、新しいシードをランダムに選択します。 または、世界を手動で調整することもできます", "preview-world-title": "ワールドのプレビュー...", "preview-zoom-factor": "ズーム", "previous-toolbar-item": "前のツールバーの項目", @@ -396,7 +395,7 @@ "this-language-English": "Japanese", "this-language-native": "日本語", "universe-setup": "全体の設定", - "universe-setup-description": 新しいワールドをドロップダウンから選んで設定したとき、ワールドジェネレータを選択し追加してください。", + "universe-setup-description": "ワールドジェネレーターを選択します。", "update-module": "アップデート", "time-progression-during-pre-generation": "事前生成中の時間経過", "validation-username-max-length": "ユーザーネームは100文字以上長くできません", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_sq.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_sq.lang index 07af70b742d..97cd3142b8b 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_sq.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_sq.lang @@ -249,7 +249,6 @@ "motion-blur": "Lëvizja e turbullimit", "mouse-sensitivity": "Ndjeshmëri e mausit", "movement-dead-zone": "Movement Axis Dead Zone", - "multi-world-warning": "WARNING: Multi-world is not completed, only the final selected world will be available!", "music-volume": "Niveli i Muzikës", "new-binding": "Lidhja e re", "new-game-title": "Lojë e Re", @@ -288,7 +287,7 @@ "player-settings-identities-import": "Import...", "player-settings-title": "Rrëgullimet e Lojtarit", "please-wait": "Te Lutem Prit...", - "pregeneration-description": "Select a world in the drop-down to see it previewed. Click Re-Roll to randomly pick a new seed or Configure to manually tweak the world further", + "pregeneration-description": "Click Re-Roll to randomly pick a new seed or Configure to manually tweak the world further", "preview-world-title": "Për të Parë Botën...", "preview-zoom-factor": "Zoom", "previous-toolbar-item": "Objekti i mëparshëm i toolbarit", @@ -392,7 +391,7 @@ "this-language-English": "Albanian", "this-language-native": "Shqip", "universe-setup": "Rrëgullimi i universit ", - "universe-setup-description": "Zgjidh një gjenerator të botës dhe shtoje atë. Pastaj zgjidhni dhe konfiguroni botët nga rishtarja e mbushur Botët dropdown.", + "universe-setup-description": "Zgjidhni një gjenerator botëror.", "update-module": "Update", "time-progression-during-pre-generation": "Progresi i kohës gjatë pre-lindja", "validation-username-max-length": "Emri nuk mun të jetë më i gjatë se 100 shenja", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_uk.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_uk.lang index a2e9d0fe347..ece87ce1d36 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_uk.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_uk.lang @@ -259,7 +259,6 @@ "motion-blur": "Розмиття", "mouse-sensitivity": "Чутливість мишки", "movement-dead-zone": "Мертва зона осі руху", - "multi-world-warning": "ПОПЕРЕДЖЕННЯ: мульти-світи незакінчені, буде доступний тільки останній обраний світ!", "multiplayer-identities": "Облікові записи:", "music-volume": "Гучність музики", "new-binding": "Нова прив'язка", @@ -299,7 +298,7 @@ "player-settings-identities-import": "Імпортувати...", "player-settings-title": "Налаштування гравця", "please-wait": "Будь ласка, зачекайте...", - "pregeneration-description": "Виберіть світ зі списку для попереднього перегляду. Натисніть 'Перегенерувати', щоб довільно обрати нове зерно, або 'Конфігурація', щоб власноруч редагувати світ.", + "pregeneration-description": "Натисніть 'Перегенерувати', щоб довільно обрати нове зерно, або 'Конфігурація', щоб власноруч редагувати світ.", "preview-world-title": "Попередній перегляд...", "preview-zoom-factor": "Масштаб", "previous-toolbar-item": "Попередній інструмент", @@ -411,7 +410,7 @@ "this-language-English": "Ukrainian", "this-language-native": "Українська", "universe-setup": "Налаштування світу", - "universe-setup-description": "Виберіть генератор світу і додайте його - потім виберіть та налаштуйте світи з новоствореного списку.", + "universe-setup-description": "Виберіть генератор світу.", "update-module": "Оновити", "time-progression-during-pre-generation": "Прогрес часу під час попереднього генерування", "validation-username-max-length": "Логін має бути коротшим за 100 символів", diff --git a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/previewWorldScreen.ui b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/previewWorldScreen.ui deleted file mode 100644 index 8f2ac83136c..00000000000 --- a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/previewWorldScreen.ui +++ /dev/null @@ -1,186 +0,0 @@ -{ - "type": "engine:previewWorldScreen", - "skin": "engine:mainMenu", - "contents": { - "type": "relativeLayout", - "contents": [ - { - "type": "UILabel", - "id": "title", - "family": "title", - "text": "${engine:menu#preview-world-title}", - "layoutInfo": { - "height": 48, - "position-horizontal-center": {}, - "position-top": { - "target": "TOP", - "offset": 48 - } - } - }, - { - "type": "UIBox", - "id": "container", - "layoutInfo": { - "width": 720, - "position-horizontal-center": {}, - "position-top": { - "target": "BOTTOM", - "offset": 16, - "widget": "title" - }, - "position-bottom": { - "target": "TOP", - "widget": "close", - "offset": 16 - } - } - }, - { - "type": "ColumnLayout", - "columns": 2, - "verticalSpacing": 16, - "horizontalSpacing": 8, - "column-widths": [0.53, 0.47], - "layoutInfo": { - "width": 704, - "position-horizontal-center": {}, - "position-top": { - "target": "TOP", - "widget": "container", - "offset": 8 - }, - "position-bottom": { - "target": "TOP", - "widget": "close", - "offset": 24 - } - }, - "contents": [ - { - "type": "UIImage", - "skin": "framed_image", - "id": "preview" - }, - { - "type": "RelativeLayout", - "family": "description", - "contents": [ - { - "type": "UILabel", - "text": "${engine:menu#preview-zoom-factor}:", - "id": "zoomLabel", - "layoutInfo": { - "use-content-height": true, - "position-horizontal-center": {}, - "position-top": { - "target": "TOP" - } - } - }, - { - "type": "UISlider", - "id": "zoomSlider", - "minimum": 1.0, - "range": 7.0, - "increment": 1.0, - "precision": 0, - "layoutInfo": { - "use-content-height": true, - "position-horizontal-center": {}, - "position-top": { - "target": "BOTTOM", - "widget": "zoomLabel" - } - } - }, - { - "type": "UIDropdown", - "id": "zoneSelector", - "layoutInfo": { - "use-content-height": true, - "position-top": { - "target": "BOTTOM", - "widget": "zoomSlider", - "offset": 8 - } - } - }, - { - "type": "UILabel", - "id": "seedLabel", - "text": "${engine:menu#world-seed}:", - "layoutInfo": { - "use-content-height": true, - "position-top": { - "target": "BOTTOM", - "widget": "zoneSelector", - "offset": 8 - } - } - }, - { - "type": "UIText", - "id": "seed", - "layoutInfo": { - "use-content-height": true, - "position-top": { - "target": "BOTTOM", - "widget": "seedLabel" - } - } - }, - { - "type": "ScrollableArea", - "content": { - "type": "propertyLayout", - "id": "properties", - "rowConstraints": "[min]" - }, - "layoutInfo": { - "position-horizontal-center": {}, - "position-top": { - "target": "BOTTOM", - "offset": 8, - "widget": "seed" - }, - "position-bottom": { - "target": "TOP", - "offset": 8, - "widget": "apply" - } - } - }, - { - "type": "UIButton", - "text": "${engine:menu#create-preview}", - "id": "apply", - "layoutInfo": { - "height": 32, - "position-bottom": { - "target": "BOTTOM", - "offset": 4 - } - } - } - ] - } - ] - }, - { - "type": "UIButton", - "text": "${engine:menu#back}", - "id": "close", - "layoutInfo": { - "width": 128, - "height": 32, - "position-horizontal-center": {}, - "position-bottom": { - "target": "BOTTOM", - "offset": 48 - } - } - } - ] - } -} diff --git a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/universeSetupScreen.ui b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/universeSetupScreen.ui index 667f3db9f56..c4290c916a7 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/universeSetupScreen.ui +++ b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/universeSetupScreen.ui @@ -18,24 +18,9 @@ } } }, - { - "type": "UILabel", - "id": "warning", - "text": "${engine:menu#multi-world-warning}", - "family": "warning", - "layoutInfo": { - "height": 12, - "position-horizontal-center": {}, - "position-bottom": { - "target": "TOP", - "widget": "mainBox", - "offset": 36 - } - } - }, { "type": "UIBox", - "id":"mainBox", + "id": "mainBox", "content": { "type": "ColumnLayout", "columns": 1, @@ -59,30 +44,8 @@ "type": "UIDropdownScrollable", "id": "worldGenerators", "layoutInfo": { - "relativeWidth": 0.50 + "relativeWidth": 1.00 } - }, - { - "type": "UISpace", - "size": [ - 1, - 8 - ] - }, - { - "type": "UIButton", - "id": "addGenerator", - "text": "${engine:menu#add}", - "layoutInfo": { - "relativeWidth": 0.30 - } - }, - { - "type": "UISpace", - "size": [ - 1, - 8 - ] } ] }, @@ -92,46 +55,6 @@ 1, 8 ] - }, - { - "type": "UILabel", - "text": "${engine:menu#game-worlds}:", - "family": "left-label" - }, - { - "type": "RowLayout", - "horizontalSpacing": 4, - "contents": [ - { - "type": "UIDropdownScrollable", - "id": "worlds", - "layoutInfo": { - "relativeWidth": 0.50 - } - }, - { - "type": "UISpace", - "size": [ - 1, - 8 - ] - }, - { - "type": "UIButton", - "id": "worldConfig", - "text": "${engine:menu#config}", - "layoutInfo": { - "relativeWidth": 0.30 - } - }, - { - "type": "UISpace", - "size": [ - 1, - 8 - ] - } - ] } ] }, diff --git a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/worldPreGenerationScreen.ui b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/worldPreGenerationScreen.ui index 74aa550f5fe..600dd45cdf9 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/worldPreGenerationScreen.ui +++ b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/worldPreGenerationScreen.ui @@ -41,7 +41,10 @@ "id": "coreLayout", "columns": 2, "horizontalSpacing": 8, - "column-widths": [0.53, 0.47], + "column-widths": [ + 0.53, + 0.47 + ], "layoutInfo": { "width": 704, "use-content-height": true, @@ -133,16 +136,11 @@ } }, { - "type": "UIDropdownScrollable", - "id": "worlds", - "layoutInfo": { - "position-horizontal-center": {}, - "position-top": { - "target": "BOTTOM", - "widget": "worldGenLabel", - "offset": 0 - } - } + "type": "engine:UIText", + "id": "worldName", + "readOnly": true, + "enabled": false, + "layoutInfo": {} }, { "type": "RowLayout", diff --git a/engine/src/main/resources/org/terasology/engine/assets/ui/worldSetupScreen.ui b/engine/src/main/resources/org/terasology/engine/assets/ui/worldSetupScreen.ui index 427be1445be..0260c70e9e3 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/ui/worldSetupScreen.ui +++ b/engine/src/main/resources/org/terasology/engine/assets/ui/worldSetupScreen.ui @@ -60,29 +60,6 @@ "type": "RelativeLayout", "family": "description", "contents": [ - { - "type": "RowLayout", - "id": "shape", - "layoutInfo": { - "use-content-height": true, - "position-horizontal-center": {}, - "position-top": { - "target": "TOP" - } - }, - "contents": [ - { - "type": "UILabel", - "text": "World Shape:", - "enabled": false - }, - { - "type": "UIDropdownScrollable", - "id": "worlds", - "enabled": false - } - ] - }, { "type": "RowLayout", "id": "customNameWorld", @@ -90,15 +67,13 @@ "use-content-height": true, "position-horizontal-center": {}, "position-top": { - "target": "BOTTOM", - "offset": 8, - "widget": "shape" + "target": "TOP" } }, "contents": [ { "type": "UILabel", - "text": "World Name" + "text": "${engine:menu#world-name}" }, { "type": "UIText",