public override void MousePressed(MouseState mouseState, Vector2 offset) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; if (mouseState.MiddlePressed()) { PanIsPressed = true; } else if (mouseState.LeftPressed()) { Vector2 mousePos = new Vector2(mouseState.X, mouseState.Y) - offset - Position - SoftOffset; if (actualGame.CurrentWorldLayer != null) { WorldItem item = new WorldItem(UIManager, actualGame.CurrentWorldItemType, SnapPosition(mousePos), actualGame.CurrentWorldLayer.DrawLayer); actualGame.CurrentWorldLayer.WorldItems.Add(item); } } else if (mouseState.RightPressed()) { if (actualGame.CurrentWorldLayer != null) { Vector2 mousePos = GetMousePosition(offset); for (int i = 0; i < actualGame.CurrentWorldLayer.WorldItems.Count; i++) { WorldItem item = actualGame.CurrentWorldLayer.WorldItems[i]; if (PlatformerMath.PointInRectangle(new Rectangle(item.Position.ToPoint(), item.Size.ToPoint()), mousePos)) { actualGame.CurrentWorldLayer.WorldItems.RemoveAt(i); break; } } } } base.MousePressed(mouseState, offset); }
public void AddLayer(int layer) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; if (actualGame.GetWorldLayer(layer) != null) { return; } GroupElement group = new GroupElement(UIManager, new Vector2(0, 0), new Vector2(128, 32), Layer + 0.01f, Name + "_" + layer.ToString()); ButtonElement layerButton = new ButtonElement(UIManager, new Vector2(0, 0), new Vector2(96, 32), group.Layer + 0.01f, group.Name + "_button", "layer " + layer.ToString()); layerButton.Click = () => { WorldLayer worldLayer = actualGame.GetWorldLayer(layer); actualGame.CurrentWorldLayer = worldLayer; }; CheckboxElement layerDisplayCheckbox = new CheckboxElement(UIManager, new Vector2(layerButton.Size.X, 0), new Vector2(32, 32), group.Layer + 0.01f, group.Name + "_checkbox", true); layerDisplayCheckbox.Tick = (ticked) => { WorldLayer worldLayer = actualGame.GetWorldLayer(layer); if (worldLayer != null) { worldLayer.IsVisible = ticked; } }; group.Elements.Add(layerButton); group.Elements.Add(layerDisplayCheckbox); AddItem(group); layerButtonGroups.Add(group); }
static void Main() { using (var game = new PlatformerEditor()) { Action endCb = ConsoleManager.Start(); game.Run(); endCb(); } }
public WorldItemListElement(UIManager uiManager, Vector2 position, Vector2 size, float layer, string name) : base(uiManager, position, size, layer, name) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; ButtonElement resetObject = new ButtonElement(UIManager, new Vector2(0, 0), new Vector2(64, 32), Layer + 0.01f, Name + "_none", "-none-"); resetObject.Click = () => { actualGame.CurrentWorldItemType = null; }; AddItem(resetObject); WorldItemTypes = new List <WorldItemType>(); }
public void AddWorldItem(WorldItemType item) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; GroupElement group = new GroupElement(UIManager, new Vector2(0, 0), new Vector2(128, 32), Layer + 0.01f, Name + "_" + item.Name); ButtonElement itemButton = new ButtonElement(UIManager, new Vector2(0, 0), new Vector2(96, 32), Layer + 0.01f, group.Name + "_button", item.Name); itemButton.Click = () => { actualGame.CurrentWorldItemType = item; }; group.Elements.Add(itemButton); WorldItemTypes.Add(item); AddItem(group); }
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); Elements.Add(new SettingsElement(UIManager, new Vector2(actualGame.GraphicsDevice.Viewport.Width - 128, 0), new Vector2(128, 692), 0.4f, "box_settings")); }
public override void MouseReleased(MouseState mouseState, Vector2 offset) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; if (!mouseState.MiddlePressed()) { PanIsPressed = false; } else if (!mouseState.LeftPressed()) { if (!(actualGame.CurrentWorldLayer != null && actualGame.CurrentWorldItemType != null)) { PanIsPressed = false; } } base.MouseReleased(mouseState, offset); }
public WorldLayerListElement(UIManager uiManager, Vector2 position, Vector2 size, float layer, string name) : base(uiManager, position, size, layer, name) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; GroupElement group = new GroupElement(UIManager, new Vector2(0, 0), new Vector2(128, 32), Layer, Name + "_add"); ButtonElement addLayerButton = new ButtonElement(UIManager, new Vector2(0, 0), new Vector2(64, 32), Layer + 0.01f, group.Name + "_button", "add layer"); TextInputElement addLayerInput = new TextInputElement(UIManager, new Vector2(64, 0), new Vector2(64, 32), Layer + 0.01f, group.Name + "_input"); addLayerInput.ValidKeys = "0123456789".ToCharArray(); addLayerButton.Click = () => { if (addLayerInput.Text.Length > 0) { actualGame.AddWorldLayer(int.Parse(addLayerInput.Text)); addLayerInput.Text = ""; } }; group.Elements.Add(addLayerButton); group.Elements.Add(addLayerInput); AddItem(group); layerButtonGroups = new List <GroupElement>(); }
public override void Draw(SpriteBatch spriteBatch, Vector2 offset) { PlatformerEditor actualGame = (PlatformerEditor)UIManager.Game; spriteBatch.End(); spriteBatch.GraphicsDevice.SetRenderTarget(Graphics); //draw grid spriteBatch.Begin(UIManager.SortMode); spriteBatch.GraphicsDevice.Clear(Color.Transparent); //Vector2 actualOffset = offset + SoftOffset;// + Position; Vector2 actualOffset = SoftOffset; for (int i = (int)actualOffset.X; i <= actualOffset.X + LevelSize.X; i += (int)Snap.X) { spriteBatch.DrawLine(new Vector2(i, actualOffset.Y), new Vector2(i, actualOffset.Y + LevelSize.Y), Color.Black); } for (int i = (int)actualOffset.Y; i <= actualOffset.Y + LevelSize.Y; i += (int)Snap.Y) { spriteBatch.DrawLine(new Vector2(actualOffset.X, i), new Vector2(actualOffset.X + LevelSize.X, i), Color.Black); } spriteBatch.End(); //draw layers List <int> layerKeys = new List <int>(actualGame.WorldLayers.Keys); //TODO: this is probably slow. make it not layerKeys.Sort((a, b) => { return(Math.Sign(b - a)); }); for (int i = 0; i < layerKeys.Count; i++) { WorldLayer worldLayer = actualGame.WorldLayers[layerKeys[i]]; if (!worldLayer.IsVisible) { continue; } spriteBatch.Begin(UIManager.SortMode); for (int j = 0; j < worldLayer.WorldItems.Count; j++) { WorldItem item = worldLayer.WorldItems[j]; item.Draw(spriteBatch, actualOffset); } spriteBatch.End(); } //draw mouse item if (actualGame.CurrentWorldItemType == null && CurrentWorldItem != null) { CurrentWorldItem = null; } else if ((actualGame.CurrentWorldItemType != null && CurrentWorldItem == null) || (actualGame.CurrentWorldItemType != null && CurrentWorldItem.ItemType != actualGame.CurrentWorldItemType)) { CurrentWorldItem = new WorldItem(UIManager, actualGame.CurrentWorldItemType, SnapPosition(GetMousePosition(offset)), 0.6f); } else if (CurrentWorldItem != null) { CurrentWorldItem.Position = SnapPosition(GetMousePosition(offset)); } spriteBatch.Begin(UIManager.SortMode); CurrentWorldItem?.Draw(spriteBatch, actualOffset); spriteBatch.End(); spriteBatch.GraphicsDevice.SetRenderTarget(null); spriteBatch.Begin(UIManager.SortMode); spriteBatch.Draw(Graphics, Position + offset, Color.White); }
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); }