示例#1
0
        public MatchLobbyScreen(
            Vector2f WindowSize, bool Host, MatchLobby Lobby, Chat Chat, Player Player, IEnumerable <Scenario> Scenarios)
            : base(WindowSize)
        {
            _Host  = Host;
            _Lobby = Lobby;
            _Lobby.OnActionApplied += (sender, e) => _Dirty = true;
            _Player    = Player;
            _Scenarios = Scenarios.ToList();

            ChatView = new ChatView(
                Chat, "match-lobby-chat-display", "match-lobby-chat", "match-lobby-chat-message", "text-input");
            ChatView.Position = new Vector2f(_Display.Size.X + 16, 0);

            _LaunchButton.Position = new Vector2f(0, _Pane.Size.Y - _LaunchButton.Size.Y - 32);
            _LaunchButton.Enabled  = Host;
            _LaunchButton.OnClick += HandleLaunched;

            _ScenarioSelect.Enabled   = Host;
            _ScenarioSelect.OnChange += HandleScenarioSelected;

            _Pane.Position = .5f * (WindowSize - _Pane.Size);
            _Pane.Add(_Display);
            _Pane.Add(_LaunchButton);
            _Pane.Add(ChatView);
            DisplayPlayers();
        }
        public MatchRecordSelectScreen(Vector2f WindowSize, string Path)
            : base(WindowSize)
        {
            if (Directory.Exists(Path))
            {
                foreach (FileInfo file in Directory.EnumerateFiles(Path).Select(i => new FileInfo(i)))
                {
                    var option = new SelectionOption <FileInfo>("match-record-selection-option")
                    {
                        DisplayedString = file.Name,
                        Value           = file
                    };
                    _MatchRecordSelect.Add(option);
                }
            }
            _MatchRecordSelect.OnChange += HandleSelect;
            _ScenarioView.Position       = new Vector2f(_MatchRecordSelect.Size.X + 16, 0);

            _StartButton.OnClick += HandleStart;
            _StartButton.Position = new Vector2f(0, _Display.Size.Y - _StartButton.Size.Y - 32);

            _Display.Position = .5f * (WindowSize - _Display.Size);

            _Display.Add(_MatchRecordSelect);
            _Display.Add(_ScenarioView);
            _Display.Add(_StartButton);
            _Items.Add(_Display);
        }
示例#3
0
        public LibraryState()
            : base("Library")
        {
            Util.Assert(CoM.AllDataLoaded, "Data must be loaded before LibraryState can be created.");

            MainWindow.Width  = 600;
            MainWindow.Height = 480;

            // --------------------------------------

            ItemsWindow    = new LibraryItemsView();
            MonstersWindow = new LibraryMonstersView();
            RecordsWindow  = new LibraryRecordsView();

            // --------------------------------------

            var buttonGroup = new GuiRadioButtonGroup();

            buttonGroup.EnableBackground = true;

            buttonGroup.OnValueChanged += delegate {
                ItemsWindow.Visible    = buttonGroup.SelectedIndex == 0;
                MonstersWindow.Visible = buttonGroup.SelectedIndex == 1;
                RecordsWindow.Visible  = buttonGroup.SelectedIndex == 2;
            };

            buttonGroup.AddItem("Items");
            buttonGroup.AddItem("Monsters");
            buttonGroup.AddItem("Records");
            buttonGroup.ButtonSize = new Vector2(120, 28);
            buttonGroup.Height     = 45;
            buttonGroup.Style      = Engine.GetStyleCopy("Solid");
            buttonGroup.Color      = Color.black.Faded(0.5f);
            buttonGroup.Width      = MainWindow.Width;
            buttonGroup.Height     = 45;
            MainWindow.Add(buttonGroup);

            buttonGroup.SelectedIndex = 0;

            // --------------------------------------

            var BodySection = new GuiContainer(MainWindow.Width, MainWindow.Height - buttonGroup.Height)
            {
                Y = buttonGroup.Height
            };

            MainWindow.Add(BodySection);

            BodySection.Add(ItemsWindow);
            BodySection.Add(MonstersWindow);
            BodySection.Add(RecordsWindow);

            // --------------------------------------

            RepositionControls();

            MainWindow.Background.Sprite = ResourceManager.GetSprite("Gui/InnerWindow");
            MainWindow.Background.Color  = new Color(0.4f, 0.42f, 0.62f);
        }
