public override void Construct() { Padding = new Margin(2, 2, 0, 0); StartButton = AddChild(new Gui.Widget { Text = "Start Game", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.DockBottom, OnClick = (sender, args) => { var saveName = DwarfGame.GetWorldDirectory() + Path.DirectorySeparatorChar + Settings.Name + Path.DirectorySeparatorChar + String.Format("{0}-{1}", (int)Settings.InstanceSettings.Origin.X, (int)Settings.InstanceSettings.Origin.Y); var saveGame = SaveGame.LoadMetaFromDirectory(saveName); if (saveGame != null) { DwarfGame.LogSentryBreadcrumb("WorldGenerator", "User is loading a saved game."); Settings.InstanceSettings.ExistingFile = saveName; Settings.InstanceSettings.LoadType = LoadType.LoadFromFile; GameStateManager.ClearState(); GameStateManager.PushState(new LoadState(Game, Settings, LoadTypes.UseExistingOverworld)); } else { DwarfGame.LogSentryBreadcrumb("WorldGenerator", string.Format("User is starting a game with a {0} x {1} world.", Settings.Width, Settings.Height)); Settings.InstanceSettings.ExistingFile = null; Settings.InstanceSettings.LoadType = LoadType.CreateNew; var message = ""; var valid = InstanceSettings.ValidateEmbarkment(Settings, out message); if (valid == InstanceSettings.ValidationResult.Pass) { LaunchNewGame(); } else if (valid == InstanceSettings.ValidationResult.Query) { var popup = new Gui.Widgets.Confirm() { Text = message, OnClose = (_sender) => { if ((_sender as Gui.Widgets.Confirm).DialogResult == Gui.Widgets.Confirm.Result.OKAY) { LaunchNewGame(); } } }; Root.ShowModalPopup(popup); } else if (valid == InstanceSettings.ValidationResult.Reject) { var popup = new Gui.Widgets.Confirm() { Text = message, CancelText = "" }; Root.ShowModalPopup(popup); } } } }); CellInfo = AddChild(new Widget { AutoLayout = AutoLayout.DockFill, TextColor = new Vector4(0, 0, 0, 1), Font = "font10" }); ZoomedPreview = AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockBottom, OnLayout = (sender) => { sender.Rect.Height = StartButton.Rect.Width; sender.Rect.Width = StartButton.Rect.Width; sender.Rect.Y = StartButton.Rect.Top - StartButton.Rect.Width - 2; sender.Rect.X = StartButton.Rect.X; } }); UpdateCellInfo(); this.Layout(); base.Construct(); }
public override void Construct() { PopupDestructionType = PopupDestructionType.Keep; Padding = new Margin(2, 2, 2, 2); //Set size and center on screen. Rect = Root.RenderData.VirtualScreen; Border = "border-fancy"; ValidationLabel = AddChild(new Widget { MinimumSize = new Point(0, 48), AutoLayout = AutoLayout.DockBottom, Font = "font16" }); ValidationLabel.AddChild(new Gui.Widget { Text = "Okay", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.FloatBottomRight, OnClick = (sender, args) => { foreach (var resource in ResourceColumns.SelectedResources) { Settings.InstanceSettings.InitalEmbarkment.Resources.Add(resource); } var message = ""; var valid = Embarkment.ValidateEmbarkment(Settings, out message); if (valid == InstanceSettings.ValidationResult.Pass) { this.Close(); } else if (valid == InstanceSettings.ValidationResult.Query) { var popup = new Gui.Widgets.Confirm() { Text = message, OnClose = (_sender) => { if ((_sender as Gui.Widgets.Confirm).DialogResult == Gui.Widgets.Confirm.Result.OKAY) { this.Close(); } } }; Root.ShowModalPopup(popup); } else if (valid == InstanceSettings.ValidationResult.Reject) { var popup = new Gui.Widgets.Confirm() { Text = message, CancelText = "" }; Root.ShowModalPopup(popup); } } }); var columns = AddChild(new Gui.Widgets.Columns { ColumnCount = 2, AutoLayout = AutoLayout.DockFill }); var employeeStack = columns.AddChild(new Widget { MinimumSize = new Point(256, 0) }); employeeStack.AddChild(new Widget { Text = "Employees", Font = "font16", AutoLayout = AutoLayout.DockTop }); employeeStack.AddChild(new Widget { Text = "+ new employee", Font = "font16", ChangeColorOnHover = true, AutoLayout = AutoLayout.DockTop, OnClick = (sender, args) => { var dialog = Root.ConstructWidget( new ChooseEmployeeTypeDialog() { Settings = Settings, OnClose = (_s) => { RebuildEmployeeList(); UpdateCost(); } }); Root.ShowModalPopup(dialog); } }); var costPanel = employeeStack.AddChild(new Widget { MinimumSize = new Point(0, 128), AutoLayout = AutoLayout.DockBottom }); var availableFunds = costPanel.AddChild(CreateBar("Funds Available:")); availableFunds.AddChild(new Widget { AutoLayout = AutoLayout.DockRight, Text = FundsAvailable.ToString(), MinimumSize = new Point(128, 0), TextHorizontalAlign = HorizontalAlign.Right }); var moneyBar = costPanel.AddChild(CreateBar("Ready Cash:")); Cash = moneyBar.AddChild(new Gui.Widgets.MoneyEditor { MaximumValue = (int)FundsAvailable, MinimumSize = new Point(128, 33), AutoLayout = AutoLayout.DockRight, OnValueChanged = (sender) => { Settings.InstanceSettings.InitalEmbarkment.Funds = (sender as Gui.Widgets.MoneyEditor).CurrentValue; UpdateCost(); }, Tooltip = "Money to take.", TextHorizontalAlign = HorizontalAlign.Right }) as Gui.Widgets.MoneyEditor; var employeeCostBar = costPanel.AddChild(CreateBar("Signing Bonuses:")); EmployeeCost = employeeCostBar.AddChild(new Widget { AutoLayout = AutoLayout.DockRight, Text = "$0", MinimumSize = new Point(128, 0), TextHorizontalAlign = HorizontalAlign.Right }); var totalBar = costPanel.AddChild(CreateBar("Total Cost:")); TotalCost = totalBar.AddChild(new Widget { AutoLayout = AutoLayout.DockRight, Text = "$0", MinimumSize = new Point(128, 0), TextHorizontalAlign = HorizontalAlign.Right }); EmployeeList = employeeStack.AddChild(new Gui.Widgets.WidgetListView { AutoLayout = Gui.AutoLayout.DockFill, SelectedItemForegroundColor = new Vector4(0, 0, 0, 1) }) as Gui.Widgets.WidgetListView; RebuildEmployeeList(); ResourceColumns = columns.AddChild(new EmbarkmentResourceColumns { ComputeValue = (resourceType) => { var r = Library.GetResourceType(resourceType); return(r.MoneyValue); }, SourceResources = Settings.PlayerCorporationResources.Enumerate().ToList(), SelectedResources = Settings.InstanceSettings.InitalEmbarkment.Resources.Enumerate().ToList(), LeftHeader = "Available", RightHeader = "Taking" }) as EmbarkmentResourceColumns; Layout(); UpdateCost(); base.Construct(); }
private void RebuildGui() { BuildingGUI = true; // Create and initialize GUI framework. GuiRoot = new Gui.Root(DwarfGame.GumSkin); GuiRoot.MousePointer = new Gui.MousePointer("mouse", 4, 0); var screen = GuiRoot.RenderData.VirtualScreen; float scale = 0.75f; float newWidth = System.Math.Min(System.Math.Max(screen.Width * scale, 640), screen.Width * scale); float newHeight = System.Math.Min(System.Math.Max(screen.Height * scale, 480), screen.Height * scale); Rectangle rect = new Rectangle((int)(screen.Width / 2 - newWidth / 2), (int)(screen.Height / 2 - newHeight / 2), (int)newWidth, (int)newHeight); // CONSTRUCT GUI HERE... MainPanel = GuiRoot.RootItem.AddChild(new Gui.Widget { Rect = rect, Padding = new Margin(4, 4, 4, 4), Transparent = true, MinimumSize = new Point(640, 480), Font = "font10" }); MainPanel.AddChild(new Gui.Widgets.Button { Text = "Close", Font = "font16", TextHorizontalAlign = HorizontalAlign.Center, TextVerticalAlign = VerticalAlign.Center, Border = "border-button", OnClick = (sender, args) => { // If changes, prompt before closing. if (HasChanges) { var confirm = new Gui.Widgets.Confirm { Text = "Apply changes?", OkayText = "Yes", CancelText = "No", OnClose = (s2) => { if ((s2 as Gui.Widgets.Confirm).DialogResult == Gui.Widgets.Confirm.Result.OKAY) { ConfirmSettings(); } if (OnClosed != null) { OnClosed(); } StateManager.PopState(); } }; GuiRoot.ShowModalPopup(confirm); } else { if (OnClosed != null) { OnClosed(); } StateManager.PopState(); } }, AutoLayout = AutoLayout.FloatBottomRight }); MainPanel.AddChild(new Gui.Widgets.Button { Text = "Apply", Font = "font16", TextHorizontalAlign = HorizontalAlign.Center, TextVerticalAlign = VerticalAlign.Center, Border = "border-button", OnClick = (sender, args) => { ConfirmSettings(); }, AutoLayout = AutoLayout.FloatBottomRight, OnLayout = s => s.Rect.X -= 128 // Hack to keep it from floating over the other button. }); TabPanel = MainPanel.AddChild(new Gui.Widgets.TabPanel { AutoLayout = AutoLayout.DockFill, TextSize = 1, SelectedTabColor = new Vector4(1, 0, 0, 1), OnLayout = (sender) => sender.Rect.Height -= 36 // Keep it from overlapping bottom buttons. }) as Gui.Widgets.TabPanel; CreateGameplayTab(); CreateAudioTab(); CreateKeysTab(); CreateGraphicsTab(); TabPanel.SelectedTab = 0; GuiRoot.RootItem.Layout(); LoadSettings(); BuildingGUI = false; }