예제 #1
0
 public void CloseOverworldEditor()
 {
     _overworldEditor = null;
 }
예제 #2
0
        void LoadInterface()
        {
            // ===== MAIN MENU =====
            var grid = new Grid
            {
                RowSpacing    = 10,
                ColumnSpacing = 20
            };

            grid.ColumnsProportions.Add(new Proportion(ProportionType.Auto));
            grid.HorizontalAlignment = HorizontalAlignment.Center;
            grid.RowsProportions.Add(new Proportion(ProportionType.Auto));
            grid.VerticalAlignment = VerticalAlignment.Center;

            var labelType = new Label
            {
                Id         = "labelType",
                Text       = "Choose the element to modify:",
                GridColumn = 0,
                GridRow    = 0,
            };

            grid.Widgets.Add(labelType);

            var comboType = new ComboBox
            {
                GridColumn = 1,
                GridRow    = 0,
                Width      = 150
            };

            comboType.Items.Add(new ListItem("Walls", Color.White));
            comboType.Items.Add(new ListItem("Ground", Color.White));
            if (Settings.Paradise)
            {
                comboType.Items.Add(new ListItem("Ground 2", Color.White));
            }
            comboType.Items.Add(new ListItem("Background", Color.White));
            comboType.Items.Add(new ListItem("MiniMap", Color.White));
            grid.Widgets.Add(comboType);

            var labelMap = new Label
            {
                Id         = "labelMap",
                Text       = "Choose the map to modify:",
                GridColumn = 0,
                GridRow    = 1,
            };

            grid.Widgets.Add(labelMap);

            var comboMap = new ComboBox
            {
                GridColumn = 1,
                GridRow    = 1,
                Width      = 150
            };

            foreach (string name in Levels.AllLevels)
            {
                comboMap.Items.Add(new ListItem(name, Color.White));
            }
            grid.Widgets.Add(comboMap);

            var buttonEdit = new TextButton
            {
                GridColumn  = 2,
                GridRow     = 0,
                GridRowSpan = 2,
                Text        = "Edit map",
                Width       = 150,
                Height      = 60
            };

            buttonEdit.Click += (s, a) =>
            {
                if (comboMap.SelectedIndex == null || comboType.SelectedIndex == null)
                {
                    PleaseSelectMapMsg();
                }
                else
                {
                    mode = IndexToSelectedMode(comboType.SelectedIndex);
                    map  = comboMap.SelectedItem.Text;
                    if (!LoadGrid())
                    {
                        mode = Mode.Menu;
                    }
                }
            };

            grid.Widgets.Add(buttonEdit);

            // Edit times
            var buttonEditTimesF = new TextButton
            {
                GridColumn = 3,
                GridRow    = 0,
                Text       = "Edit times (in frame)",
                Width      = 150,
                Height     = 25
            };

            buttonEditTimesF.Click += (s, a) =>
            {
                _timesEditor = new TimesEditor(this, false);
            };
            grid.Widgets.Add(buttonEditTimesF);

            var buttonEditTimesS = new TextButton
            {
                GridColumn = 3,
                GridRow    = 1,
                Text       = "Edit times",
                Width      = 150,
                Height     = 25
            };

            buttonEditTimesS.Click += (s, a) =>
            {
                _timesEditor = new TimesEditor(this, true);
            };
            grid.Widgets.Add(buttonEditTimesS);

            // Edit overworld data (Paradise only for now)
            if (Settings.Paradise)
            {
                var buttonEditOverworld = new TextButton
                {
                    GridColumn = 3,
                    GridRow    = 2,
                    Text       = "Edit overworld",
                    Width      = 150,
                    Height     = 25
                };

                buttonEditOverworld.Click += (s, a) =>
                {
                    _overworldEditor = new OverworldEditor(this);
                };
                grid.Widgets.Add(buttonEditOverworld);
            }

            // Reset
            var buttonReset = new TextButton
            {
                GridColumn = 4,
                GridRow    = 0,
                Text       = "Reset this map",
                Width      = 150,
                Height     = 25
            };

            buttonReset.Click += (s, a) =>
            {
                if (comboMap.SelectedIndex == null || comboType.SelectedIndex == null)
                {
                    PleaseSelectMapMsg();
                }
                else
                {
                    var messageBox = Dialog.CreateMessageBox("Confirmation", "Are you sure ? This level will be reset.");
                    messageBox.Closed += (s, a) =>
                    {
                        if (messageBox.Result)
                        {
                            Task.Factory.StartNew(() => {
                                try
                                {
                                    mode = Mode.Loading;
                                    File.Delete(Levels.GetLevelPath(comboMap.SelectedItem.Text,
                                                                    MapType(IndexToSelectedMode(comboType.SelectedIndex))));
                                    Settings.RunExtractor("");
                                    mode = Mode.Menu;
                                }
                                catch { Exit(); }
                            });
                        }
                    };
                    messageBox.ShowModal(_mainMenuDesktop);
                }
            };
            grid.Widgets.Add(buttonReset);

            var buttonResetAll = new TextButton
            {
                GridColumn = 4,
                GridRow    = 1,
                Text       = "Reset ALL maps",
                Width      = 150,
                Height     = 25
            };

            buttonResetAll.Click += (s, a) =>
            {
                var messageBox = Dialog.CreateMessageBox("Confirmation", "Are you sure ? ALL levels will be reset.");
                messageBox.Closed += (s, a) =>
                {
                    if (messageBox.Result)
                    {
                        Task.Factory.StartNew(() => {
                            try
                            {
                                mode = Mode.Loading;
                                Levels.DeleteAllLevels();
                                Settings.RunExtractor("");
                                reloadAtNextFrame = true;
                            }
                            catch { Exit(); }
                        });
                    }
                };
                messageBox.ShowModal(_mainMenuDesktop);
            };
            grid.Widgets.Add(buttonResetAll);
            // Build
            var buttonBuild = new TextButton
            {
                GridColumn  = 2,
                GridRow     = 2,
                GridRowSpan = 1,
                Text        = "Build",
                Width       = 150,
                Height      = 25
            };

            buttonBuild.Click += (s, a) =>
            {
                Task.Factory.StartNew(() => {
                    try
                    {
                        mode = Mode.Loading;
                        Settings.RunExtractor("");
                        mode = Mode.Menu;
                    }
                    catch { Exit(); }
                });
            };
            grid.Widgets.Add(buttonBuild);

            var buttonBuildAndRun = new TextButton
            {
                GridColumn  = 2,
                GridRow     = 3,
                GridRowSpan = 1,
                Text        = "Build and run",
                Width       = 150,
                Height      = 25
            };

            buttonBuildAndRun.Click += (s, a) =>
            {
                Task.Factory.StartNew(() => {
                    try
                    {
                        mode = Mode.Loading;
                        Settings.RunExtractor("");
                        mode = Mode.Menu;
                        Settings.RunEmulator();
                    }
                    catch { Exit(); }
                });
            };
            grid.Widgets.Add(buttonBuildAndRun);

            _mainMenuDesktop      = new Desktop();
            _mainMenuDesktop.Root = grid;

            // ===== LATERAL MENU =====
            Panel panel = new Panel()
            {
                Left       = 0,
                Padding    = new Thickness(10, 10, 10, 10),
                Width      = LATERAL_PANEL_WIDTH,
                Background = new SolidBrush(Color.Transparent),
            };

            var lateral = new Grid
            {
                RowSpacing    = 10,
                ColumnSpacing = 10
            };

            lateral.ColumnsProportions.Add(new Proportion(ProportionType.Auto));
            lateral.HorizontalAlignment = HorizontalAlignment.Left;
            lateral.RowsProportions.Add(new Proportion(ProportionType.Part));
            lateral.VerticalAlignment = VerticalAlignment.Top;

            var buttonSave = new TextButton
            {
                GridColumn = 0,
                GridRow    = 0,
                Text       = "Save",
                Width      = 40,
                Height     = 30
            };

            buttonSave.Click += (s, a) =>
            {
                SaveGrid();
                _inventories.Save();
            };
            lateral.Widgets.Add(buttonSave);

            var buttonSaveQuit = new TextButton
            {
                GridColumn     = 1,
                GridRow        = 0,
                Text           = "Save + quit",
                Width          = 90,
                Height         = 30,
                GridColumnSpan = 2
            };

            buttonSaveQuit.Click += (s, a) =>
            {
                SaveGrid();
                QuitEditor();
            };
            lateral.Widgets.Add(buttonSaveQuit);

            var buttonQuit = new TextButton
            {
                GridColumn = 3,
                GridRow    = 0,
                Text       = "Quit",
                Width      = 40,
                Height     = 30
            };

            buttonQuit.Click += (s, a) =>
            {
                QuitEditor();
            };
            lateral.Widgets.Add(buttonQuit);

            var buttonWP = new TextButton
            {
                GridColumn = 0,
                GridRow    = 1,
                Text       = "W+",
                Width      = 40,
                Height     = 30
            };

            buttonWP.Click += (s, a) =>
            {
                editor.IncreaseWidth();
            };
            lateral.Widgets.Add(buttonWP);
            var buttonWM = new TextButton
            {
                GridColumn = 1,
                GridRow    = 1,
                Text       = "W-",
                Width      = 40,
                Height     = 30
            };

            buttonWM.Click += (s, a) =>
            {
                editor.DecreaseWidth();
            };
            lateral.Widgets.Add(buttonWM);
            var buttonHP = new TextButton
            {
                GridColumn = 2,
                GridRow    = 1,
                Text       = "H+",
                Width      = 40,
                Height     = 30
            };

            buttonHP.Click += (s, a) =>
            {
                editor.IncreaseHeight();
            };
            lateral.Widgets.Add(buttonHP);
            var buttonHM = new TextButton
            {
                GridColumn = 3,
                GridRow    = 1,
                Text       = "H-",
                Width      = 40,
                Height     = 30
            };

            buttonHM.Click += (s, a) =>
            {
                editor.DecreaseHeight();
            };
            lateral.Widgets.Add(buttonHM);

            var buttonOP = new TextButton
            {
                GridColumn     = 0,
                GridRow        = 2,
                Text           = "Overlay +",
                Width          = 90,
                Height         = 30,
                GridColumnSpan = 2
            };

            buttonOP.Click += (s, a) =>
            {
                List <GridEditor.OverlayGrid> overlays = new List <GridEditor.OverlayGrid>();
                overlays.AddRange(editor.Underlays);
                overlays.AddRange(editor.Overlays);
                overlays.Reverse();
                foreach (GridEditor.OverlayGrid overlay in overlays)
                {
                    if (!overlay.enabled)
                    {
                        overlay.enabled = true;
                        break;
                    }
                }
            };
            lateral.Widgets.Add(buttonOP);
            var buttonOM = new TextButton
            {
                GridColumn     = 2,
                GridRow        = 2,
                Text           = "Overlay -",
                Width          = 90,
                Height         = 30,
                GridColumnSpan = 2
            };

            buttonOM.Click += (s, a) =>
            {
                List <GridEditor.OverlayGrid> overlays = new List <GridEditor.OverlayGrid>();
                overlays.AddRange(editor.Underlays);
                overlays.AddRange(editor.Overlays);
                foreach (GridEditor.OverlayGrid overlay in overlays)
                {
                    if (overlay.enabled)
                    {
                        overlay.enabled = false;
                        break;
                    }
                }
            };
            lateral.Widgets.Add(buttonOM);

            var buttonGOn = new TextButton
            {
                GridColumn     = 0,
                GridRow        = 3,
                Text           = "Grid On",
                Width          = 90,
                Height         = 30,
                GridColumnSpan = 2
            };

            buttonGOn.Click += (s, a) =>
            {
                editor.GridEnabled = true;
            };
            lateral.Widgets.Add(buttonGOn);
            var buttonGOff = new TextButton
            {
                GridColumn     = 2,
                GridRow        = 3,
                Text           = "Grid Off",
                Width          = 90,
                Height         = 30,
                GridColumnSpan = 2
            };

            buttonGOff.Click += (s, a) =>
            {
                editor.GridEnabled = false;
            };
            lateral.Widgets.Add(buttonGOff);

            var buttonSpecial = new TextButton
            {
                GridColumn     = 0,
                GridRow        = 4,
                Text           = "Special Objects",
                Width          = 180,
                Height         = 30,
                GridColumnSpan = 4
            };

            buttonSpecial.Click += (s, a) =>
            {
                if (mode == Mode.Physical)
                {
                    if (Settings.Paradise)
                    {
                        _paraSpecialItemInterface = new ParadiseSpecialItems(this, _paraPhysicalMapLogic);
                    }
                    else
                    {
                        _physicalMapLogic     = new PhysicalMapLogic(editor.MapGrid);
                        _specialItemInterface = new SpecialItems(this, _physicalMapLogic);
                    }
                }
                else
                {
                    var messageBox = Dialog.CreateMessageBox("Error", "Special items can only be edited in Wall edition mode.");
                    messageBox.ShowModal(_lateralMenuDesktop);
                }
            };
            lateral.Widgets.Add(buttonSpecial);

            var buttonHelp = new TextButton
            {
                GridColumn     = 0,
                GridRow        = 5,
                Text           = "Help",
                Width          = 180,
                Height         = 30,
                GridColumnSpan = 4
            };

            buttonHelp.Click += (s, a) =>
            {
                var messageBox = Dialog.CreateMessageBox("Commands",
                                                         "Move: CTRL+LeftClick or Arrows\n" +
                                                         "Zoom: CTRL+Wheel or CTRL+[+/-]\n" +
                                                         "Next / Previous palette: Wheel\n" +
                                                         "Make a selection: ALT+LeftClick\n" +
                                                         "Brush size: ALT+Wheel or ALT+[+/-]\n" +
                                                         "Flip selection: SHIFT+Wheel or SHIFT+Arrows\n" +
                                                         "Force palette of selection: SHIFT+Space\n" +
                                                         "Open/Close inventory: Space\n" +
                                                         "Open/Close custom inventory: Enter\n" +
                                                         "Undo / Redo: CTRL+Z / CTRL+Y"
                                                         );
                messageBox.ShowModal(_lateralMenuDesktop);
            };
            lateral.Widgets.Add(buttonHelp);

            var buttonSBR = new TextButton
            {
                GridColumn     = 0,
                GridRow        = 17,
                Text           = "Save, build and run",
                Width          = 180,
                Height         = 30,
                GridColumnSpan = 4
            };

            buttonSBR.Click += (s, a) =>
            {
                SaveGrid();
                _inventories.Save();
                Task.Factory.StartNew(() => {
                    try
                    {
                        Mode mode_bkp = mode;
                        mode          = Mode.Loading;
                        Settings.RunExtractor("");
                        mode = mode_bkp;
                        Settings.RunEmulator();
                    }
                    catch { Exit(); }
                });
            };
            lateral.Widgets.Add(buttonSBR);

            panel.Widgets.Add(lateral);
            _lateralMenuDesktop      = new Desktop();
            _lateralMenuDesktop.Root = panel;

            mode = Mode.Menu;
        }