示例#4
0
        public void SetScenario(
            Scenario Scenario, UnitConfigurationRenderer UnitRenderer, FactionRenderer FactionRenderer)
        {
            _ScenarioDisplay.Clear();
            foreach (ArmyConfiguration army in Scenario.ArmyConfigurations)
            {
                _ScenarioDisplay.Add(
                    new Button("scenario-army-header")
                {
                    DisplayedString = ObjectDescriber.Describe(army.Faction)
                });
                var      factionMount = new GuiContainer <GuiItem>("scenario-faction-mount");
                Vector2f size         = factionMount.Size - factionMount.LeftPadding * 2;
                var      faction      = new FactionView(army.Faction, FactionRenderer, Math.Min(size.X, size.Y));
                faction.Position = .5f * (factionMount.Size - faction.Size) - factionMount.LeftPadding;
                factionMount.Add(faction);
                _ScenarioDisplay.Add(factionMount);
                foreach (DeploymentConfiguration deployment in army.DeploymentConfigurations)
                {
                    _ScenarioDisplay.Add(new DeploymentRow(deployment, army.Faction, UnitRenderer));
                }
                foreach (ObjectiveSuccessTrigger trigger in army.VictoryCondition.Triggers)
                {
                    _ScenarioDisplay.Add(new VictoryConditionRow(trigger));
                }
            }

            _DetailDisplay.Clear();
            AddDetail("Environment", ObjectDescriber.Describe(Scenario.Environment));
            AddDetail("Turns", Scenario.TurnConfiguration.Turns.ToString());
            AddSequence("Deploy Order", Scenario.TurnConfiguration.DeploymentOrder, Scenario.ArmyConfigurations.ToArray());
            AddSequence("Turn Order", Scenario.TurnConfiguration.TurnOrder, Scenario.ArmyConfigurations.ToArray());
            AddDetail("Strength", Scenario.ArmyConfigurations.Select(i => DescribeStrength(i)).ToArray());
        }
        public VictoryConditionPane(Match Match, FactionRenderer FactionRenderer)
            : base("victory-condition-pane")
        {
            _CloseButton.Position = new Vector2f(Size.X - _CloseButton.Size.X - LeftPadding.X * 2, 0);
            _CloseButton.OnClick += HandleClose;

            _VictoryConditionDisplay.Position = new Vector2f(0, _CloseButton.Size.Y + 24);
            foreach (ArmyConfiguration army in Match.Scenario.ArmyConfigurations)
            {
                _VictoryConditionDisplay.Add(
                    new Button("scenario-army-header")
                {
                    DisplayedString = ObjectDescriber.Describe(army.Faction)
                });
                var      factionMount = new GuiContainer <GuiItem>("scenario-faction-mount");
                Vector2f size         = factionMount.Size - factionMount.LeftPadding * 2;
                var      faction      = new FactionView(army.Faction, FactionRenderer, Math.Min(size.X, size.Y));
                faction.Position = .5f * (factionMount.Size - faction.Size) - factionMount.LeftPadding;
                factionMount.Add(faction);
                _VictoryConditionDisplay.Add(factionMount);
                foreach (ObjectiveSuccessTrigger trigger in army.VictoryCondition.Triggers)
                {
                    _VictoryConditionDisplay.Add(new VictoryConditionRow(trigger));
                }
            }

            Add(_CloseButton);
            Add(_VictoryConditionDisplay);
        }
