public override void Construct() { MaxLabel = AddChild(new Widget { AutoLayout = AutoLayout.DockBottom, MinimumSize = new Point(0, 30), TextSize = GameSettings.Default.ConsoleTextSize, Font = "monofont", TextHorizontalAlign = HorizontalAlign.Left }); MinLabel = AddChild(new Widget { AutoLayout = AutoLayout.DockTop, MinimumSize = new Point(0, 30), TextSize = GameSettings.Default.ConsoleTextSize, Font = "monofont", TextHorizontalAlign = HorizontalAlign.Left }); GraphBox = AddChild(new Widget { AutoLayout = AutoLayout.DockFill, Hidden = true }); }
public override void OnEnter() { // Clear the input queue... cause other states aren't using it and it's been filling up. DwarfGame.GumInputMapper.GetInputQueue(); GuiRoot = new Gui.Root(DwarfGame.GuiSkin); GuiRoot.MousePointer = new Gui.MousePointer("mouse", 4, 0); var rect = GuiRoot.RenderData.VirtualScreen; mainPanel = GuiRoot.RootItem.AddChild(new Gui.Widget { Rect = rect, MinimumSize = new Point(3 * GuiRoot.RenderData.VirtualScreen.Width / 4, 3 * GuiRoot.RenderData.VirtualScreen.Height / 4), AutoLayout = AutoLayout.FloatCenter, Border = "border-fancy", Padding = new Margin(4, 4, 4, 4), InteriorMargin = new Margin(2, 0, 0, 0), TextSize = 1, Font = "font10" }); Reset(); IsInitialized = true; base.OnEnter(); }
private void AddSelector(Gui.Widget Panel, String LayerType) { var panel = Panel.AddChild(new Widget { MinimumSize = new Point(0, 44), AutoLayout = AutoLayout.DockTop, Padding = new Margin(2, 2, 2, 2) }); panel.AddChild(new Widget { Text = LayerType, MinimumSize = new Point(64, 0), AutoLayout = AutoLayout.DockLeft, TextVerticalAlign = VerticalAlign.Center, TextHorizontalAlign = HorizontalAlign.Center, }); var layerCombo = panel.AddChild(new Gui.Widgets.ComboBox { Items = LayeredSprites.LayerLibrary.EnumerateLayers(LayerType).Select(l => l.Asset).ToList(), Border = "border-thin", AutoLayout = AutoLayout.DockTop, ItemsVisibleInPopup = 12, }) as Gui.Widgets.ComboBox; var paletteCombo = panel.AddChild(new Gui.Widgets.ComboBox { Items = new string[] { "base palette" }.Concat(LayeredSprites.LayerLibrary.EnumeratePalettes().Select(p => p.Asset)).ToList(), Border = "border-thin", AutoLayout = AutoLayout.DockTop, ItemsVisibleInPopup = 12, }) as Gui.Widgets.ComboBox; layerCombo.SelectedIndex = 0; paletteCombo.SelectedIndex = 0; layerCombo.OnSelectedIndexChanged = (sender) => { var layer = (panel.Children[1] as Gui.Widgets.ComboBox).SelectedItem; var palette = (panel.Children[2] as Gui.Widgets.ComboBox).SelectedItem; SpriteFrame.Sprite.AddLayer(GetLayer(LayerType, layer), GetPalette(palette)); }; paletteCombo.OnSelectedIndexChanged = (sender) => { var layer = (panel.Children[1] as Gui.Widgets.ComboBox).SelectedItem; var palette = (panel.Children[2] as Gui.Widgets.ComboBox).SelectedItem; SpriteFrame.Sprite.AddLayer(GetLayer(LayerType, layer), GetPalette(palette)); }; layerCombo.SelectedIndex = 0; paletteCombo.SelectedIndex = 0; }
public override void Construct() { Padding = new Margin(2, 2, 2, 2); base.Construct(); var bar = AddChild(new Widget { MinimumSize = new Point(0, 24), Padding = new Margin(0, 0, 2, 2), AutoLayout = AutoLayout.DockTop }); bar.AddChild(new Widget { Text = "Filter:", AutoLayout = AutoLayout.DockLeft }); FilterBox = bar.AddChild(new Gui.Widgets.EditableTextField { AutoLayout = AutoLayout.DockFill, MinimumSize = new Point(0, 24), OnTextChange = (sender) => { Grid.ApplyFilter(FilterBox.Text); } }) as Gui.Widgets.EditableTextField; SelectedCommandDisplay = AddChild(new Widget { AutoLayout = AutoLayout.DockBottom, MinimumSize = new Point(0, 200) }); Grid = AddChild(new CommandGrid { AutoLayout = AutoLayout.DockFill, World = World, OnCommandClicked = (command) => { SelectedCommandDisplay.Children.Clear(); if (command.HoverWidget != null) { SelectedCommandDisplay.AddChild(command.HoverWidget); command.HoverWidget.AutoLayout = AutoLayout.DockFill; command.HoverWidget.Border = ""; } SelectedCommandDisplay.Layout(); command.OnClick?.Invoke(command, null); } }) as CommandGrid; }
private static bool Overlap(Gui.Widget w1, Gui.Widget w2) { if (w1.left > w2.left + w2.width || w2.left > w1.left + w1.width) { return(false); } if (w1.top > w2.top + w2.height || w2.top > w1.top + w1.height) { return(false); } return(true); }
private void MakeMenuItem(Gui.Widget Menu, string Name, string Tooltip, Action <Gui.Widget, Gui.InputEventArgs> OnClick) { Menu.AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockTop, Border = "border-thin", Text = Name, OnClick = OnClick, Tooltip = Tooltip, TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center }); }
public override void Construct() { MaxLabel = AddChild(new Widget { AutoLayout = AutoLayout.DockBottom, MinimumSize = new Point(0, 30), TextSize = GameSettings.Current.ConsoleTextSize, Font = "monofont", TextHorizontalAlign = HorizontalAlign.Left }); MinLabel = AddChild(new Widget { AutoLayout = AutoLayout.DockTop, MinimumSize = new Point(0, 30), TextSize = GameSettings.Current.ConsoleTextSize, Font = "monofont", TextHorizontalAlign = HorizontalAlign.Left }); GraphBox = AddChild(new Widget { AutoLayout = AutoLayout.DockFill, Transparent = true }); XLabelMinWidget = GraphBox.AddChild(new Widget() { Font = "monofont", TextColor = Color.Black.ToVector4(), AutoLayout = AutoLayout.FloatBottomLeft, MinimumSize = new Point(128, 32), Text = XLabelMin, TextHorizontalAlign = HorizontalAlign.Left, TextVerticalAlign = VerticalAlign.Below }); XLabelMaxWidget = GraphBox.AddChild(new Widget() { Font = "monofont", TextColor = Color.Black.ToVector4(), AutoLayout = AutoLayout.FloatBottomRight, MinimumSize = new Point(128, 32), Text = XLabelMin, TextHorizontalAlign = HorizontalAlign.Right, TextVerticalAlign = VerticalAlign.Below }); GraphBox.Layout(); Layout(); }
public override void OnEnter() { TutorialManager = new Tutorial.TutorialManager(); IsInitialized = true; DwarfTime.LastTime.Speed = 1.0f; IndicatorManager.SetupStandards(); DwarfGame.GumInputMapper.GetInputQueue(); GuiRoot = new Gui.Root(DwarfGame.GuiSkin); Tip = GuiRoot.RootItem.AddChild(new Gui.Widget { Font = "font10", TextColor = new Vector4(1, 1, 1, 1), MinimumSize = new Point(0, 64), TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Text = "Press any key to jump!", AutoLayout = Gui.AutoLayout.DockBottom, Background = new Gui.TileReference("basic", 0), BackgroundColor = new Vector4(0, 0, 0, 0.5f), InteriorMargin = new Gui.Margin(0, 0, 15, 15) }); LoadTicker = GuiRoot.RootItem.AddChild(new Gui.Widgets.InfoTicker { Font = "font8", AutoLayout = Gui.AutoLayout.DockFill, TextColor = new Vector4(1, 1, 1, 1) }) as Gui.Widgets.InfoTicker; GuiRoot.RootItem.Layout(); if (Settings.GenerateFromScratch) { Generator = new WorldGenerator(Settings) { Seed = MathFunctions.Random.Next() }; Generator.Generate(); } else { CreateWorld(); } base.OnEnter(); }
private void MakeMenuItem(Gui.Widget Menu, string Name, string Tooltip, Action <Gui.Widget, Gui.InputEventArgs> OnClick) { Menu.AddChild(new Gui.Widgets.Button { AutoLayout = Gui.AutoLayout.DockTop, Text = Name, Border = "none", OnClick = OnClick, Tooltip = Tooltip, TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Font = "font18-outline", TextColor = Color.White.ToVector4(), HoverTextColor = Color.Red.ToVector4() }); }
private void MakeMenuItem(Gui.Widget Menu, string Name, string Tooltip, Action <Gui.Widget, Gui.InputEventArgs> OnClick) { Menu.AddChild(new Gui.Widgets.Button { AutoLayout = Gui.AutoLayout.DockTop, Text = Name, Border = "none", OnClick = OnClick, Tooltip = Tooltip, TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Font = GameSettings.Default.GuiScale == 1 ? "font18-outline" : "font10", TextColor = Color.White.ToVector4(), HoverTextColor = GameSettings.Default.Colors.GetColor("Highlight", Color.DarkRed).ToVector4() }); }
protected Gui.Widget CreateMenuItem(Gui.Widget Menu, string Name, string Tooltip, Action <Gui.Widget, Gui.InputEventArgs> OnClick) { return(Menu.AddChild(new Gui.Widgets.Button { AutoLayout = Gui.AutoLayout.DockTop, Text = Name, Border = "none", OnClick = OnClick, Tooltip = Tooltip, TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Font = "font18-outline", TextColor = Color.White.ToVector4(), HoverTextColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4() })); }
public override void Construct() { Border = "border-thin"; var topBar = AddChild(new Widget { AutoLayout = AutoLayout.DockTop, MinimumSize = new Point(0, 30) }); var KeyPanel = AddChild(new Widget { AutoLayout = AutoLayout.DockLeft, MinimumSize = new Point(64, 0) }); MaxLabel = KeyPanel.AddChild(new Widget { AutoLayout = AutoLayout.DockTop, MinimumSize = new Point(0, 30), TextHorizontalAlign = HorizontalAlign.Right }); MinLabel = KeyPanel.AddChild(new Widget { AutoLayout = AutoLayout.DockBottom, MinimumSize = new Point(0, 30), TextHorizontalAlign = HorizontalAlign.Right }); MidLabel = KeyPanel.AddChild(new Widget { AutoLayout = AutoLayout.DockFill, MinimumSize = new Point(0, 30), TextHorizontalAlign = HorizontalAlign.Right, TextVerticalAlign = VerticalAlign.Center }); GraphBox = AddChild(new Widget { AutoLayout = AutoLayout.DockFill, Border = "border-thin", Hidden = true }); }
private bool Inside(Gui.Widget that) { if (that.left < 0) { return(false); } if (that.left + that.width > this.width) { return(false); } if (that.top < 0) { return(false); } if (that.top + that.height > this.height) { return(false); } return(true); }
private Gui.Widget CreateTrayIcon(int Tile, Gui.Widget Child) { var r = new Gui.Widgets.FramedIcon { Icon = new Gui.TileReference("tool-icons", Tile), OnClick = (sender, args) => { }, OnHover = (sender) => { foreach (var child in sender.Parent.EnumerateChildren().Where(c => c is Gui.Widgets.FramedIcon) .SelectMany(c => c.EnumerateChildren())) { child.Hidden = true; child.Invalidate(); } if (Child != null) { Child.Hidden = false; Child.Invalidate(); } }, OnLayout = (sender) => { if (Child != null) { var midPoint = sender.Rect.X + (sender.Rect.Width / 2); Child.Rect.X = midPoint - (Child.Rect.Width / 2); Child.Rect.Y = sender.Rect.Y - 60; } } }; GuiRoot.ConstructWidget(r); if (Child != null) { r.AddChild(Child); } return(r); }
private void SwitchToLaunchPanel() { if (PanelState != PanelStates.Generate) { return; } PanelState = PanelStates.Launch; var rect = RightPanel.Rect; var parent = RightPanel.Parent; RightPanel.Close(); RightPanel = parent.AddChild(new LaunchPanel(Game, Generator, Settings, this) { Rect = rect }); RightPanel.Layout(); }
public override void Construct() { TextColor = new Vector4(0, 0, 0, 1); MinimumSize = new Point(96, 32); Padding = new Gui.Margin(2, 2, 4, 4); Font = "font10"; TimeLabel = AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockLeft, MinimumSize = new Point(16, 0), Text = "1x", Tooltip = "Current Game Speed", TextVerticalAlign = Gui.VerticalAlign.Center, TextColor = new Vector4(1, 1, 1, 1) }); SlowButton = AddChild(new Widget() { AutoLayout = Gui.AutoLayout.DockLeft, Text = "<<", TextColor = Color.White.ToVector4(), Tooltip = "Decrease Speed", HoverTextColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4(), ChangeColorOnHover = true, OnClick = (sender, args) => { CurrentSpeed -= 1; }, TextVerticalAlign = Gui.VerticalAlign.Center }); PlayPauseButton = AddChild(new Widget() { AutoLayout = Gui.AutoLayout.DockLeft, TextColor = Color.White.ToVector4(), Text = "||", Tooltip = "Pause", HoverTextColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4(), ChangeColorOnHover = true, OnClick = (sender, args) => { if (CurrentSpeed == 0) { if (PlaySpeed == 0) { PlaySpeed = 1; } CurrentSpeed = PlaySpeed; } else { PlaySpeed = CurrentSpeed; CurrentSpeed = 0; } }, TextVerticalAlign = Gui.VerticalAlign.Center }); FastButton = AddChild(new Widget() { AutoLayout = Gui.AutoLayout.DockLeft, Text = ">>", TextColor = Color.White.ToVector4(), Tooltip = "Increase Speed", HoverTextColor = GameSettings.Current.Colors.GetColor("Highlight", Color.DarkRed).ToVector4(), ChangeColorOnHover = true, OnClick = (sender, args) => { CurrentSpeed += 1; }, TextVerticalAlign = Gui.VerticalAlign.Center }); base.Construct(); }
public override void OnEnter() { if (ItemSource != null) { foreach (var path in ItemSource()) { var meta = path.GetFiles("meta.txt"); Items.Add(new ChooserItem { Name = GetItemName(path.FullName), Path = path.FullName, Valid = ValidateItem == null ? "" : ValidateItem(path.FullName), Age = meta.Length > 0 ? DateTime.Now - meta[0].LastWriteTime : DateTime.Now - path.LastWriteTime }); } } foreach (var item in Items) { item.Screenshot = ScreenshotSource(item.Path); } DwarfGame.GumInputMapper.GetInputQueue(); GuiRoot = new Gui.Root(DwarfGame.GuiSkin); GuiRoot.MousePointer = new Gui.MousePointer("mouse", 4, 0); GuiRoot.RootItem.Transparent = false; GuiRoot.RootItem.InteriorMargin = new Gui.Margin(16, 16, 32, 32); BottomBar = GuiRoot.RootItem.AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockBottom, MinimumSize = new Point(0, 60), TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Background = new Gui.TileReference("basic", 0), Font = "font10", InteriorMargin = new Gui.Margin(10, 10, 10, 10) }); if (Items.Count == 0) { BottomBar.Text = NoItemsText; } BottomBar.AddChild(new Gui.Widgets.Button { AutoLayout = Gui.AutoLayout.FloatBottomLeft, Border = "border-button", Text = "< Back", Tooltip = "Back to the main screen", OnClick = (sender, args) => { GameStateManager.PopState(); } }); Grid = GuiRoot.RootItem.AddChild(new Gui.Widgets.WidgetListView { AutoLayout = Gui.AutoLayout.DockFill, Border = "border-one", Font = "font10", InteriorMargin = new Gui.Margin(32, 0, 0, 0), TextHorizontalAlign = HorizontalAlign.Center, TextVerticalAlign = VerticalAlign.Top, SelectedItemBackgroundColor = Color.LightBlue.ToVector4(), SelectedItemForegroundColor = Color.Black.ToVector4() }) as Gui.Widgets.WidgetListView; GuiRoot.RootItem.Layout(); GuiRoot.RootItem.Layout(); // Must be true or Render will not be called. IsInitialized = true; base.OnEnter(); }
/// <summary> /// Called to create a custom GUI for the goal. /// </summary> /// <param name="Widget"></param> public virtual void CreateGUI(Gui.Widget Widget) { Widget.Text = Description; }
public override void Construct() { PreviewPanel = AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockFill, OnLayout = (sender) => { Camera.Rect = sender.Rect; }, OnClick = (sender, args) => { if (Generator.CurrentState != OverworldGenerator.GenerationState.Finished) { return; } if (args.MouseButton == 0) { var clickPoint = Camera.ScreenToWorld(new Vector2(args.X, args.Y)); var colonyCell = Overworld.ColonyCells.GetCellAt(clickPoint.X, clickPoint.Y); if (colonyCell != null) { Overworld.InstanceSettings.Cell = colonyCell; previewText = Generator.GetSpawnStats(); Camera.SetGoalFocus(new Vector3((float)colonyCell.Bounds.Center.X / (float)Overworld.Width, 0, (float)colonyCell.Bounds.Center.Y / (float)Overworld.Height)); } UpdatePreview = true; OnCellSelectionMade?.Invoke(); } }, OnMouseMove = (sender, args) => { if (Generator.CurrentState != OverworldGenerator.GenerationState.Finished) { return; } Camera.OnMouseMove(args); }, OnScroll = (sender, args) => { if (Generator.CurrentState != OverworldGenerator.GenerationState.Finished) { return; } Camera.OnScroll(args); } }); OnClose += (sender) => { Mesh.Dispose(); TerrainTexture.Dispose(); PreviewTexture.Dispose(); }; Camera.Overworld = Overworld; }
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 OnEnter() { if (SuppressEnter) { SuppressEnter = false; return; } DwarfGame.GumInputMapper.GetInputQueue(); #region Setup GUI GuiRoot = new Gui.Root(DwarfGame.GuiSkin); GuiRoot.MousePointer = new MousePointer("mouse", 15.0f, 16, 17, 18, 19, 20, 21, 22, 23); MainPanel = GuiRoot.RootItem.AddChild(new Gui.Widget { Rect = GuiRoot.RenderData.VirtualScreen, Border = "border-fancy", Text = Settings.Name, Font = "font16", TextColor = new Vector4(0, 0, 0, 1), Padding = new Margin(4, 4, 4, 4), InteriorMargin = new Margin(24, 0, 0, 0) }); var rightPanel = MainPanel.AddChild(new Widget { MinimumSize = new Point(256, 0), Padding = new Margin(2, 2, 2, 2), AutoLayout = AutoLayout.DockRight }); rightPanel.AddChild(new Gui.Widget { Text = "Back", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.DockTop, OnClick = (sender, args) => { GameStateManager.PopState(); } }); rightPanel.AddChild(new Widget { Text = "Factions", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = AutoLayout.DockTop, OnClick = (sender, args) => { SuppressEnter = true; GameStateManager.PushState(new FactionViewState(GameState.Game, Settings)); } }); switch (PanelState) { case PanelStates.Generate: RightPanel = rightPanel.AddChild(new GenerationPanel(Game, Settings) { RestartGeneration = () => RestartGeneration(), GetGenerator = () => Generator, OnVerified = () => { SwitchToLaunchPanel(); }, AutoLayout = Gui.AutoLayout.DockFill, }); break; case PanelStates.Launch: RightPanel = rightPanel.AddChild(new LaunchPanel(Game, Generator, Settings, this) { AutoLayout = AutoLayout.DockFill, }); break; } GenerationProgress = MainPanel.AddChild(new Gui.Widgets.ProgressBar { AutoLayout = Gui.AutoLayout.DockBottom, TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Font = "font10", TextColor = new Vector4(1, 1, 1, 1) }) as Gui.Widgets.ProgressBar; PoliticsToggle = MainPanel.AddChild(new Gui.Widgets.CheckBox { Text = "Show Political Boundaries", Hidden = true, OnLayout = (sender) => { sender.Rect = GenerationProgress.Rect; }, OnCheckStateChange = (sender) => { Preview.ShowPolitics = (sender as Gui.Widgets.CheckBox).CheckState; } }) as Gui.Widgets.CheckBox; Preview = MainPanel.AddChild(new WorldGeneratorPreview(Game.GraphicsDevice) { Border = "border-thin", AutoLayout = Gui.AutoLayout.DockFill, Overworld = Settings, Hidden = true, OnLayout = (sender) => { //sender.Rect = new Rectangle(sender.Rect.X, sender.Rect.Y, sender.Rect.Width, GenerationProgress.Rect.Bottom - sender.Rect.Y); }, OnCellSelectionMade = () => { if (RightPanel is LaunchPanel launch) { launch.UpdateCellInfo(); } } }) as WorldGeneratorPreview;
public override void Construct() { base.Construct(); SubscribedItems = Steam.GetSubscribedMods(); this.Padding = new Margin(4, 4, 4, 4); this.Font = "font10"; var top = AddChild(new Widget { Transparent = true, MinimumSize = new Point(0, 32), AutoLayout = AutoLayout.DockTop, Padding = new Margin(2, 2, 2, 2) }); var searchText = top.AddChild(new Gui.Widgets.EditableTextField { PromptText = "Enter text to search for", AutoLayout = AutoLayout.DockLeft, MinimumSize = new Point(256, 0), }) as Gui.Widgets.EditableTextField; var button = top.AddChild(new Gui.Widgets.Button { Text = "Search", Font = "font10", TextHorizontalAlign = HorizontalAlign.Center, TextVerticalAlign = VerticalAlign.Center, Border = "border-button", OnClick = (sender, args) => { if (!Steam.SteamAvailable) { List.ClearItems(); List.AddItem(new Widget() { Text = "Error: Can't connect to steam!", Background = new TileReference("basic", 0), TextColor = new Vector4(0, 0, 0, 1), }); return; } if (!Steam.HasTransactionOfType <UGCQuery>()) { Steam.AddTransaction(new UGCTransactionProcessor { Transaction = new UGCQuery { SearchString = searchText.Text }, StatusMessageDisplay = QueryStatusMessage, OnSuccess = (query) => RefreshList((query.Transaction as UGCQuery).Results) }); } }, AutoLayout = AutoLayout.DockRight }); searchText.OnEnter = (sender) => { button.OnClick.Invoke(button, null); }; QueryStatusMessage = top.AddChild(new Widget { AutoLayout = AutoLayout.DockFill }); List = AddChild(new WidgetListView { ItemHeight = 32, AutoLayout = AutoLayout.DockFill, Border = null, SelectedItemBackgroundColor = new Vector4(0.5f, 0.5f, 0.5f, 1.0f), Padding = new Margin(2, 2, 2, 2) }) as WidgetListView; }
public override void OnEnter() { // Clear the input queue... cause other states aren't using it and it's been filling up. DwarfGame.GumInputMapper.GetInputQueue(); GuiRoot = new Gui.Root(DwarfGame.GuiSkin); GuiRoot.MousePointer = new MousePointer("mouse", 15.0f, 16, 17, 18, 19, 20, 21, 22, 23); var mainPanel = GuiRoot.RootItem.AddChild(new Gui.Widget { Rect = GuiRoot.RenderData.VirtualScreen, Border = "border-fancy", Text = Settings.Name, Font = "font16", TextColor = new Vector4(0, 0, 0, 1), Padding = new Gui.Margin(4, 4, 4, 4), InteriorMargin = new Gui.Margin(24, 0, 0, 0), }); var rightPanel = mainPanel.AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockRight, MinimumSize = new Point(256, 0), Padding = new Gui.Margin(2, 2, 2, 2) }); rightPanel.AddChild(new Gui.Widget { Text = "Regenerate", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.DockTop, OnClick = (sender, args) => { Settings = new WorldGenerationSettings(); RestartGeneration(); } }); rightPanel.AddChild(new Gui.Widget { Text = "Save World", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.DockTop, OnClick = (sender, args) => { if (Generator.CurrentState != WorldGenerator.GenerationState.Finished) { GuiRoot.ShowTooltip(GuiRoot.MousePosition, "Generator is not finished."); } else { System.IO.DirectoryInfo worldDirectory = System.IO.Directory.CreateDirectory(DwarfGame.GetWorldDirectory() + System.IO.Path.DirectorySeparatorChar + Settings.Name); NewOverworldFile file = new NewOverworldFile(Game.GraphicsDevice, Overworld.Map, Settings.Name, Settings.SeaLevel); file.WriteFile(worldDirectory.FullName); file.SaveScreenshot(worldDirectory.FullName + System.IO.Path.DirectorySeparatorChar + "screenshot.png"); GuiRoot.ShowModalPopup(GuiRoot.ConstructWidget(new Gui.Widgets.Popup { Text = "File saved." })); } } }); rightPanel.AddChild(new Gui.Widget { Text = "Advanced", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.DockTop, OnClick = (sender, args) => { var advancedSettingsEditor = GuiRoot.ConstructWidget(new Gui.Widgets.WorldGenerationSettingsDialog { Settings = Settings, OnClose = (s) => { if ((s as Gui.Widgets.WorldGenerationSettingsDialog).Result == Gui.Widgets.WorldGenerationSettingsDialog.DialogResult.Okay) { RestartGeneration(); } } }); GuiRoot.ShowModalPopup(advancedSettingsEditor); } }); rightPanel.AddChild(new Gui.Widget { Text = "Back", Border = "border-button", ChangeColorOnHover = true, TextColor = new Vector4(0, 0, 0, 1), Font = "font16", AutoLayout = Gui.AutoLayout.DockTop, OnClick = (sender, args) => { Generator.Abort(); StateManager.PopState(); } }); StartButton = rightPanel.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) => { if (Generator.CurrentState != WorldGenerator.GenerationState.Finished) { GuiRoot.ShowTooltip(GuiRoot.MousePosition, "World generation is not finished."); } else { Overworld.Name = Settings.Name; Settings.ExistingFile = null; Settings.WorldOrigin = Settings.WorldGenerationOrigin; Settings.SpawnRect = Generator.GetSpawnRectangle(); if (Settings.Natives == null || Settings.Natives.Count == 0) { Settings.Natives = Generator.NativeCivilizations; } //Settings.StartUnderground = StartUnderground.CheckState; //Settings.RevealSurface = RevealSurface.CheckState; foreach (var faction in Settings.Natives) { Vector2 center = new Vector2(faction.Center.X, faction.Center.Y); Vector2 spawn = new Vector2(Generator.GetSpawnRectangle().Center.X, Generator.GetSpawnRectangle().Center.Y); faction.DistanceToCapital = (center - spawn).Length(); faction.ClaimsColony = false; } foreach (var faction in Generator.GetFactionsInSpawn()) { faction.ClaimsColony = true; } StateManager.ClearState(); StateManager.PushState(new LoadState(Game, StateManager, Settings)); } } }); rightPanel.AddChild(new Gui.Widget { Text = "Territory size", AutoLayout = Gui.AutoLayout.DockTop, Font = "font8", TextColor = new Vector4(0, 0, 0, 1), }); var colonySizeCombo = rightPanel.AddChild(new Gui.Widgets.ComboBox { AutoLayout = Gui.AutoLayout.DockTop, Items = new List <string>(new string[] { "Small", "Medium", "Large" }), Font = "font8", TextColor = new Vector4(0, 0, 0, 1), OnSelectedIndexChanged = (sender) => { switch ((sender as Gui.Widgets.ComboBox).SelectedItem) { case "Small": Settings.ColonySize = new Point3(4, 1, 4); break; case "Medium": Settings.ColonySize = new Point3(8, 1, 8); break; case "Large": Settings.ColonySize = new Point3(10, 1, 10); break; } var worldSize = Settings.ColonySize.ToVector3() * VoxelConstants.ChunkSizeX / Settings.WorldScale; float w = worldSize.X; float h = worldSize.Z; float clickX = System.Math.Max(System.Math.Min(Settings.WorldGenerationOrigin.X, Settings.Width - w), 0); float clickY = System.Math.Max(System.Math.Min(Settings.WorldGenerationOrigin.Y, Settings.Height - h), 0); Settings.WorldGenerationOrigin = new Vector2((int)(clickX), (int)(clickY)); } }) as Gui.Widgets.ComboBox; rightPanel.AddChild(new Gui.Widget { Text = "Difficulty", AutoLayout = Gui.AutoLayout.DockTop, Font = "font8", TextColor = new Vector4(0, 0, 0, 1) }); var difficultySelectorCombo = rightPanel.AddChild(new Gui.Widgets.ComboBox { AutoLayout = Gui.AutoLayout.DockTop, Items = EmbarkmentLibrary.Embarkments.Select(e => e.Key).ToList(), TextColor = new Vector4(0, 0, 0, 1), Font = "font8", OnSelectedIndexChanged = (sender) => { Settings.InitalEmbarkment = EmbarkmentLibrary.Embarkments[(sender as Gui.Widgets.ComboBox).SelectedItem]; } }) as Gui.Widgets.ComboBox; /* * StartUnderground = rightPanel.AddChild(new Gui.Widgets.CheckBox * { * AutoLayout = Gui.AutoLayout.DockTop, * Font = "font8", * Text = "@world-generation-start-underground" * }) as Gui.Widgets.CheckBox; * * RevealSurface = rightPanel.AddChild(new Gui.Widgets.CheckBox * { * AutoLayout = Gui.AutoLayout.DockTop, * Font = "font8", * Text = "@world-generation-reveal-surface", * CheckState = true * }) as Gui.Widgets.CheckBox; */ rightPanel.AddChild(new Gui.Widget { Text = "Cave Layers", AutoLayout = Gui.AutoLayout.DockTop, Font = "font8", TextColor = new Vector4(0, 0, 0, 1), }); var layerSetting = rightPanel.AddChild(new Gui.Widgets.ComboBox { AutoLayout = AutoLayout.DockTop, Items = new List <string>(new string[] { "Barely any", "Few", "Normal", "Lots", "Way too many" }), Font = "font8", TextColor = new Vector4(0, 0, 0, 1), OnSelectedIndexChanged = (sender) => { switch ((sender as Gui.Widgets.ComboBox).SelectedItem) { case "Barely any": Settings.NumCaveLayers = 2; break; case "Few": Settings.NumCaveLayers = 3; break; case "Normal": Settings.NumCaveLayers = 4; break; case "Lots": Settings.NumCaveLayers = 6; break; case "Way too many": Settings.NumCaveLayers = 9; break; } } }) as Gui.Widgets.ComboBox; ZoomedPreview = rightPanel.AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockBottom, OnLayout = (sender) => { var space = System.Math.Min( layerSetting.Rect.Width, StartButton.Rect.Top - layerSetting.Rect.Bottom - 4); sender.Rect.Height = space; sender.Rect.Width = space; sender.Rect.Y = layerSetting.Rect.Bottom + 2; sender.Rect.X = layerSetting.Rect.X + ((layerSetting.Rect.Width - space) / 2); } }); GenerationProgress = mainPanel.AddChild(new Gui.Widgets.ProgressBar { AutoLayout = Gui.AutoLayout.DockBottom, TextHorizontalAlign = Gui.HorizontalAlign.Center, TextVerticalAlign = Gui.VerticalAlign.Center, Font = "font10", TextColor = new Vector4(1, 1, 1, 1) }) as Gui.Widgets.ProgressBar; Preview = mainPanel.AddChild(new WorldGeneratorPreview(Game.GraphicsDevice) { Border = "border-thin", AutoLayout = Gui.AutoLayout.DockFill }) as WorldGeneratorPreview; GuiRoot.RootItem.Layout(); difficultySelectorCombo.SelectedIndex = difficultySelectorCombo.Items.IndexOf("Normal"); colonySizeCombo.SelectedIndex = colonySizeCombo.Items.IndexOf("Medium"); layerSetting.SelectedIndex = layerSetting.Items.IndexOf("Normal"); IsInitialized = true; if (AutoGenerate) { RestartGeneration(); } else // Setup a dummy generator for now. { Generator = new WorldGenerator(Settings); Generator.LoadDummy( new Color[Overworld.Map.GetLength(0) * Overworld.Map.GetLength(1)], Game.GraphicsDevice); Preview.SetGenerator(Generator); } base.OnEnter(); }
public override void Construct() { PreviewSelector = AddChild(new Gui.Widgets.ComboBox { Items = new List <string>(new string[] { "Height", "Biomes", "Temperature", "Rain", "Erosion", "Faults", "Factions" }), AutoLayout = Gui.AutoLayout.FloatTopLeft, MinimumSize = new Point(128, 0), OnSelectedIndexChanged = (sender) => UpdatePreview = true, Font = "font8", TextColor = new Vector4(0, 0, 0, 1) }) as Gui.Widgets.ComboBox; PreviewSelector.SelectedIndex = 0; PreviewPanel = AddChild(new Gui.Widget { AutoLayout = Gui.AutoLayout.DockFill, OnLayout = (sender) => { sender.Rect = sender.Rect.Interior(0, PreviewSelector.Rect.Height + 2, 0, 0); }, OnClick = (sender, args) => { if (args.MouseButton == 0) { int chunkSize = 16; var worldSize = Generator.Settings.ColonySize.ToVector3() * chunkSize / Generator.Settings.WorldScale; var clickPoint = ScreenToWorld(new Vector2(args.X, args.Y)); Generator.Settings.WorldGenerationOrigin = Generator.GetOrigin(clickPoint, worldSize); } }, OnMouseMove = (sender, args) => { if (Microsoft.Xna.Framework.Input.Mouse.GetState().RightButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed) { var delta = new Vector2(args.X, args.Y) - new Vector2(PreviousMousePosition.X, PreviousMousePosition.Y); var keyboard = Microsoft.Xna.Framework.Input.Keyboard.GetState(); if (keyboard.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.LeftShift) || keyboard.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.RightShift)) { zoom = System.Math.Min((float)System.Math.Max(zoom + delta.Y * 0.001f, 0.1f), 1.5f); } else { phi += delta.Y * 0.01f; theta -= delta.X * 0.01f; phi = System.Math.Max(phi, 0.5f); phi = System.Math.Min(phi, 1.5f); } } }, OnScroll = (sender, args) => { zoom = System.Math.Min((float)System.Math.Max(args.ScrollValue > 0 ? zoom - 0.1f : zoom + 0.1f, 0.1f), 1.5f); } }); }
public override void Construct() { IsRootTray = true; ItemSource = new Gui.Widget[] { new HorizontalMenuTray.MenuItem { Text = "CHEAT MODE", }, new HorizontalMenuTray.MenuItem { Text = "BUILD", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = RoomLibrary.GetRoomTypes().Select(r => new HorizontalMenuTray.MenuItem { Text = r, OnClick = (sender, args) => ActivateGodTool("Build/" + r) }) } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 5, ItemSource = EntityFactory.EntityFuncs.Keys.OrderBy(s => s).Select(s => new HorizontalMenuTray.MenuItem { Text = s, OnClick = (sender, args) => ActivateGodTool("Spawn/" + s) }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = VoxelLibrary.PrimitiveMap.Keys .Where(t => t.Name != "empty" && t.Name != "water") .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Place/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "DELETE BLOCK", OnClick = (sender, args) => ActivateGodTool("Delete Block") }, new HorizontalMenuTray.MenuItem { Text = "KILL BLOCK", OnClick = (sender, args) => ActivateGodTool("Kill Block") }, new HorizontalMenuTray.MenuItem { Text = "PLACE GRASS", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = GrassLibrary.TypeList .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Grass/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE DECAL", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = DecalLibrary.TypeList .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Decal/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "KILL THINGS", OnClick = (sender, args) => ActivateGodTool("Kill Things") }, new HorizontalMenuTray.MenuItem { Text = "DISEASE", OnClick = (sender, args) => ActivateGodTool("Disease") }, new HorizontalMenuTray.MenuItem { Text = "FILL WATER", OnClick = (sender, args) => ActivateGodTool("Fill Water") }, new HorizontalMenuTray.MenuItem { Text = "FILL LAVA", OnClick = (sender, args) => ActivateGodTool("Fill Lava") }, new HorizontalMenuTray.MenuItem { Text = "FIRE", OnClick = (sender, args) => ActivateGodTool("Fire") }, new HorizontalMenuTray.MenuItem { Text = "TRADE ENVOY", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = Master.World.Factions.Factions.Values.Where(f => f.Race.IsIntelligent && f != Master.Faction).Select(s => { return(new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => Master.World.Diplomacy.SendTradeEnvoy(s, Master.World) }); }), } }, new HorizontalMenuTray.MenuItem { Text = "DWARF BUX", OnClick = (sender, args) => Master.Faction.AddMoney(100m) }, new HorizontalMenuTray.MenuItem { Text = "PAY", OnClick = (sender, args) => Master.PayEmployees() }, new HorizontalMenuTray.MenuItem { Text = "STARVE", OnClick = (sender, args) => { foreach (var minion in Master.Faction.Minions) { minion.Status.Hunger.CurrentValue = 0; } } }, new HorizontalMenuTray.MenuItem { Text = "XP", OnClick = (sender, args) => { foreach (var minion in Master.Faction.Minions) { minion.AddXP(100); } } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN TEST", OnClick = (sender, args) => { var keys = EntityFactory.EntityFuncs.Keys.ToList(); foreach (var key in keys) { EntityFactory.CreateEntity <GameComponent>(key, Master.World.CursorLightPos); } } }, // Shouldn't this go into some kind of 'debug' menu? new HorizontalMenuTray.MenuItem { Text = "DRAW PATHS", OnClick = (sender, args) => { GameSettings.Default.DrawPaths = !GameSettings.Default.DrawPaths; } }, new HorizontalMenuTray.MenuItem { Text = "+1 HOUR", OnClick = (sender, args) => { Master.World.Time.CurrentDate += new TimeSpan(1, 0, 0); } }, new HorizontalMenuTray.MenuItem { Text = "FORCE REBUILD", OnClick = (sender, args) => { foreach (var chunk in Master.World.ChunkManager.ChunkData.ChunkMap) { for (int Y = 0; Y < VoxelConstants.ChunkSizeY; ++Y) { chunk.InvalidateSlice(Y); } } } }, new HorizontalMenuTray.MenuItem { Text = "LET IT SNOW", OnClick = (sender, args) => { var storm = Weather.CreateStorm(Vector3.One, 100.0f, Master.World); storm.TypeofStorm = StormType.SnowStorm; storm.Start(); } }, }; base.Construct(); }
public override void OnEnter() { // Clear the input queue... cause other states aren't using it and it's been filling up. DwarfGame.GumInputMapper.GetInputQueue(); GuiRoot = new Gui.Root(DwarfGame.GumSkin); GuiRoot.MousePointer = new Gui.MousePointer("mouse", 4, 0); GuiRoot.RootItem.Font = "font8"; int w = System.Math.Min(GuiRoot.RenderData.VirtualScreen.Width - 256, 550); int h = System.Math.Min(GuiRoot.RenderData.VirtualScreen.Height - 256, 300); int x = GuiRoot.RenderData.VirtualScreen.Width / 2 - w / 2; int y = System.Math.Max(GuiRoot.RenderData.VirtualScreen.Height / 2 - h / 2, 280); int bgx = x - 258; int bgy = y - 128; DialogueContext.SpeechBubble = GuiRoot.RootItem.AddChild(new Gui.Widget { Rect = new Rectangle(bgx + 258, bgy, w + 50, 128), Border = "speech-bubble-reverse", Font = "font16", TextColor = Color.Black.ToVector4() }); var bg = GuiRoot.RootItem.AddChild(new Widget() { Border = "border-dark", Rect = new Rectangle(bgx, bgy, 258, 258) }); DialogueContext.ChoicePanel = GuiRoot.RootItem.AddChild(new Gui.Widget { Rect = new Rectangle(x, y, w, h), Border = "border-fancy", AutoLayout = AutoLayout.DockFill }); SpeakerAnimation = AnimationLibrary.CreateAnimation(DialogueContext.Envoy.OwnerFaction.Race.TalkAnimation); SpeakerAnimationPlayer = new AnimationPlayer(SpeakerAnimation); DialogueContext.SpeakerAnimation = SpeakerAnimationPlayer; SpeakerWidget = bg.AddChild(new Widget() { Background = new TileReference(SpeakerAnimation.SpriteSheet.AssetName, 0), AutoLayout = AutoLayout.DockFill, MinimumSize = new Point(256, 256), Rect = new Rectangle(bgx, bgy - 5, 256, 256) }); DialogueContext.Politics = World.Diplomacy.GetPolitics( DialogueContext.PlayerFaction, DialogueContext.Envoy.OwnerFaction); DialogueContext.World = World; if (!DialogueContext.Politics.HasMet) { DialogueContext.Politics.HasMet = true; DialogueContext.Politics.RecentEvents.Add(new Diplomacy.PoliticalEvent() { Change = 0.0f, Description = "we just met", Duration = new TimeSpan(1, 0, 0, 0), Time = World.Time.CurrentDate }); } DialogueContext.EnvoyName = TextGenerator.GenerateRandom(Datastructures.SelectRandom(DialogueContext.Envoy.OwnerFaction.Race.NameTemplates).ToArray()); DialogueContext.Transition(DialogueTree.ConversationRoot); IsInitialized = true; base.OnEnter(); }
public override void Construct() { AutoSizeColumns = true; IsRootTray = true; ItemSource = new Gui.Widget[] { new HorizontalMenuTray.MenuItem { Text = "DEBUG", ExpansionChild = new HorizontalMenuTray.Tray { ItemSize = new Point(200, 20), ItemSource = Debugger.EnumerateSwitches().Select(s => new HorizontalMenuTray.CheckboxMenuItem { Text = Debugger.GetNicelyFormattedName(s.Name), InitialState = s.State, SetCallback = s.Set }) } }, new HorizontalMenuTray.MenuItem { Text = "BUILD", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = Library.EnumerateZoneTypeNames().Select(r => new HorizontalMenuTray.MenuItem { Text = r, OnClick = (sender, args) => ActivateGodTool("Build/" + r) }) } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 8, AutoSizeColumns = false, ItemSize = new Point(110, 28), ItemSource = EntityFactory.EnumerateEntityTypes() .Where(s => !s.Contains("Resource") || !Library.GetResourceType(s.Substring(0, s.Length - " Resource".Length)).Generated) .OrderBy(s => s).Select(s => new HorizontalMenuTray.MenuItem { Text = s, OnClick = (sender, args) => ActivateGodTool("Spawn/" + s), }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE BLOCK", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = Library.EnumerateVoxelTypes() .Where(t => t.Name != "_empty" && t.Name != "water") .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Place/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "DELETE BLOCK", OnClick = (sender, args) => ActivateGodTool("Delete Block") }, new HorizontalMenuTray.MenuItem { Text = "NUKE COLUMN", OnClick = (sender, args) => ActivateGodTool("Nuke Column") }, new HorizontalMenuTray.MenuItem { Text = "KILL BLOCK", OnClick = (sender, args) => ActivateGodTool("Kill Block") }, new HorizontalMenuTray.MenuItem { Text = "PLACE GRASS", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = Library.EnumerateGrassTypes() .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Grass/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE RAIL", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 1, ItemSource = new HorizontalMenuTray.MenuItem[] { new HorizontalMenuTray.MenuItem { Text = "RAW PIECES", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 2, ItemSize = new Point(200, 20), ItemSource = Library.EnumerateRailPieces().Select(p => new HorizontalMenuTray.MenuItem { Text = p.Name, OnClick = (sender, args) => ActivateGodTool("Rail/" + p.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "USING PATTERNS", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 1, ItemSource = Library.EnumerateRailPatterns().Select(p => new HorizontalMenuTray.MenuItem { Text = p.Name, OnClick = (sender, args) => { var railTool = World.UserInterface.Tools["BuildRail"] as Rail.BuildRailTool; railTool.Pattern = p; World.UserInterface.ChangeTool("BuildRail"); railTool.GodModeSwitch = true; } }) } }, new HorizontalMenuTray.MenuItem { Text = "PAINT", OnClick = (sender, args) => { var railTool = World.UserInterface.Tools["PaintRail"] as Rail.PaintRailTool; railTool.SelectedResources = new List <ResourceAmount>(new ResourceAmount[] { new ResourceAmount("Rail", 1) }); World.UserInterface.ChangeTool("PaintRail"); railTool.GodModeSwitch = true; } } } } }, new HorizontalMenuTray.MenuItem { Text = "AUTO SAVE", OnClick = (sender, args) => { World.UserInterface.AutoSave(); } }, new HorizontalMenuTray.MenuItem { Text = "KILL THINGS", OnClick = (sender, args) => ActivateGodTool("Kill Things") }, new HorizontalMenuTray.MenuItem { Text = "TRAILER", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = new List <HorizontalMenuTray.MenuItem>() { new HorizontalMenuTray.MenuItem { Text = "SPIN +", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Zero, 2.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "SPIN -", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Zero, -2.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "ZOOM -", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Zero, 0.0f, 2.5f), }, new HorizontalMenuTray.MenuItem { Text = "ZOOM +", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Zero, 0.0f, -2.5f), }, new HorizontalMenuTray.MenuItem { Text = "FWD", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Forward * 5, 0.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "BACK", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Backward * 5, 0.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "LEFT", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Left * 5, 0.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "RIGHT", OnClick = (sender, args) => World.Renderer.Camera.Trailer(Vector3.Right * 5, 0.0f, 0.0f), }, } } }, new HorizontalMenuTray.MenuItem { Text = "FILL WATER", OnClick = (sender, args) => ActivateGodTool("Fill Water") }, new HorizontalMenuTray.MenuItem { Text = "FILL LAVA", OnClick = (sender, args) => ActivateGodTool("Fill Lava") }, new HorizontalMenuTray.MenuItem { Text = "TRADE ENVOY", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = World.Factions.Factions.Values.Where(f => f.Race.IsIntelligent && f != World.PlayerFaction).Select(s => { return(new HorizontalMenuTray.MenuItem { Text = s.ParentFaction.Name, OnClick = (sender, args) => s.SendTradeEnvoy() }); }), } }, new HorizontalMenuTray.MenuItem { Text = "EVENT", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = Events.Library.Enumerate().Select(e => { return(new HorizontalMenuTray.MenuItem { Text = e.Name, OnClick = (sender, args) => World.EventScheduler.ActivateEvent(World, e) }); }), } }, new HorizontalMenuTray.MenuItem { Text = "WAR PARTY", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = World.Factions.Factions.Values.Where(f => f.Race.IsIntelligent && f != World.PlayerFaction).Select(s => { return(new HorizontalMenuTray.MenuItem { Text = s.ParentFaction.Name, OnClick = (sender, args) => s.SendWarParty() }); }), } }, new HorizontalMenuTray.MenuItem { Text = "DWARF BUX", OnClick = (sender, args) => World.PlayerFaction.AddMoney(100m) }, new HorizontalMenuTray.MenuItem { Text = "MINIONS", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = new HorizontalMenuTray.MenuItem[] { new HorizontalMenuTray.MenuItem { Text = "PAY", OnClick = (sender, args) => World.PayEmployees() }, new HorizontalMenuTray.MenuItem { Text = "STARVE", OnClick = (sender, args) => { foreach (var minion in World.PlayerFaction.Minions) { minion.Stats.Hunger.CurrentValue = 0; } } }, new HorizontalMenuTray.MenuItem { Text = "XP", OnClick = (sender, args) => { foreach (var minion in World.PlayerFaction.Minions) { minion.AddXP(100); } } }, new HorizontalMenuTray.MenuItem { Text = "DISEASE", OnClick = (sender, args) => ActivateGodTool("Disease") }, new HorizontalMenuTray.MenuItem { Text = "HAPPY", OnClick = (sender, args) => { foreach (var minion in World.PlayerFaction.Minions) { minion.Creature.AddThought("You used the god menu to make me happy.", new TimeSpan(0, 8, 0, 0), 100.0f); } } }, new HorizontalMenuTray.MenuItem { Text = "PISSED", OnClick = (sender, args) => { foreach (var minion in World.PlayerFaction.Minions) { minion.Creature.AddThought("You used the god menu to piss me off.", new TimeSpan(0, 8, 0, 0), -100.0f); } } }, new HorizontalMenuTray.MenuItem { Text = "GAMBLE", OnClick = (sender, args) => { foreach (var employee in World.PlayerFaction.Minions) { employee.Stats.Boredom.CurrentValue = employee.Stats.Boredom.MinValue; employee.AddMoney(100); employee.AssignTask(new Scripting.GambleTask() { Priority = TaskPriority.High }); } } }, new HorizontalMenuTray.MenuItem { Text = "PASS OUT", OnClick = (sender, args) => { var employee = Datastructures.SelectRandom(World.PlayerFaction.Minions); if (employee != null) { employee.Creature.Heal(-employee.Stats.Health.CurrentValue * employee.Creature.MaxHealth + 1); } } } } } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN TEST", OnClick = (sender, args) => { // Copy is required because spawning some types results in the creation of new types. EG, snakes create snake meat. var keys = EntityFactory.EnumerateEntityTypes().ToList(); int num = keys.Count(); float gridSize = (float)Math.Ceiling(Math.Sqrt((double)num)); Vector3 gridCenter = World.Renderer.CursorLightPos; int i = 0; for (float dx = -gridSize / 2; dx <= gridSize / 2; dx++) { for (float dz = -gridSize / 2; dz <= gridSize / 2; dz++) { if (i >= num) { continue; } Vector3 pos = MathFunctions.Clamp(gridCenter + new Vector3(dx, World.WorldSizeInVoxels.Y, dz), World.ChunkManager.Bounds); VoxelHandle handle = VoxelHelpers.FindFirstVisibleVoxelOnRay(World.ChunkManager, pos, pos + Vector3.Down * 100); if (handle.IsValid) { EntityFactory.CreateEntity <GameComponent>(keys[i], handle.WorldPosition + Vector3.Up); } i++; } } } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN CRAFTS", OnClick = (sender, args) => { // Copy is required because spawning some types results in the creation of new types. EG, snakes create snake meat. var itemTypes = Library.EnumerateCraftables().Where(craft => craft.Type == CraftItem.CraftType.Object).ToList(); int num = itemTypes.Count(); float gridSize = (float)Math.Ceiling(Math.Sqrt((double)num)); Vector3 gridCenter = World.Renderer.CursorLightPos; int i = 0; for (float dx = -gridSize / 2; dx <= gridSize / 2; dx++) { for (float dz = -gridSize / 2; dz <= gridSize / 2; dz++) { if (i < num) { var item = itemTypes[i]; if (item.Name != "Explosive") { Vector3 pos = MathFunctions.Clamp(gridCenter + new Vector3(dx, World.WorldSizeInVoxels.Y, dz), World.ChunkManager.Bounds); VoxelHandle handle = VoxelHelpers.FindFirstVisibleVoxelOnRay(World.ChunkManager, pos, pos + Vector3.Down * 100); if (handle.IsValid) { var blackboard = new Blackboard(); List <ResourceAmount> resources = item.RequiredResources.Select(r => new ResourceAmount(Library.EnumerateResourceTypesWithTag(r.Type).First(), r.Count)).ToList(); blackboard.SetData <List <ResourceAmount> >("Resources", resources); blackboard.SetData <string>("CraftType", item.Name); var entity = EntityFactory.CreateEntity <GameComponent>(item.EntityName, handle.WorldPosition + Vector3.Up + item.SpawnOffset, blackboard); if (entity != null) { if (item.AddToOwnedPool) { World.PlayerFaction.OwnedObjects.Add(entity as GameComponent); } if (item.Moveable) { entity.Tags.Add("Moveable"); } if (item.Deconstructable) { entity.Tags.Add("Deconstructable"); } } } } } i++; } } } }, new HorizontalMenuTray.MenuItem { Text = "+1 HOUR", OnClick = (sender, args) => { World.Time.CurrentDate += new TimeSpan(1, 0, 0); } }, new HorizontalMenuTray.MenuItem { Text = "FORCE REBUILD", OnClick = (sender, args) => { foreach (var chunk in World.ChunkManager.ChunkMap) { for (int Y = 0; Y < VoxelConstants.ChunkSizeY; ++Y) { chunk.InvalidateSlice(Y); } } } }, new HorizontalMenuTray.MenuItem { Text = "REPULSE", OnClick = (sender, args) => ActivateGodTool("Repulse") }, new HorizontalMenuTray.MenuItem { Text = "SLOWMO", OnClick = (sender, args) => GameSettings.Default.EnableSlowMotion = !GameSettings.Default.EnableSlowMotion }, new HorizontalMenuTray.MenuItem { Text = "LET IT SNOW", OnClick = (sender, args) => { var storm = Weather.CreateStorm(Vector3.One, 100.0f, World); storm.TypeofStorm = StormType.SnowStorm; storm.Start(); } } }; base.Construct(); }
public override void Construct() { Settings.Seed = Settings.Name.GetHashCode(); PopupDestructionType = PopupDestructionType.Keep; Padding = new Margin(2, 2, 2, 2); //Set size and center on screen. Rect = new Rectangle(0, 0, 400, 400); Rect.X = (Root.RenderData.VirtualScreen.Width / 2) - 200; Rect.Y = (Root.RenderData.VirtualScreen.Height / 2) - 200; Border = "border-fancy"; var okayButton = AddChild(new Gui.Widgets.Button { Text = "Okay", TextHorizontalAlign = HorizontalAlign.Center, TextVerticalAlign = VerticalAlign.Center, Border = "border-button", OnClick = (sender, args) => { Result = DialogResult.Okay; this.Close(); }, AutoLayout = AutoLayout.FloatBottomRight }); AddChild(new Button { Text = "Cancel", TextHorizontalAlign = HorizontalAlign.Center, TextVerticalAlign = VerticalAlign.Center, Border = "border-button", OnClick = (sender, args) => { Result = DialogResult.Cancel; this.Close(); }, AutoLayout = AutoLayout.FloatBottomRight, OnLayout = (sender) => sender.Rect.X -= okayButton.Rect.Width + 4 }); var topRow = AddChild(new Widget { AutoLayout = AutoLayout.DockTop, MinimumSize = new Point(0, 30) }); topRow.AddChild(new Widget { AutoLayout = AutoLayout.DockLeft, MinimumSize = new Point(64, 0), Text = "Name" }); topRow.AddChild(new Widget { AutoLayout = AutoLayout.DockRight, Border = "border-button", Text = "Random", OnClick = (sender, args) => { Settings.Name = TextGenerator.GenerateRandom(TextGenerator.GetAtoms(ContentPaths.Text.Templates.worlds)); NameEditBox.Text = Settings.Name; Settings.Seed = Settings.Name.GetHashCode(); } }); NameEditBox = topRow.AddChild(new Gui.Widgets.EditableTextField { AutoLayout = AutoLayout.DockFill, Text = Settings.Name, OnTextChange = (sender) => { Settings.Name = sender.Text; Settings.Seed = Settings.Name.GetHashCode(); } }); AddChild(CreateCombo <int>(Root, "World Size", "Size of the world to generate", new int[] { 256, 384, 512, 1024, 2048 }, (i) => { Settings.Width = i; Settings.Height = i; }, () => Settings.Width)); AddChild(CreateCombo <int>(Root, "Natives", "Number of native civilizations", new int[] { 0, 2, 4, 8, 16 }, (i) => Settings.NumCivilizations = i, () => Settings.NumCivilizations)); AddChild(CreateCombo <int>(Root, "Faults", "Number of straights, seas, etc.", new int[] { 0, 1, 3, 5, 10 }, (i) => Settings.NumFaults = i, () => Settings.NumFaults)); AddChild(CreateCombo <float>(Root, "Rainfall", "Amount of moisture in the world.", new float[] { 0.0f, 0.5f, 1.0f, 1.5f, 2.0f }, (f) => Settings.RainfallScale = f, () => Settings.RainfallScale)); AddChild(CreateCombo <int>(Root, "Erosion", "How eroded is the landscape.", new int[] { 50, 1000, 8000, 20000, 50000 }, (i) => Settings.NumRains = i, () => Settings.NumRains)); AddChild(CreateCombo <float>(Root, "Sea Level", "Height of the sea.", new float[] { 0.05f, 0.1f, 0.17f, 0.25f, 0.3f }, (f) => Settings.SeaLevel = f, () => Settings.SeaLevel)); AddChild(CreateCombo <float>(Root, "Temperature", "Average temperature.", new float[] { 0.0f, 0.5f, 1.0f, 1.5f, 2.0f }, (f) => Settings.TemperatureScale = f, () => Settings.TemperatureScale)); Layout(); }
public override void Construct() { AutoSizeColumns = true; IsRootTray = true; ItemSource = new Gui.Widget[] { new HorizontalMenuTray.MenuItem { Text = "CHEAT MODE", }, new HorizontalMenuTray.MenuItem { Text = "DEBUG", ExpansionChild = new HorizontalMenuTray.Tray { ItemSize = new Point(200, 20), ItemSource = Debugger.EnumerateSwitches().Select(s => new HorizontalMenuTray.CheckboxMenuItem { Text = Debugger.GetNicelyFormattedName(s.Name), InitialState = s.State, SetCallback = s.Set }) } }, new HorizontalMenuTray.MenuItem { Text = "DEBUG SAVE", OnClick = (sender, args) => { // Turn off binary compressed saves and save a nice straight json save for debugging purposes. // Todo: Why isn't World managing this paused state itself? bool paused = Master.World.Paused; var previousSetting = DwarfGame.COMPRESSED_BINARY_SAVES; DwarfGame.COMPRESSED_BINARY_SAVES = false; Master.World.Save( String.Format("{0}_{1}_DEBUG", Overworld.Name, Master.World.GameID), (success, exception) => { Master.World.MakeAnnouncement(success ? "Debug save created.": "Debug save failed - " + exception.Message); DwarfGame.COMPRESSED_BINARY_SAVES = previousSetting; Master.World.Paused = paused; }); } }, new HorizontalMenuTray.MenuItem { Text = "BUILD", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = RoomLibrary.GetRoomTypes().Select(r => new HorizontalMenuTray.MenuItem { Text = r, OnClick = (sender, args) => ActivateGodTool("Build/" + r) }) } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 5, ItemSource = EntityFactory.EnumerateEntityTypes().Where(s => !s.Contains("Resource") || !ResourceLibrary.GetResourceByName(s.Substring(0, s.Length - " Resource".Length)).Generated).OrderBy(s => s).Select(s => new HorizontalMenuTray.MenuItem { Text = s, OnClick = (sender, args) => ActivateGodTool("Spawn/" + s) }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE BLOCK", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = VoxelLibrary.PrimitiveMap.Keys .Where(t => t.Name != "empty" && t.Name != "water") .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Place/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "DELETE BLOCK", OnClick = (sender, args) => ActivateGodTool("Delete Block") }, new HorizontalMenuTray.MenuItem { Text = "KILL BLOCK", OnClick = (sender, args) => ActivateGodTool("Kill Block") }, new HorizontalMenuTray.MenuItem { Text = "PLACE GRASS", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = GrassLibrary.TypeList .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Grass/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE DECAL", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 3, ItemSource = DecalLibrary.TypeList .OrderBy(s => s.Name) .Select(s => new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => ActivateGodTool("Decal/" + s.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "PLACE RAIL", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 1, ItemSource = new HorizontalMenuTray.MenuItem[] { new HorizontalMenuTray.MenuItem { Text = "RAW PIECES", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 2, ItemSize = new Point(200, 20), ItemSource = Rail.RailLibrary.EnumeratePieces().Select(p => new HorizontalMenuTray.MenuItem { Text = p.Name, OnClick = (sender, args) => ActivateGodTool("Rail/" + p.Name) }) } }, new HorizontalMenuTray.MenuItem { Text = "USING PATTERNS", ExpansionChild = new HorizontalMenuTray.Tray { Columns = 1, ItemSource = Rail.RailLibrary.EnumeratePatterns().Select(p => new HorizontalMenuTray.MenuItem { Text = p.Name, OnClick = (sender, args) => { var railTool = Master.Tools[GameMaster.ToolMode.BuildRail] as Rail.BuildRailTool; railTool.Pattern = p; Master.ChangeTool(GameMaster.ToolMode.BuildRail); railTool.GodModeSwitch = true; } }) } }, new HorizontalMenuTray.MenuItem { Text = "PAINT", OnClick = (sender, args) => { var railTool = Master.Tools[GameMaster.ToolMode.PaintRail] as Rail.PaintRailTool; railTool.SelectedResources = new List <ResourceAmount>(new ResourceAmount[] { new ResourceAmount("Rail", 1) }); Master.ChangeTool(GameMaster.ToolMode.PaintRail); railTool.GodModeSwitch = true; } } } } }, new HorizontalMenuTray.MenuItem { Text = "KILL THINGS", OnClick = (sender, args) => ActivateGodTool("Kill Things") }, new HorizontalMenuTray.MenuItem { Text = "TRAILER", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = new List <HorizontalMenuTray.MenuItem>() { new HorizontalMenuTray.MenuItem { Text = "SPIN +", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Zero, 2.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "SPIN -", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Zero, -2.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "ZOOM -", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Zero, 0.0f, 2.5f), }, new HorizontalMenuTray.MenuItem { Text = "ZOOM +", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Zero, 0.0f, -2.5f), }, new HorizontalMenuTray.MenuItem { Text = "FWD", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Forward * 5, 0.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "BACK", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Backward * 5, 0.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "LEFT", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Left * 5, 0.0f, 0.0f), }, new HorizontalMenuTray.MenuItem { Text = "RIGHT", OnClick = (sender, args) => this.Master.World.Camera.Trailer(Vector3.Right * 5, 0.0f, 0.0f), }, } } }, new HorizontalMenuTray.MenuItem { Text = "FILL WATER", OnClick = (sender, args) => ActivateGodTool("Fill Water") }, new HorizontalMenuTray.MenuItem { Text = "FILL LAVA", OnClick = (sender, args) => ActivateGodTool("Fill Lava") }, new HorizontalMenuTray.MenuItem { Text = "TRADE ENVOY", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = Master.World.Factions.Factions.Values.Where(f => f.Race.IsIntelligent && f != Master.Faction).Select(s => { return(new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => Master.World.Diplomacy.SendTradeEnvoy(s, Master.World) }); }), } }, new HorizontalMenuTray.MenuItem { Text = "EVENT", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = Master.World.GoalManager.EventScheduler.Events.Events.Select(e => { return(new HorizontalMenuTray.MenuItem { Text = e.Name, OnClick = (sender, args) => Master.World.GoalManager.EventScheduler.ActivateEvent(Master.World, e) }); }), } }, new HorizontalMenuTray.MenuItem { Text = "WAR PARTY", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = Master.World.Factions.Factions.Values.Where(f => f.Race.IsIntelligent && f != Master.Faction).Select(s => { return(new HorizontalMenuTray.MenuItem { Text = s.Name, OnClick = (sender, args) => Master.World.Diplomacy.SendWarParty(s) }); }), } }, new HorizontalMenuTray.MenuItem { Text = "DWARF BUX", OnClick = (sender, args) => Master.Faction.AddMoney(100m) }, new HorizontalMenuTray.MenuItem { Text = "MINIONS", ExpansionChild = new HorizontalMenuTray.Tray { ItemSource = new HorizontalMenuTray.MenuItem[] { new HorizontalMenuTray.MenuItem { Text = "PAY", OnClick = (sender, args) => Master.PayEmployees() }, new HorizontalMenuTray.MenuItem { Text = "STARVE", OnClick = (sender, args) => { foreach (var minion in Master.Faction.Minions) { minion.Status.Hunger.CurrentValue = 0; } } }, new HorizontalMenuTray.MenuItem { Text = "XP", OnClick = (sender, args) => { foreach (var minion in Master.Faction.Minions) { minion.AddXP(100); } } }, new HorizontalMenuTray.MenuItem { Text = "DISEASE", OnClick = (sender, args) => ActivateGodTool("Disease") }, new HorizontalMenuTray.MenuItem { Text = "HAPPY", OnClick = (sender, args) => { foreach (var minion in Master.Faction.Minions) { var thoughts = minion.GetRoot().GetComponent <DwarfThoughts>(); if (thoughts != null) { thoughts.AddThought(Thought.ThoughtType.CheatedHappy); } } } }, new HorizontalMenuTray.MenuItem { Text = "PISSED", OnClick = (sender, args) => { foreach (var minion in Master.Faction.Minions) { var thoughts = minion.GetRoot().GetComponent <DwarfThoughts>(); if (thoughts != null) { thoughts.AddThought(Thought.ThoughtType.CheatedPissed); } } } }, new HorizontalMenuTray.MenuItem { Text = "GAMBLE", OnClick = (sender, args) => { foreach (var employee in Master.Faction.Minions) { employee.AssignTask(new Scripting.GambleTask() { Priority = Task.PriorityType.High }); } } }, new HorizontalMenuTray.MenuItem { Text = "PASS OUT", OnClick = (sender, args) => { var employee = Datastructures.SelectRandom(Master.Faction.Minions); if (employee != null) { employee.Creature.Heal(-employee.Status.Health.CurrentValue * employee.Creature.MaxHealth + 1); } } } } } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN TEST", OnClick = (sender, args) => { // Copy is required because spawning some types results in the creation of new types. EG, snakes create snake meat. var keys = EntityFactory.EnumerateEntityTypes().ToList(); int num = keys.Count(); float gridSize = (float)Math.Ceiling(Math.Sqrt((double)num)); Vector3 gridCenter = Master.World.CursorLightPos; int i = 0; for (float dx = -gridSize / 2; dx <= gridSize / 2; dx++) { for (float dz = -gridSize / 2; dz <= gridSize / 2; dz++) { if (i >= num) { continue; } Vector3 pos = MathFunctions.Clamp(gridCenter + new Vector3(dx, VoxelConstants.ChunkSizeY, dz), Master.World.ChunkManager.Bounds); VoxelHandle handle = VoxelHelpers.FindFirstVisibleVoxelOnRay(Master.World.ChunkManager.ChunkData, pos, pos + Vector3.Down * 100); if (handle.IsValid) { EntityFactory.CreateEntity <GameComponent>(keys[i], handle.WorldPosition + Vector3.Up); } i++; } } } }, new HorizontalMenuTray.MenuItem { Text = "SPAWN CRAFTS", OnClick = (sender, args) => { // Copy is required because spawning some types results in the creation of new types. EG, snakes create snake meat. var itemTypes = CraftLibrary.EnumerateCraftables().Where(craft => craft.Type == CraftItem.CraftType.Object).ToList(); int num = itemTypes.Count(); float gridSize = (float)Math.Ceiling(Math.Sqrt((double)num)); Vector3 gridCenter = Master.World.CursorLightPos; int i = 0; for (float dx = -gridSize / 2; dx <= gridSize / 2; dx++) { for (float dz = -gridSize / 2; dz <= gridSize / 2; dz++) { if (i < num) { var item = itemTypes[i]; if (item.Name != "Explosive") { Vector3 pos = MathFunctions.Clamp(gridCenter + new Vector3(dx, VoxelConstants.ChunkSizeY, dz), Master.World.ChunkManager.Bounds); VoxelHandle handle = VoxelHelpers.FindFirstVisibleVoxelOnRay(Master.World.ChunkManager.ChunkData, pos, pos + Vector3.Down * 100); if (handle.IsValid) { var blackboard = new Blackboard(); List <ResourceAmount> resources = item.RequiredResources.Select(r => new ResourceAmount(ResourceLibrary.GetResourcesByTag(r.ResourceType).First(), r.NumResources)).ToList(); blackboard.SetData <List <ResourceAmount> >("Resources", resources); blackboard.SetData <string>("CraftType", item.Name); var entity = EntityFactory.CreateEntity <GameComponent>(item.EntityName, handle.WorldPosition + Vector3.Up + item.SpawnOffset, blackboard); if (entity != null) { if (item.AddToOwnedPool) { Master.Faction.OwnedObjects.Add(entity as Body); } if (item.Moveable) { entity.Tags.Add("Moveable"); } if (item.Deconstructable) { entity.Tags.Add("Deconstructable"); } } } } } i++; } } } }, new HorizontalMenuTray.MenuItem { Text = "+1 HOUR", OnClick = (sender, args) => { Master.World.Time.CurrentDate += new TimeSpan(1, 0, 0); } }, new HorizontalMenuTray.MenuItem { Text = "FORCE REBUILD", OnClick = (sender, args) => { foreach (var chunk in Master.World.ChunkManager.ChunkData.ChunkMap) { for (int Y = 0; Y < VoxelConstants.ChunkSizeY; ++Y) { chunk.InvalidateSlice(Y); } } } }, new HorizontalMenuTray.MenuItem { Text = "REPULSE", OnClick = (sender, args) => ActivateGodTool("Repulse") }, new HorizontalMenuTray.MenuItem { Text = "SLOWMO", OnClick = (sender, args) => GameSettings.Default.EnableSlowMotion = !GameSettings.Default.EnableSlowMotion }, new HorizontalMenuTray.MenuItem { Text = "LET IT SNOW", OnClick = (sender, args) => { var storm = Weather.CreateStorm(Vector3.One, 100.0f, Master.World); storm.TypeofStorm = StormType.SnowStorm; storm.Start(); } } }; 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; }