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); }
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); } }
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); }
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); }