示例#6
0
        public TownBuildingState(string name)
            : base(name)
        {
            int uiMargin = 10;

            GuiImage Background = new GuiImage(0, 0, ResourceManager.GetSprite("Backgrounds/Town"));

            Background.BestFit(ContentsFrame);
            Add(Background, 0, 0);

            LeftTwoThirds = new GuiContainer(Width - 340, Height);
            Add(LeftTwoThirds);

            LowerSection = new GuiWindow(0, 0);
            LowerSection.Background.Color = new Color(0.4f, 0.4f, 0.4f);
            LeftTwoThirds.Add(LowerSection);

            MainWindow = new GuiWindow(600, 500, name);
            LeftTwoThirds.Add(MainWindow, 0, 0);

            BackButton = new GuiButton("Back");
            BackButton.OnMouseClicked += delegate {
                Engine.PopState();
            };
            LowerSection.Add(BackButton);

            // UI

            Party       = new GuiPartyInfo(0, 0);
            Party.Party = CoM.Party;
            Add(Party, -uiMargin, -uiMargin);

            CharacterInfo = new GuiCharacterTabControl();
            Add(CharacterInfo, -uiMargin, uiMargin);

            ItemInventory = new GuiItemInventory();
            Add(ItemInventory, -uiMargin, CharacterInfo.Height + uiMargin);

            RepositionControls();
        }
示例#7
0
        private void createButons()
        {
            buttonsGroup = new GuiContainer(Width, 200);
            Add(buttonsGroup, 0, 250);

            // Sell
            var sellFrame = new GuiContainer(300, 50);

            sellFrame.Style = Engine.GetStyleCopy("Frame");
            buttonsGroup.Add(sellFrame, 0, 1);

            sellButton = new GuiButton("Sell", 80);
            sellFrame.Add(sellButton, 10, 0);

            sellPrice = new GuiCoinAmount();
            sellFrame.Add(sellPrice, 150, 0);

            // ID
            var IDFrame = new GuiContainer(300, 50);

            IDFrame.Style = Engine.GetStyleCopy("Frame");
            buttonsGroup.Add(IDFrame, 0, 1 + 48);

            idButton = new GuiButton("ID", 80);
            IDFrame.Add(idButton, 10, 0);

            idPrice = new GuiCoinAmount();
            IDFrame.Add(idPrice, 150, 0);

            sellButton.OnMouseClicked += delegate {
                SellItem();
            };

            idButton.OnMouseClicked += delegate {
                IdItem();
            };

            buttonsGroup.FitToChildren();
        }
        void MakeSection(string SectionName, GuiItem Input, SingleColumnTable Display)
        {
            var header = new Button("header-2")
            {
                DisplayedString = SectionName
            };
            var container = new GuiContainer <Pod>("scenario-builder-parameters-section");

            container.Add(Input);

            Display.Add(header);
            Display.Add(container);
        }
        public ScenarioSelectScreen(Vector2f WindowSize, IEnumerable <Scenario> Scenarios)
            : base(WindowSize)
        {
            _Renderer =
                new UnitConfigurationRenderer(
                    Scenarios.SelectMany(i => i.UnitConfigurations).Distinct(),
                    GameData.UnitRenderDetails,
                    128,
                    1024,
                    ClassLibrary.Instance.GetFont("compacta"));
            _FactionRenderer =
                new FactionRenderer(
                    Scenarios.SelectMany(i => i.ArmyConfigurations.Select(j => j.Faction)).Distinct(),
                    GameData.FactionRenderDetails,
                    512,
                    1024);
            foreach (Scenario s in Scenarios)
            {
                var option = new SelectionOption <Scenario>("scenario-selection-option")
                {
                    DisplayedString = s.Name,
                    Value           = s
                };
                _ScenarioSelect.Add(option);
            }
            _ScenarioSelect.OnChange += HandleSelect;
            _ScenarioView.Position    = new Vector2f(_ScenarioSelect.Size.X + 16, 0);

            _StartButton.OnClick += HandleStart;
            _StartButton.Position = new Vector2f(0, _Display.Size.Y - _StartButton.Size.Y - 32);

            _Display.Position = .5f * (WindowSize - _Display.Size);

            _Display.Add(_ScenarioSelect);
            _Display.Add(_ScenarioView);
            _Display.Add(_StartButton);
            _Items.Add(_Display);
        }
        public LogInPlayerScreen(Vector2f WindowSize)
            : base(WindowSize)
        {
            _Display.Add(new Button("join-server-header-1")
            {
                DisplayedString = "Log In"
            });
            _Display.Add(new Button("join-server-header-2")
            {
                DisplayedString = "Server IP"
            });
            _Display.Add(_ServerInput);
            _Display.Add(new Button("join-server-header-2")
            {
                DisplayedString = "Username"
            });
            _Display.Add(_UsernameInput);
            _Display.Add(new Button("join-server-header-2")
            {
                DisplayedString = "Password"
            });
            _Display.Add(_PasswordInput);

            _RegisterButton.Position = new Vector2f(0, _Pane.Size.Y - _RegisterButton.Size.Y - 32);
            _RegisterButton.OnClick += HandleRegister;

            _LogInButton.Position = new Vector2f(0, _RegisterButton.Position.Y - _LogInButton.Size.Y - 4);
            _LogInButton.OnClick += HandleLogIn;

            _Pane.Position = .5f * (WindowSize - _Pane.Size);
            _Pane.Add(_Display);
            _Pane.Add(_LogInButton);
            _Pane.Add(_RegisterButton);

            _Items.Add(_Pane);
        }
