예제 #1
0
        public void SaveLevel(string filename)
        {
            LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
            JObject      levelObject  = new JObject();

            levelObject.Add("width", JToken.FromObject((int)levelElement.LevelSize.X));
            levelObject.Add("height", JToken.FromObject((int)levelElement.LevelSize.Y));
            if (levelElement.Gravity.X != 0 || levelElement.Gravity.Y != 0)
            {
                JObject physicsObject = new JObject();
                physicsObject.Add("gravityx", JToken.FromObject(levelElement.Gravity.X));
                physicsObject.Add("gravityy", JToken.FromObject(levelElement.Gravity.Y));
                levelObject.Add("physics", JToken.FromObject(physicsObject));
            }
            JArray layerArray = new JArray();

            foreach (KeyValuePair <int, WorldLayer> pair in WorldLayers)
            {
                WorldLayer worldLayer  = pair.Value;
                JObject    layerObject = new JObject();
                layerObject.Add("layer", JToken.FromObject(worldLayer.Layer));
                JArray objectArray = new JArray();
                JArray tileArray   = new JArray();
                for (int j = 0; j < worldLayer.WorldItems.Count; j++)
                {
                    WorldItem item       = worldLayer.WorldItems[j];
                    JObject   itemObject = new JObject();
                    itemObject.Add("name", JToken.FromObject(item.ItemType.InternalName));
                    itemObject.Add("x", JToken.FromObject((int)item.Position.X));
                    itemObject.Add("y", JToken.FromObject((int)item.Position.Y));
                    if (item.ItemType.IsTile)
                    {
                        tileArray.Add(JToken.FromObject(itemObject));
                    }
                    else
                    {
                        objectArray.Add(JToken.FromObject(itemObject));
                    }
                }
                layerObject.Add("objects", JToken.FromObject(objectArray));
                layerObject.Add("tiles", JToken.FromObject(tileArray));
                layerArray.Add(JToken.FromObject(layerObject));
            }
            levelObject.Add("layers", JToken.FromObject(layerArray));
            string json = levelObject.ToString();

            File.WriteAllText(filename, json);
        }
예제 #2
0
        public void LoadLevel(string filename)
        {
            string json;

            try
            {
                json = File.ReadAllText(filename, Encoding.UTF8);
            }
            catch
            {
                return;
            }
            JObject levelObject = JObject.Parse(json);

            WorldLayers.Clear();
            WorldLayerListElement.ClearLayers();
            CurrentWorldLayer = null;
            LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
            int          levelWidth   = (int)levelObject.GetValue("width").ToObject(typeof(int));
            int          levelHeight  = (int)levelObject.GetValue("height").ToObject(typeof(int));

            levelElement.LevelSize = new Vector2(levelWidth, levelHeight);
            if (levelObject.ContainsKey("physics"))
            {
                JObject physicsObject = (JObject)levelObject.GetValue("physics").ToObject(typeof(JObject));
                float   gravityX      = (float)physicsObject.GetValue("gravityx").ToObject(typeof(float));
                float   gravityY      = (float)physicsObject.GetValue("gravityy").ToObject(typeof(float));
                levelElement.Gravity = new Vector2(gravityX, gravityY);
            }
            JArray layerArray = (JArray)levelObject.GetValue("layers").ToObject(typeof(JArray));

            foreach (JToken token in layerArray)
            {
                JObject          layerObject = (JObject)token.ToObject(typeof(JObject));
                int              layer       = (int)layerObject.GetValue("layer").ToObject(typeof(int));
                WorldLayer       worldLayer  = new WorldLayer(layer);
                JArray           objectArray = (JArray)layerObject.GetValue("objects").ToObject(typeof(JArray));
                JArray           tileArray   = (JArray)layerObject.GetValue("tiles").ToObject(typeof(JArray));
                List <WorldItem> objectList  = LoadWorldItemsFromJArray(objectArray, worldLayer.DrawLayer);
                List <WorldItem> tileList    = LoadWorldItemsFromJArray(tileArray, worldLayer.DrawLayer);
                worldLayer.WorldItems.AddRange(objectList);
                worldLayer.WorldItems.AddRange(tileList);
                AddWorldLayer(worldLayer);
            }
        }
