/// <summary> /// Initializes a new instance of the <see cref="DownArrow"/> class. /// </summary> /// <param name="parent">Parent control.</param> public DownArrow(ComboBox parent) : base(parent) // or Base? { MouseInputEnabled = false; SetSize(15, 15); m_ComboBox = parent; }
private void InitializeUI() { settings = NavMeshGenerationSettings.Default; areaSettings = new AreaIdGenerationSettings(); DockBase dock = new DockBase(gwenCanvas); dock.Dock = Pos.Fill; dock.SetSize(Width, Height); dock.RightDock.Width = 280; dock.BottomDock.Height = 150; statusBar = new StatusBar(gwenCanvas); Label genTime = new Label(statusBar); genTime.Name = "GenTime"; genTime.Text = "Generation Time: 0ms"; genTime.Dock = Pos.Left; LabeledCheckBox catchCheckBox = new LabeledCheckBox(statusBar); catchCheckBox.Text = "Intercept and log exceptions"; catchCheckBox.Dock = Pos.Right; catchCheckBox.CheckChanged += (s, e) => interceptExceptions = catchCheckBox.IsChecked; catchCheckBox.IsChecked = true; Base genBase = new Base(dock); dock.RightDock.TabControl.AddPage("NavMesh Generation", genBase); Button generateButton = new Button(genBase); generateButton.Text = "Generate!"; generateButton.Height = 30; generateButton.Dock = Pos.Top; generateButton.Released += (s, e) => GenerateNavMesh(); GroupBox displaySettings = new GroupBox(genBase); displaySettings.Text = "Display"; displaySettings.Dock = Pos.Top; displaySettings.Height = 60; Base levelCheckBase = new Base(displaySettings); levelCheckBase.Dock = Pos.Top; Label levelCheckLabel = new Label(levelCheckBase); levelCheckLabel.Text = "Level"; levelCheckLabel.Dock = Pos.Left; CheckBox levelCheckBox = new CheckBox(levelCheckBase); levelCheckBox.Dock = Pos.Right; levelCheckBox.Checked += (s, e) => displayLevel = true; levelCheckBox.UnChecked += (s, e) => displayLevel = false; levelCheckBox.IsChecked = true; levelCheckBase.SizeToChildren(); Base displayModeBase = new Base(displaySettings); displayModeBase.Dock = Pos.Top; displayModeBase.Padding = new Padding(0, 4, 0, 0); Label displayModeLabel = new Label(displayModeBase); displayModeLabel.Text = "Generation Step"; displayModeLabel.Dock = Pos.Left; displayModeLabel.Padding = new Padding(0, 0, 4, 0); ComboBox displayModes = new ComboBox(displayModeBase); displayModes.Dock = Pos.Top; displayModes.AddItem("None", "", DisplayMode.None); displayModes.AddItem("Heightfield", "", DisplayMode.Heightfield); displayModes.AddItem("Compact Heightfield", "", DisplayMode.CompactHeightfield); displayModes.AddItem("Distance Field", "", DisplayMode.DistanceField); displayModes.AddItem("Regions", "", DisplayMode.Regions); displayModes.AddItem("Contours", "", DisplayMode.Contours); displayModes.AddItem("Polygon Mesh", "", DisplayMode.PolyMesh); displayModes.AddItem("Polygon Mesh Detail", "", DisplayMode.PolyMeshDetail); displayModes.AddItem("NavMesh", "", DisplayMode.NavMesh); displayModes.AddItem("Pathfinding", "", DisplayMode.Pathfinding); displayModes.ItemSelected += (s, e) => displayMode = (DisplayMode)e.SelectedItem.UserData; displayModes.SelectByUserData(DisplayMode.PolyMeshDetail); displayModeBase.SizeToChildren(); displayModeBase.Height += 4; //accounts for the padding, GWEN.NET should do this const int leftMax = 125; const int rightMax = 20; GroupBox areaSetting = new GroupBox(genBase); areaSetting.Text = "Area"; areaSetting.Dock = Pos.Top; areaSetting.Height = 90; var levelTris = level.GetTriangles(); BBox3 bounds = TriangleEnumerable.FromTriangle(levelTris, 0, levelTris.Length).GetBoundingBox(); Base maxTriSlope = CreateSliderOption(areaSetting, "Max Tri Slope:", 0.0001f, 3.14f, 3.14f, "N2", leftMax, rightMax, v => areaSettings.MaxTriSlope = v); Base minLevelHeight = CreateSliderOption(areaSetting, "Min Height:", bounds.Min.Y, bounds.Max.Y, bounds.Min.Y, "N0", leftMax, rightMax, v => areaSettings.MinLevelHeight = v); Base maxLevelHeight = CreateSliderOption(areaSetting, "Max Height:", bounds.Min.Y, bounds.Max.Y, bounds.Max.Y, "N0", leftMax, rightMax, v => areaSettings.MaxLevelHeight = v); GroupBox rsSettings = new GroupBox(genBase); rsSettings.Text = "Rasterization"; rsSettings.Dock = Pos.Top; rsSettings.Height = 90; Base cellSizeSetting = CreateSliderOption(rsSettings, "Cell Size:", 0.1f, 2.0f, 0.3f, "N2", leftMax, rightMax, v => settings.CellSize = v); Base cellHeightSetting = CreateSliderOption(rsSettings, "Cell Height:", 0.1f, 2f, 0.2f, "N2", leftMax, rightMax, v => settings.CellHeight = v); GroupBox agentSettings = new GroupBox(genBase); agentSettings.Text = "Agent"; agentSettings.Dock = Pos.Top; agentSettings.Height = 115; Base maxSlopeSetting = CreateSliderOption(agentSettings, "Max Climb:", 0.1f, 5.0f, 0.9f, "N0", leftMax, rightMax, v => settings.MaxClimb = v); Base maxHeightSetting = CreateSliderOption(agentSettings, "Height:", 0.1f, 5.0f, 2.0f, "N0", leftMax, rightMax, v => settings.AgentHeight = v); Base erodeRadius = CreateSliderOption(agentSettings, "Radius:", 0.0f, 5.0f, 0.6f, "N1", leftMax, rightMax, v => { settings.AgentRadius = v; agentCylinder.Radius = v; }); Base addRemoveAgent = CreateAddRemoveButton(agentSettings, "Count", leftMax, rightMax, 0, MAX_AGENTS, () => { numActiveAgents++; GenerateCrowd(); }, () => { numActiveAgents--; GenerateCrowd(); }); GroupBox regionSettings = new GroupBox(genBase); regionSettings.Text = "Region"; regionSettings.Dock = Pos.Top; regionSettings.Height = 65; Base minRegionSize = CreateSliderOption(regionSettings, "Min Region Size:", 0f, 150f, 8f, "N0", leftMax, rightMax, v => settings.MinRegionSize = (int)Math.Round(v)); Base mrgRegionSize = CreateSliderOption(regionSettings, "Merged Region Size:", 0f, 150f, 20f, "N0", leftMax, rightMax, v => settings.MergedRegionSize = (int)Math.Round(v)); GroupBox navMeshSettings = new GroupBox(genBase); navMeshSettings.Text = "NavMesh"; navMeshSettings.Dock = Pos.Top; navMeshSettings.Height = 90; Base maxEdgeLength = CreateSliderOption(navMeshSettings, "Max Edge Length:", 0f, 50f, 12f, "N0", leftMax, rightMax, v => settings.MaxEdgeLength = (int)Math.Round(v)); Base maxEdgeErr = CreateSliderOption(navMeshSettings, "Max Edge Error:", 0f, 3f, 1.8f, "N1", leftMax, rightMax, v => settings.MaxEdgeError = v); Base vertsPerPoly = CreateSliderOption(navMeshSettings, "Verts Per Poly:", 3f, 12f, 6f, "N0", leftMax, rightMax, v => settings.VertsPerPoly = (int)Math.Round(v)); GroupBox navMeshDetailSettings = new GroupBox(genBase); navMeshDetailSettings.Text = "NavMeshDetail"; navMeshDetailSettings.Dock = Pos.Top; navMeshDetailSettings.Height = 65; Base sampleDistance = CreateSliderOption(navMeshDetailSettings, "Sample Distance:", 0f, 16f, 6f, "N0", leftMax, rightMax, v => settings.SampleDistance = (int)Math.Round(v)); Base maxSampleError = CreateSliderOption(navMeshDetailSettings, "Max Sample Error:", 0f, 16f, 1f, "N0", leftMax, rightMax, v => settings.MaxSampleError = (int)Math.Round(v)); Base logBase = new Base(dock); dock.BottomDock.TabControl.AddPage("Log", logBase); ListBox logBox = new ListBox(logBase); logBox.Dock = Pos.Fill; logBox.AllowMultiSelect = false; logBox.EnableScroll(true, true); Console.SetOut(new GwenTextWriter(logBox)); }
public SettingsMenu (Application app, Base parent, CompositorColorCorrectionNode colorCorrectionNode) { this.application = app; this.parent = parent; this.colorCorrectionNode = colorCorrectionNode; window = new WindowControl (parent); window.DisableResizing(); window.Title = Localizer.Instance.GetValueForName("settings"); window.Hide(); float gamma = (float) ConfigManager.Instance["freezing_archer"].GetDouble("general", "gamma"); colorCorrectionNode.Gamma = gamma; string language = ConfigManager.Instance["freezing_archer"].GetString("general", "language"); Localizer.Instance.CurrentLocale = (LocaleEnum) Enum.Parse(typeof (LocaleEnum), language); languageLabel = new Label (window); languageLabel.AutoSizeToContents = true; languageLabel.Y = 10; languageLabel.Text = Localizer.Instance.GetValueForName("language"); languageDropdown = new ComboBox (window); languageDropdown.Width = CONTROL_WIDTH; languageDropdown.Y = 10; foreach (var lang in Localizer.Instance.Locales) { var item = languageDropdown.AddItem(Localizer.Instance.GetValueForName(lang.Key.ToString()), lang.Key.ToString()); item.AutoSizeToContents = false; item.Width = CONTROL_WIDTH; } languageDropdown.SelectByText(Localizer.Instance.GetValueForName(Localizer.Instance.CurrentLocale.ToString())); languageDropdown.ItemSelected += handleSelect; gammaSlider = new HorizontalSlider (window); gammaSlider.SnapToNotches = false; gammaSlider.Min = 0; gammaSlider.Max = 3; gammaSlider.Value = gamma; gammaSlider.ValueChanged += (sender, arguments) => { var slider = sender as HorizontalSlider; ConfigManager.Instance["freezing_archer"].SetDouble("general", "gamma", slider.Value); if (slider != null) this.colorCorrectionNode.Gamma = slider.Value; }; gammaSlider.Width = CONTROL_WIDTH; gammaSlider.Height = 20; gammaSlider.Y = 10 + languageDropdown.Y + languageDropdown.Height; gammaLabel = new Label (window); gammaLabel.AutoSizeToContents = true; gammaLabel.Y = 10 + languageLabel.Y + languageLabel.Height; gammaLabel.Text = Localizer.Instance.GetValueForName("gamma"); int max_width = languageLabel.Width > gammaLabel.Width ? languageLabel.Width : gammaLabel.Width; languageLabel.X = 10 + max_width - languageLabel.Width; gammaLabel.X = 10 + max_width - gammaLabel.Width; languageDropdown.X = 10 + max_width + 5; gammaSlider.X = 10 + max_width + 5; window.Width = 40 + max_width + CONTROL_WIDTH; resetButton = new Button (window); resetButton.Text = Localizer.Instance.GetValueForName("reset"); resetButton.Width = (window.Width / 2) - 20; resetButton.X = 10; resetButton.Y = gammaSlider.Y + gammaSlider.Height + 10; resetButton.Clicked += (sender, arguments) => { var general = ConfigManager.DefaultConfig.B.FirstOrDefault (a => a.Key == "general"); var gamma_pair = general.Value.FirstOrDefault(a => a.Key == "gamma"); float _gamma = (float) gamma_pair.Value.Double; gammaSlider.Value = _gamma; colorCorrectionNode.Gamma = _gamma; var language_pair = general.Value.FirstOrDefault(a => a.Key == "language"); string lang = language_pair.Value.String; Localizer.Instance.CurrentLocale = (LocaleEnum) Enum.Parse(typeof (LocaleEnum), lang); }; saveButton = new Button (window); saveButton.Text = Localizer.Instance.GetValueForName("save"); saveButton.Width = (window.Width / 2) - 20; saveButton.X = resetButton.X + resetButton.Width + 10; saveButton.Y = gammaSlider.Y + gammaSlider.Height + 10; saveButton.Clicked += (sender, arguments) => ConfigManager.Instance.SaveAll(); window.Height += languageDropdown.Height + gammaSlider.Height + 50; window.X = (parent.Width - window.Width) / 2; window.Y = (parent.Height - window.Height) / 2; ValidMessages = new[] { (int) MessageId.UpdateLocale }; application.MessageManager += this; }