示例#11
0
文件: GuildState.cs 项目: bsimser/CoM
        public GuildState()
            : base("Guild")
        {
            Util.Assert(CoM.AllDataLoaded, "Data must be loaded before GuildState can be created.");

            MainWindow.Width  = 600;
            MainWindow.Height = 450;

            // --------------------------------------

            MainWindow.InnerShadow       = true;
            MainWindow.Background.Align  = GuiAlignment.None;
            MainWindow.Background.Sprite = ResourceManager.GetSprite("Backgrounds/TownGuild");
            MainWindow.Background.Color  = Color.white;
            MainWindow.Background.BestFit(MainWindow.ContentsFrame, true);
            MainWindow.PositionComponent(MainWindow.Background, 0, 0);

            GuildInfoSection = new GuiContainer((int)MainWindow.ContentsBounds.width - 200, (int)MainWindow.ContentsBounds.height);
            MainWindow.Add(GuildInfoSection, -1, 0);

            GuildListSection                  = new GuiContainer(205, (int)MainWindow.ContentsBounds.height + 10);
            GuildListSection.X                = -5;
            GuildListSection.Y                = -5;
            GuildListSection.Style            = Engine.GetStyleCopy("Frame");
            GuildListSection.EnableBackground = true;
            GuildListSection.Color            = new Color(1f, 1f, 1f, 0.75f);
            MainWindow.Add(GuildListSection);

            GuildList = new GuiListBox <MDRGuild>(0, 0, 180, 300);
            GuildListSection.Add(GuildList, 15, 15);

            GuildTitle           = new GuiLabel(-5, -5, "", GuildInfoSection.Width, 50);
            GuildTitle.Align     = GuiAlignment.Top;
            GuildTitle.TextAlign = TextAnchor.MiddleCenter;
            GuildTitle.FontSize  = 22;
            GuildInfoSection.Add(GuildTitle);

            GuildInfo          = new GuiLabel(10, 50, "", (int)GuildInfoSection.ContentsFrame.width - 10);
            GuildInfo.WordWrap = true;
            GuildInfoSection.Add(GuildInfo);

            // --------------------------------------

            JoinButton = new GuiButton("Join", 120);
            GuildInfoSection.Add(JoinButton, 0, -20);

            LevelButton = new GuiButton("Level", 120);
            GuildInfoSection.Add(LevelButton, 0, -20);

            GuildList.OnSelectedChanged += delegate {
                updateGuildInfo();
            };
            JoinButton.OnMouseClicked += delegate {
                JoinGuild();
            };
            LevelButton.OnMouseClicked += delegate {
                LevelUp();
            };

            GuildList.DoConvertItemToString = delegate(MDRGuild guild) {
                bool hasPrereq     = (guild.RequiredGuild != null);
                bool couldJoin     = guild.CanAccept(Character);
                bool isMemeber     = Character.Membership[guild].IsMember;
                bool currentMember = (guild == Character.CurrentGuild);

                string levelInfo = isMemeber ? "(" + Character.Membership[guild].CurrentLevel + ")" : "";

                string guildDescription = guild.Name + levelInfo;

                if (hasPrereq)
                {
                    guildDescription = "  " + guildDescription;
                }

                if (currentMember)
                {
                    guildDescription = Util.Colorise(guildDescription, Color.yellow, true);
                }
                else if (isMemeber)
                {
                    guildDescription = Util.Colorise(guildDescription, new Color(0.9f, 0.9f, 0.9f));
                }
                else if (couldJoin)
                {
                    guildDescription = Util.Colorise(guildDescription, new Color(0.9f, 0.9f, 0.9f));
                }
                else
                {
                    guildDescription = Util.Colorise(guildDescription, new Color(0.7f, 0.7f, 0.7f));
                }

                return(guildDescription);
            };

            CoM.Party.OnSelectedChanged += delegate {
                RefreshUI();
            };

            RepositionControls();
            RefreshUI();
        }