예제 #3
0
        public LevelTab(UIManager uiManager, Vector2 position, Vector2 size, float layer, string name) : base(uiManager, position, size, layer, name)
        {
            PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game;

            Elements.Add(new LevelElement(UIManager, new Vector2(0, 0), new Vector2(Size.X, Size.Y), 0.3f, "level"));
            actualGame.WorldLayerListElement = new WorldLayerListElement(UIManager, new Vector2(0, 0), new Vector2(128, 256), 0.4f, "list_layers");
            Elements.Add(actualGame.WorldLayerListElement);
            actualGame.ObjectListElement = new WorldItemListElement(UIManager, new Vector2(0, 0), new Vector2(128, 240), 0.4f, "list_objects");
            actualGame.TileListElement   = new WorldItemListElement(UIManager, new Vector2(0, 0), new Vector2(128, 240), 0.4f, "list_tiles");
            TabbedElement worldItemTabs = new TabbedElement(UIManager, new Vector2(0, 256), new Vector2(128, 256), 0.4f, "tabs_worlditems", 16);

            worldItemTabs.AddTab("objects", actualGame.ObjectListElement, 64);
            worldItemTabs.AddTab("tiles", actualGame.TileListElement, 64);
            Elements.Add(worldItemTabs);
            TextInputElement filenameInputElement = new TextInputElement(UIManager, new Vector2(0, 512), new Vector2(128, 24), 0.4f, "input_filename");
            ButtonElement    loadButton           = new ButtonElement(UIManager, new Vector2(0, 536), new Vector2(48, 24), 0.4f, "button_load", "load");

            loadButton.Click = () =>
            {
                string filename = filenameInputElement.Text;
                if (filename.Length == 0)
                {
                    return;
                }
                actualGame.LoadLevel(filename);
            };
            ButtonElement saveButton = new ButtonElement(UIManager, new Vector2(48, 536), new Vector2(48, 24), 0.4f, "button_save", "save");

            saveButton.Click = () =>
            {
                string filename = filenameInputElement.Text;
                if (filename.Length == 0)
                {
                    return;
                }
                actualGame.SaveLevel(filename);
            };
            Elements.Add(filenameInputElement);
            Elements.Add(loadButton);
            Elements.Add(saveButton);
            TextInputElement snapXInput    = new TextInputElement(UIManager, new Vector2(0, 560), new Vector2(56, 24), 0.4f, "input_snap_x");
            TextInputElement snapYInput    = new TextInputElement(UIManager, new Vector2(56, 560), new Vector2(56, 24), 0.4f, "input_snap_y");
            ButtonElement    setSnapButton = new ButtonElement(UIManager, new Vector2(0, 584), new Vector2(64, 20), 0.4f, "button_snap_set", "set snap");

            setSnapButton.Click = () =>
            {
                LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
                levelElement.Snap = new Vector2(int.Parse(snapXInput.Text), int.Parse(snapYInput.Text));
            };
            Elements.Add(snapXInput);
            Elements.Add(snapYInput);
            Elements.Add(setSnapButton);

            TextInputElement gravityXInput    = new TextInputElement(UIManager, new Vector2(0, 604), new Vector2(56, 24), 0.4f, "input_gravity_x");
            TextInputElement gravityYInput    = new TextInputElement(UIManager, new Vector2(56, 604), new Vector2(56, 24), 0.4f, "input_gravity_y");
            ButtonElement    setGravityButton = new ButtonElement(UIManager, new Vector2(0, 628), new Vector2(64, 20), 0.4f, "button_gravity_set", "set gravity");

            setGravityButton.Click = () =>
            {
                LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
                string       xText        = gravityXInput.Text;
                if (xText.Length == 0)
                {
                    xText = "0";
                }
                string yText = gravityYInput.Text;
                if (yText.Length == 0)
                {
                    yText = "0";
                }
                levelElement.Gravity = new Vector2(int.Parse(xText), int.Parse(yText));
            };
            Elements.Add(gravityXInput);
            Elements.Add(gravityYInput);
            Elements.Add(setGravityButton);

            TextInputElement roomWidthInput    = new TextInputElement(UIManager, new Vector2(0, 648), new Vector2(56, 24), 0.4f, "input_room_height");
            TextInputElement roomHeightInput   = new TextInputElement(UIManager, new Vector2(56, 648), new Vector2(56, 24), 0.4f, "input_room_width");
            ButtonElement    setRoomSizeButton = new ButtonElement(UIManager, new Vector2(0, 672), new Vector2(64, 20), 0.4f, "button_room_size_set", "set room size");

            setRoomSizeButton.Click = () =>
            {
                LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
                string       xText        = roomWidthInput.Text;
                if (xText.Length == 0)
                {
                    xText = "0";
                }
                string yText = roomHeightInput.Text;
                if (yText.Length == 0)
                {
                    yText = "0";
                }
                levelElement.LevelSize = new Vector2(int.Parse(xText), int.Parse(yText));
            };
            Elements.Add(roomWidthInput);
            Elements.Add(roomHeightInput);
            Elements.Add(setRoomSizeButton);
        }
