package org.terasology.rendering.gui.dialogs; import javax.vecmath.Vector2f; import org.newdawn.slick.Color; import org.spout.api.Spout; import org.terasology.game.CoreRegistry; import org.terasology.game.TerasologyEngine; import org.terasology.game.modes.StateSinglePlayer; import org.terasology.logic.manager.Config; import org.terasology.logic.manager.GUIManager; import org.terasology.rendering.gui.components.UIButton; import org.terasology.rendering.gui.components.UIDialogBox; import org.terasology.rendering.gui.components.UIInput; import org.terasology.rendering.gui.components.UIList; import org.terasology.rendering.gui.components.UIText; import org.terasology.rendering.gui.framework.IClickListener; import org.terasology.rendering.gui.framework.UIDisplayElement; import org.terasology.utilities.FastRandom; /* * Dialog for generate new world * * @author Anton Kireev <adeon.k87@gmail.com> * @version 0.1 */ public class UIDialogCreateNewWorld extends UIDialogBox { private UIButton _okButton; private UIButton _cancelButton; private UIText _inputSeedLabel; private UIInput _inputSeed; private UIText _inputWorldTitleLabel; private UIInput _inputWorldTitle; public UIDialogCreateNewWorld(String title, Vector2f size) { super(title, size); _inputSeed = new UIInput(new Vector2f(256f, 30f)); _inputSeed.setVisible(true); _inputWorldTitle = new UIInput(new Vector2f(256f, 30f)); _inputWorldTitle.setVisible(true); _inputWorldTitleLabel = new UIText("Enter a world name:"); _inputWorldTitleLabel.setColor(Color.darkGray); _inputWorldTitleLabel.getSize().y = 16f; _inputWorldTitleLabel.setVisible(true); _inputSeedLabel = new UIText("Enter a seed (optional):"); _inputSeedLabel.setColor(Color.darkGray); _inputSeedLabel.getSize().y = 16f; _inputSeedLabel.setVisible(true); _inputWorldTitleLabel.setPosition(new Vector2f(15f, 32f)); _inputWorldTitle.setPosition(new Vector2f(_inputWorldTitleLabel.getPosition().x, _inputWorldTitleLabel.getPosition().y + _inputWorldTitleLabel.getSize().y + 8f)); _inputSeedLabel.setPosition(new Vector2f(_inputWorldTitle.getPosition().x, _inputWorldTitle.getPosition().y + _inputWorldTitle.getSize().y + 16f)); _inputSeed.setPosition(new Vector2f(_inputSeedLabel.getPosition().x, _inputSeedLabel.getPosition().y + _inputSeedLabel.getSize().y + 8f)); _okButton = new UIButton(new Vector2f(128f, 32f)); _okButton.getLabel().setText("Play"); _okButton.setPosition(new Vector2f(size.x / 2 - _okButton.getSize().x - 16f, size.y - _okButton.getSize().y)); _okButton.setVisible(true); _okButton.addClickListener(new IClickListener() { public void clicked(UIDisplayElement element) { if (_inputSeed.getValue().length() > 0) { Config.getInstance().setDefaultSeed(_inputSeed.getValue()); } else { FastRandom random = new FastRandom(); Config.getInstance().setDefaultSeed(random.randomCharacterString(32)); } if (_inputWorldTitle.getValue().length() > 0) { Config.getInstance().setWorldTitle(_inputWorldTitle.getValue()); } else { Config.getInstance().setWorldTitle(getWorldName()); } CoreRegistry.get(TerasologyEngine.class).changeState(new StateSinglePlayer((TerasologyEngine)(Spout.getEngine()))); } }); _cancelButton = new UIButton(new Vector2f(128f, 32f)); _cancelButton.setPosition(new Vector2f(_okButton.getPosition().x + _okButton.getSize().x + 16f, _okButton.getPosition().y)); _cancelButton.getLabel().setText("Cancel"); _cancelButton.setVisible(true); _cancelButton.addClickListener(new IClickListener() { public void clicked(UIDisplayElement element) { close(true); } }); addDisplayElement(_okButton, "okButton"); addDisplayElement(_cancelButton, "cancelButton"); addDisplayElement(_inputSeed, "inputSeed"); addDisplayElement(_inputSeedLabel, "inputSeedLabel"); addDisplayElement(_inputWorldTitleLabel, "inputWorldTitleLabel"); addDisplayElement(_inputWorldTitle, "inputWorldTitle"); } public String getWorldName() { UIList list = (UIList) GUIManager.getInstance().getWindowById("selectWorld").getElementById("list"); return "World" + (list.size() + 1); } }