示例#12
0
        /** Create the store ui */
        //todo: remove sizes
        public GuiStore(MDRStore store, int width = 800, int height = 600)
            : base(width, height)
        {
            int splitWidth = (width / 2) + 50;

            const int HEADER_HEIGHT = 50;

            WindowStyle         = GuiWindowStyle.ThinTransparent;
            StoreSelectedItemID = -1;
            Store           = store;
            CanReceiveFocus = true;
            DragDropEnabled = true;

            // -----------------------------------------
            // Main areas

            var mainArea = new GuiContainer(0, (int)ContentsBounds.height - HEADER_HEIGHT);

            mainArea.Align = GuiAlignment.Bottom;

            // -----------------------------------------
            // Header

            var headerArea = new GuiContainer((int)ContentsBounds.width, HEADER_HEIGHT);

            headerArea.EnableBackground = true;
            headerArea.Style            = Engine.GetStyleCopy("Frame");
            headerArea.Y     -= 4;
            headerArea.X     -= 4;
            headerArea.Width += 8;

            modeButtons = new GuiRadioButtonGroup();
            modeButtons.AddItem("Buy");
            modeButtons.AddItem("Sell");
            modeButtons.ButtonSize       = new Vector2(120, 30);
            modeButtons.ButtonSpacing    = 50;
            modeButtons.EnableBackground = false;
            headerArea.Add(modeButtons, 0, 0, true);

            modeButtons.OnValueChanged += delegate {
                _mode = (StoreMode)modeButtons.SelectedIndex;
                updateStoreMode();
            };

            Add(headerArea);
            Add(mainArea);

            // -----------------------------------------
            // Item Info Area

            GuiPanel itemInfoPanel = new GuiPanel((int)ContentsBounds.width - splitWidth);

            itemInfoPanel.Align            = GuiAlignment.Right;
            itemInfoPanel.EnableBackground = false;
            mainArea.Add(itemInfoPanel, -1, 1, true);

            itemInfoBackground       = new GuiImage(0, 0, ResourceManager.GetSprite("Gui/InnerWindow"));
            itemInfoBackground.Align = GuiAlignment.Full;
            itemInfoBackground.Color = Colors.StoreItemInfoBackgroundColor;
            itemInfoPanel.Add(itemInfoBackground);

            SelectedItemInfo = new GuiItemToolTip();
            SelectedItemInfo.EnableBackground = false;
            SelectedItemInfo.Align            = GuiAlignment.Full;
            SelectedItemInfo.ShowAllInfo      = true;
            itemInfoPanel.Add(SelectedItemInfo);

            // -----------------------------------------
            // Item Buy Area

            buyItemArea       = new GuiContainer(splitWidth, (int)ContentsBounds.height);
            buyItemArea.Align = GuiAlignment.Left;
            mainArea.Add(buyItemArea);

            itemListingScrollArea = new GuiScrollableArea(buyItemArea.Width, buyItemArea.Height, ScrollMode.VerticalOnly);
            buyItemArea.Add(itemListingScrollArea);

            filterItemsToggle = new GuiToggleButton();
            filterItemsToggle.OnValueChanged += delegate {
                ShowOnlyUsableItems = filterItemsToggle.Value;
            };
            mainArea.Add(filterItemsToggle, -10, -10);
            filterItemsToggle.Visible = false;

            buyButton = new GuiButton("Buy");
            buyButton.OnMouseClicked += DoBuy;
            itemInfoPanel.Add(buyButton, 0, -30);

            notEnoughGold           = new GuiLabel("No enough coins");
            notEnoughGold.FontColor = new Color(0.5f, 0.5f, 0.5f, 0.9f);
            notEnoughGold.Visible   = false;
            itemInfoPanel.Add(notEnoughGold, 0, -56);

            // -----------------------------------------
            // item Sell area

            sellItemArea         = new GuiSellItemArea((int)mainArea.ContentsBounds.width - splitWidth, (int)mainArea.ContentsBounds.height, store);
            sellItemArea.Align   = GuiAlignment.Right;
            sellItemArea.OnSell += delegate {
                Mode = StoreMode.Buy;
            };
            mainArea.Add(sellItemArea);

            // -----------------------------------------

            CoM.Party.OnSelectedChanged += createStoreListings;
            store.OnInventoryChanged    += createStoreListings;

            updateStoreMode();
            createStoreListings();
        }