예제 #4
0
        public SettingsElement(UIManager uiManager, Vector2 position, Vector2 size, float layer, string name) : base(uiManager, position, size, layer, name)
        {
            PlatformerEditor actualGame           = (PlatformerEditor)UIManager.Game;
            TextInputElement filenameInputElement = new TextInputElement(UIManager, new Vector2(0, 0), new Vector2(128, 24), 0.4f, "input_filename");
            ButtonElement    loadButton           = new ButtonElement(UIManager, new Vector2(0, 24), new Vector2(48, 24), 0.4f, "button_load", "load");

            loadButton.Click = () =>
            {
                string filename = filenameInputElement.Text;
                if (filename.Length == 0)
                {
                    return;
                }
                actualGame.LoadLevel(filename);
            };
            ButtonElement saveButton = new ButtonElement(UIManager, new Vector2(48, 24), new Vector2(48, 24), 0.4f, "button_save", "save");

            saveButton.Click = () =>
            {
                string filename = filenameInputElement.Text;
                if (filename.Length == 0)
                {
                    return;
                }
                actualGame.SaveLevel(filename);
            };
            Elements.Add(filenameInputElement);
            Elements.Add(loadButton);
            Elements.Add(saveButton);
            TextInputElement snapXInput    = new TextInputElement(UIManager, new Vector2(0, 48), new Vector2(56, 24), 0.4f, "input_snap_x");
            TextInputElement snapYInput    = new TextInputElement(UIManager, new Vector2(56, 48), new Vector2(56, 24), 0.4f, "input_snap_y");
            ButtonElement    setSnapButton = new ButtonElement(UIManager, new Vector2(0, 72), new Vector2(64, 20), 0.4f, "button_snap_set", "set snap");

            setSnapButton.Click = () =>
            {
                LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
                levelElement.Snap = new Vector2(int.Parse(snapXInput.Text), int.Parse(snapYInput.Text));
            };
            Elements.Add(snapXInput);
            Elements.Add(snapYInput);
            Elements.Add(setSnapButton);

            TextInputElement gravityXInput    = new TextInputElement(UIManager, new Vector2(0, 92), new Vector2(56, 24), 0.4f, "input_gravity_x");
            TextInputElement gravityYInput    = new TextInputElement(UIManager, new Vector2(56, 92), new Vector2(56, 24), 0.4f, "input_gravity_y");
            ButtonElement    setGravityButton = new ButtonElement(UIManager, new Vector2(0, 116), new Vector2(64, 20), 0.4f, "button_gravity_set", "set gravity");

            setGravityButton.Click = () =>
            {
                LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
                string       xText        = gravityXInput.Text;
                if (xText.Length == 0)
                {
                    xText = "0";
                }
                string yText = gravityYInput.Text;
                if (yText.Length == 0)
                {
                    yText = "0";
                }
                levelElement.Gravity = new Vector2(int.Parse(xText), int.Parse(yText));
            };
            Elements.Add(gravityXInput);
            Elements.Add(gravityYInput);
            Elements.Add(setGravityButton);

            TextInputElement roomWidthInput    = new TextInputElement(UIManager, new Vector2(0, 136), new Vector2(56, 24), 0.4f, "input_room_height");
            TextInputElement roomHeightInput   = new TextInputElement(UIManager, new Vector2(56, 136), new Vector2(56, 24), 0.4f, "input_room_width");
            ButtonElement    setRoomSizeButton = new ButtonElement(UIManager, new Vector2(0, 160), new Vector2(64, 20), 0.4f, "button_room_size_set", "set room size");

            setRoomSizeButton.Click = () =>
            {
                LevelElement levelElement = (LevelElement)UIManager.GetUIElement("level");
                string       xText        = roomWidthInput.Text;
                if (xText.Length == 0)
                {
                    xText = "0";
                }
                string yText = roomHeightInput.Text;
                if (yText.Length == 0)
                {
                    yText = "0";
                }
                levelElement.LevelSize = new Vector2(int.Parse(xText), int.Parse(yText));
            };
            Elements.Add(roomWidthInput);
            Elements.Add(roomHeightInput);
            Elements.Add(setRoomSizeButton);
        }