示例#13
0
        public ArmyBuilderScreen(
            Vector2f WindowSize,
            IEnumerable <UnitConfigurationLink> UnitConfigurations,
            ArmyParameters Parameters,
            UnitConfigurationRenderer Renderer)
            : base(WindowSize)
        {
            _Parameters = Parameters;
            _Links      = UnitConfigurations;

            _Pane.Position = .5f * (WindowSize - _Pane.Size);

            var header = new Button("army-builder-header")
            {
                DisplayedString =
                    string.Format(
                        "{0} - {1} - {2}",
                        ObjectDescriber.Describe(Parameters.Faction),
                        ObjectDescriber.Describe(Parameters.Parameters.Setting.Front),
                        Parameters.Parameters.Year)
            };

            _UnitClassSelect.Position = new Vector2f(0, header.Size.Y);

            _AvailableUnits = new UnitConfigurationTable(
                "army-builder-table",
                "army-builder-table-row",
                "army-builder-table-cell",
                _Parameters.Faction,
                Renderer,
                false);
            _AvailableUnits.Position            = new Vector2f(0, _UnitClassSelect.Position.Y + _UnitClassSelect.Size.Y + 16);
            _AvailableUnits.OnUnitClicked      += HandleAddUnit;
            _AvailableUnits.OnUnitRightClicked += HandleUnitInfoRequested;

            _PointTotalButton          = new Button("army-builder-point-total");
            _PointTotalButton.Position = new Vector2f(_AvailableUnits.Size.X + 16, header.Size.Y);
            SetPointTotal(0);

            _SelectedUnits = new UnitConfigurationTable(
                "army-builder-table",
                "army-builder-table-row",
                "army-builder-table-cell",
                _Parameters.Faction,
                Renderer,
                true);
            _SelectedUnits.Position =
                new Vector2f(_AvailableUnits.Size.X + 16, _PointTotalButton.Position.Y + _PointTotalButton.Size.Y + 16);
            _SelectedUnits.OnUnitRightClicked += HandleRemoveUnit;

            foreach (UnitClass c in Enum.GetValues(typeof(UnitClass)))
            {
                _UnitClassSelect.Add(
                    new SelectionOption <UnitClass>("army-builder-select-option")
                {
                    DisplayedString = ObjectDescriber.Describe(c),
                    Value           = c
                });
            }

            _UnitClassSelect.OnChange += FilterUnits;
            FilterUnits();

            var finishedButton = new Button("army-builder-large-button")
            {
                DisplayedString = "Finished"
            };

            finishedButton.Position = _Pane.Size - finishedButton.Size - new Vector2f(32, 32);
            finishedButton.OnClick += HandleFinished;

            _Pane.Add(header);
            _Pane.Add(_AvailableUnits);
            _Pane.Add(_SelectedUnits);
            _Pane.Add(_PointTotalButton);
            _Pane.Add(_UnitClassSelect);
            _Pane.Add(finishedButton);
            _Items.Add(_Pane);
        }
        public ScenarioBuilderScreen(Vector2f WindowSize, ScenarioBuilder ScenarioBuilder)
            : base(WindowSize, true)
        {
            this.ScenarioBuilder = ScenarioBuilder;

            var header = new Button("scenario-builder-header")
            {
                DisplayedString = "Custom Scenario"
            };

            _Pane.Add(header);
            _LeftDisplay.Position = new Vector2f(0, header.Size.Y);
            _ArmiesTable.Position = new Vector2f(_LeftDisplay.Size.X + 32, header.Size.Y);

            MakeSection("Year", _YearSelect, _LeftDisplay);
            _YearSelect.OnChange += HandleParametersChanged;
            for (uint i = 1939; i < 1946; ++i)
            {
                _YearSelect.Add(
                    new SelectionOption <uint>(
                        "scenario-builder-parameters-section-select-option")
                {
                    DisplayedString = i.ToString(),
                    Value           = i
                });
            }
            _YearSelect.SetValue(i => i.Value == ScenarioBuilder.Parameters.Year);

            MakeSection("Setting", _SettingSelect, _LeftDisplay);
            _SettingSelect.OnChange += HandleParametersChanged;
            foreach (MatchSetting setting in GameData.MatchSettings.Values)
            {
                _SettingSelect.Add(
                    new SelectionOption <MatchSetting>("scenario-builder-parameters-section-select-option")
                {
                    DisplayedString = ObjectDescriber.Describe(setting),
                    Value           = setting
                });
            }
            _SettingSelect.SetValue(i => i.Value == ScenarioBuilder.Parameters.Setting);

            MakeSection("Turns", _TurnsSelect, _LeftDisplay);
            _TurnsSelect.OnChange += HandleParametersChanged;
            for (byte i = 6; i <= 16; i += 2)
            {
                _TurnsSelect.Add(
                    new SelectionOption <byte>("scenario-builder-parameters-section-select-option")
                {
                    DisplayedString = i.ToString(),
                    Value           = i
                });
            }
            _TurnsSelect.SetValue(i => i.Value == ScenarioBuilder.Parameters.Turns);

            MakeSection("Fog of War", _FogOfWarCheckbox, _LeftDisplay);
            _FogOfWarCheckbox.OnChange += HandleParametersChanged;
            _FogOfWarCheckbox.Value     = ScenarioBuilder.Parameters.FogOfWar;

            MakeSection("Map Width", _MapWidthInput, _LeftDisplay);
            _MapWidthInput.OnChange += HandleParametersChanged;
            _MapWidthInput.Value     = ScenarioBuilder.Parameters.MapSize.X.ToString();

            MakeSection("Map Height", _MapHeightInput, _LeftDisplay);
            _MapHeightInput.OnChange += HandleParametersChanged;
            _MapHeightInput.Value     = ScenarioBuilder.Parameters.MapSize.Y.ToString();

            _Pane.Position = .5f * (WindowSize - _Pane.Size);

            var addArmyButton = new Button("scenario-builder-army-section-add-button")
            {
                DisplayedString = "+"
            };

            addArmyButton.OnClick += HandleArmyAdded;
            _ArmiesTable.Add(
                new TableRow("scenario-builder-army-section-header")
            {
                new Button("scenario-builder-army-section-faction-header")
                {
                    DisplayedString = "Faction"
                },
                new Button("scenario-builder-army-section-points-header")
                {
                    DisplayedString = "Points"
                },
                new Button("scenario-builder-army-section-team-header")
                {
                    DisplayedString = "Team"
                },
                addArmyButton
            });

            var finishedButton = new Button("large-button")
            {
                DisplayedString = "Finished"
            };

            finishedButton.Position = new Vector2f(0, _Pane.Size.Y - finishedButton.Size.Y - 32);
            finishedButton.OnClick += HandleFinished;

            _Pane.Add(finishedButton);
            _Pane.Add(_LeftDisplay);
            _Pane.Add(_ArmiesTable);
            _Items.Add(_Pane);
        }