private void SetupZoom() { _zoomoptions = new ControlBase(null) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Fill }; _zoomtarget = new Spinner(null) { Min = Constants.MinimumZoom, Max = Constants.MaxZoom, Value = _editor.Zoom, }; _zoomtarget.ValueChanged += (o, e) => { if (_selecting_trigger) { return; } using (var trk = _editor.CreateTrackWriter()) { var trigger = BeginModifyTrigger(trk); if (trigger != null) { trigger.ZoomTarget = (float)_zoomtarget.Value; EndModifyTrigger(trigger, trk); } } }; GwenHelper.CreateLabeledControl( _zoomoptions, "Zoom Target:", _zoomtarget).Dock = Dock.Bottom; }
private void PopulateConfigToggle(ControlBase parent) { var configt = GwenHelper.CreateHeaderPanel(parent, "Configuration"); GwenHelper.AddCheckbox(configt, "Contact Points", Settings.ConfigTContactPoints, (o, e) => { Settings.ConfigTContactPoints = ((Checkbox)o).IsChecked; Settings.Save(); }); GwenHelper.AddCheckbox(configt, "Gravity Wells", Settings.ConfigTGravityWells, (o, e) => { Settings.ConfigTGravityWells = ((Checkbox)o).IsChecked; Settings.Save(); }); GwenHelper.AddCheckbox(configt, "Hit Test", Settings.ConfigTHitTest, (o, e) => { Settings.ConfigTHitTest = ((Checkbox)o).IsChecked; Settings.Save(); }); GwenHelper.AddCheckbox(configt, "Momentum Vectors", Settings.ConfigTMomentumVectors, (o, e) => { Settings.ConfigTMomentumVectors = ((Checkbox)o).IsChecked; Settings.Save(); }); GwenHelper.AddCheckbox(configt, "Onion Skinning", Settings.ConfigTOnionSkinning, (o, e) => { Settings.ConfigTOnionSkinning = ((Checkbox)o).IsChecked; Settings.Save(); }); }
private void PopulateCamera(ControlBase parent) { var camtype = GwenHelper.CreateHeaderPanel(parent, "Camera Type"); var camprops = GwenHelper.CreateHeaderPanel(parent, "Camera Properties"); RadioButtonGroup rbcamera = new RadioButtonGroup(camtype) { Dock = Dock.Top, ShouldDrawBackground = false, }; var soft = rbcamera.AddOption("Soft Camera"); var predictive = rbcamera.AddOption("Predictive Camera"); var legacy = rbcamera.AddOption("Legacy Camera"); var round = GwenHelper.AddCheckbox(camprops, "Round Legacy Camera", Settings.RoundLegacyCamera, (o, e) => { Settings.RoundLegacyCamera = ((Checkbox)o).IsChecked; Settings.Save(); }); if (Settings.SmoothCamera) { if (Settings.PredictiveCamera) { predictive.Select(); } else { soft.Select(); } } else { legacy.Select(); } soft.Checked += (o, e) => { Settings.SmoothCamera = true; Settings.PredictiveCamera = false; Settings.Save(); round.IsDisabled = Settings.SmoothCamera; _editor.InitCamera(); }; predictive.Checked += (o, e) => { Settings.SmoothCamera = true; Settings.PredictiveCamera = true; Settings.Save(); round.IsDisabled = Settings.SmoothCamera; _editor.InitCamera(); }; legacy.Checked += (o, e) => { Settings.SmoothCamera = false; Settings.PredictiveCamera = false; Settings.Save(); round.IsDisabled = Settings.SmoothCamera; _editor.InitCamera(); }; predictive.Tooltip = "This is the camera that was added in 1.03\nIt moves relative to the future of the track"; }
private void SetupRedOptions(PropertyTree tree) { if (_ownerline is RedLine red) { var table = tree.Add("Acceleration", 120); var multiplier = new NumberProperty(table) { Min = 1, Max = 255, NumberValue = red.Multiplier, OnlyWholeNumbers = true, }; multiplier.ValueChanged += (o, e) => { ChangeMultiplier((int)multiplier.NumberValue); }; table.Add("Multiplier", multiplier); var multilines = new NumberProperty(table) { Min = 1, Max = 9999, OnlyWholeNumbers = true, }; multilines.NumberValue = GetMultiLines(true).Count; multilines.ValueChanged += (o, e) => { Multiline((int)multilines.NumberValue); }; table.Add("Multilines", multilines); var accelinverse = GwenHelper.AddPropertyCheckbox( table, "Inverse", red.inv ); accelinverse.ValueChanged += (o, e) => { using (var trk = _editor.CreateTrackWriter()) { var multi = GetMultiLines(false); foreach (var l in multi) { var cpy = (StandardLine)l.Clone(); cpy.Position = l.Position2; cpy.Position2 = l.Position; cpy.inv = accelinverse.IsChecked; UpdateLine(trk, l, cpy); } var owner = (StandardLine)_ownerline.Clone(); owner.Position = _ownerline.Position2; owner.Position2 = _ownerline.Position; owner.inv = accelinverse.IsChecked; UpdateOwnerLine(trk, owner); } }; } }
private void Setup() { Dictionary <string, bool> trackfeatures; using (var trk = _editor.CreateTrackReader()) { trackfeatures = trk.GetFeatures(); } TabControl tabs = new TabControl(this) { Dock = Dock.Fill }; var settings = tabs.AddPage("Settings"); var song = tabs.AddPage("Song"); _tree = new PropertyTree(settings) { Dock = Dock.Fill, }; var table = _tree.Add("Settings", 150); NumberProperty startzoom = new NumberProperty(null) { Min = 1, NumberValue = _editor.StartZoom, Max = Constants.MaxZoom, }; startzoom.ValueChanged += (o, e) => { _editor.StartZoom = (float)startzoom.NumberValue; }; table.Add("Start Zoom", startzoom); var zerostart = GwenHelper.AddPropertyCheckbox(table, "Zero Start", _editor.ZeroStart); zerostart.ValueChanged += (o, e) => { _editor.ZeroStart = zerostart.IsChecked; }; table = _tree.Add("Info", 150); // var trackname = table.AddLabel("Track Name", _editor.Name); var physics = table.AddLabel("Physics", CheckFeature(trackfeatures, TrackFeatures.six_one) ? "6.1" : "6.2"); table.AddLabel("Blue Lines", _editor.BlueLines.ToString()); table.AddLabel("Red Lines", _editor.RedLines.ToString()); table.AddLabel("Scenery Lines", _editor.GreenLines.ToString()); table = _tree.Add("Features Used", 150); AddFeature(table, trackfeatures, "Red Multiplier", TrackFeatures.redmultiplier); AddFeature(table, trackfeatures, "Scenery Width", TrackFeatures.scenerywidth); AddFeature(table, trackfeatures, "Line Triggers", TrackFeatures.ignorable_trigger); PopulateSong(song); _tree.ExpandAll(); // table.Add }
private void SetupCameraOffset() { _cameraoffsetoptions = new ControlBase(null) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Fill }; _camerapixeloffsetx = new Spinner(null) { Min = int.MinValue, Max = int.MaxValue, Value = 0, }; _camerapixeloffsety = new Spinner(null) { Min = int.MinValue, Max = int.MaxValue, Value = 0, }; _camerapixeloffsetx.ValueChanged += (o, e) => { if (_selecting_trigger) { return; } using (var trk = _editor.CreateTrackWriter()) { var trigger = BeginModifyTrigger(trk); if (trigger != null) { trigger.XOffsetInPixels = (float)_camerapixeloffsetx.Value; trigger.YOffsetInPixels = (float)_camerapixeloffsety.Value; EndModifyTrigger(trigger, trk); } } }; _camerapixeloffsety.ValueChanged += (o, e) => { if (_selecting_trigger) { return; } using (var trk = _editor.CreateTrackWriter()) { var trigger = BeginModifyTrigger(trk); if (trigger != null) { trigger.XOffsetInPixels = (float)_camerapixeloffsetx.Value; trigger.YOffsetInPixels = (float)_camerapixeloffsety.Value; EndModifyTrigger(trigger, trk); } } }; GwenHelper.CreateLabeledControl(_cameraoffsetoptions, "Y Offset in Pixels:", _camerapixeloffsety).Dock = Dock.Bottom; GwenHelper.CreateLabeledControl(_cameraoffsetoptions, "X Offset in Pixels:", _camerapixeloffsetx).Dock = Dock.Bottom; }
private void PopulateOther(ControlBase parent) { var updates = GwenHelper.CreateHeaderPanel(parent, "Updates"); var showid = GwenHelper.AddCheckbox(updates, "Check For Updates", Settings.CheckForUpdates, (o, e) => { Settings.CheckForUpdates = ((Checkbox)o).IsChecked; Settings.Save(); }); }
private void PopulateEditor(ControlBase parent) { Panel advancedtools = GwenHelper.CreateHeaderPanel(parent, "Advanced Visualization"); var contact = GwenHelper.AddCheckbox(advancedtools, "Contact Points", Settings.Editor.DrawContactPoints, (o, e) => { Settings.Editor.DrawContactPoints = ((Checkbox)o).IsChecked; Settings.Save(); }); var momentum = GwenHelper.AddCheckbox(advancedtools, "Momentum Vectors", Settings.Editor.MomentumVectors, (o, e) => { Settings.Editor.MomentumVectors = ((Checkbox)o).IsChecked; Settings.Save(); }); var hitbox = GwenHelper.AddCheckbox(advancedtools, "Line Hitbox", Settings.Editor.RenderGravityWells, (o, e) => { Settings.Editor.RenderGravityWells = ((Checkbox)o).IsChecked; Settings.Save(); }); var hittest = GwenHelper.AddCheckbox(advancedtools, "Hit Test", Settings.Editor.HitTest, (o, e) => { Settings.Editor.HitTest = ((Checkbox)o).IsChecked; Settings.Save(); }); var onion = GwenHelper.AddCheckbox(advancedtools, "Onion Skinning", Settings.OnionSkinning, (o, e) => { Settings.OnionSkinning = ((Checkbox)o).IsChecked; Settings.Save(); }); Panel pblifelock = GwenHelper.CreateHeaderPanel(parent, "Lifelock Conditions"); GwenHelper.AddCheckbox(pblifelock, "Next frame constraints", Settings.Editor.LifeLockNoOrange, (o, e) => { Settings.Editor.LifeLockNoOrange = ((Checkbox)o).IsChecked; Settings.Save(); }); GwenHelper.AddCheckbox(pblifelock, "No Fakie Death", Settings.Editor.LifeLockNoFakie, (o, e) => { Settings.Editor.LifeLockNoFakie = ((Checkbox)o).IsChecked; Settings.Save(); }); var overlay = GwenHelper.CreateHeaderPanel(parent, "Frame Overlay"); PopulateOverlay(overlay); onion.Tooltip = "Visualize the rider before/after\nthe current frame."; momentum.Tooltip = "Visualize the direction of\nmomentum for each contact point"; contact.Tooltip = "Visualize the parts of the rider\nthat interact with lines."; hitbox.Tooltip = "Visualizes the hitbox of lines\nUsed for advanced editing"; hittest.Tooltip = "Lines that have been hit by\nthe rider will glow."; }
private void PopulateRBLSettings(ControlBase parent) { var rblHeader = GwenHelper.CreateHeaderPanel(parent, "RatherBeLunar's Magic Animator Settings"); // GwenHelper.AddCheckbox(rblHeader, "Reference frame based animation", Settings.velocityReferenceFrameAnimation, (o, e) => // { // Settings.velocityReferenceFrameAnimation = ((Checkbox)o).IsChecked; // Settings.Save(); // }); GwenHelper.AddCheckbox(rblHeader, "Convert lines sent to previous frames to scenery", Settings.recededLinesAsScenery, (o, e) => { Settings.recededLinesAsScenery = ((Checkbox)o).IsChecked; Settings.Save(); }); GwenHelper.AddCheckbox(rblHeader, "Convert lines sent to forward frames to scenery", Settings.forwardLinesAsScenery, (o, e) => { Settings.forwardLinesAsScenery = ((Checkbox)o).IsChecked; Settings.Save(); }); Spinner animationVelXSpinner = new Spinner(rblHeader) { Dock = Dock.Bottom, Max = 1000, Min = -1000, Value = Settings.animationRelativeVelX }; Spinner animationVelYSpinner = new Spinner(rblHeader) { Dock = Dock.Bottom, Max = 1000, Min = -1000, Value = Settings.animationRelativeVelY }; animationVelXSpinner.ValueChanged += (o, e) => { Settings.animationRelativeVelX = (float)((Spinner)o).Value; Settings.Save(); }; animationVelYSpinner.ValueChanged += (o, e) => { Settings.animationRelativeVelY = (float)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(rblHeader, "Relative Animation X Velocity", animationVelXSpinner); GwenHelper.CreateLabeledControl(rblHeader, "Relative Animation Y Velocity", animationVelYSpinner); }
private void AddFeature( PropertyTable table, Dictionary <string, bool> features, string name, string feature) { var featureval = CheckFeature(features, feature); var check = GwenHelper.AddPropertyCheckbox( table, name, featureval); check.Disable(); }
private void PopulateModes(ControlBase parent) { var background = GwenHelper.CreateHeaderPanel(parent, "Background Color"); GwenHelper.AddCheckbox(background, "Night Mode", Settings.NightMode, (o, e) => { Settings.NightMode = ((Checkbox)o).IsChecked; Settings.Save(); }); var whitebg = GwenHelper.AddCheckbox(background, "Pure White Background", Settings.WhiteBG, (o, e) => { Settings.WhiteBG = ((Checkbox)o).IsChecked; Settings.Save(); }); var panelgeneral = GwenHelper.CreateHeaderPanel(parent, "General"); var superzoom = GwenHelper.AddCheckbox(panelgeneral, "Superzoom", Settings.SuperZoom, (o, e) => { Settings.SuperZoom = ((Checkbox)o).IsChecked; Settings.Save(); }); ComboBox scroll = GwenHelper.CreateLabeledCombobox(panelgeneral, "Scroll Sensitivity:"); scroll.Margin = new Margin(0, 0, 0, 0); scroll.Dock = Dock.Bottom; scroll.AddItem("0.25x").Name = "0.25"; scroll.AddItem("0.5x").Name = "0.5"; scroll.AddItem("0.75x").Name = "0.75"; scroll.AddItem("1x").Name = "1"; scroll.AddItem("2x").Name = "2"; scroll.AddItem("3x").Name = "3"; scroll.SelectByName("1");//default if user setting fails. scroll.SelectByName(Settings.ScrollSensitivity.ToString(Program.Culture)); scroll.ItemSelected += (o, e) => { if (e.SelectedItem != null) { Settings.ScrollSensitivity = float.Parse(e.SelectedItem.Name, Program.Culture); Settings.Save(); } }; superzoom.Tooltip = "Allows the user to zoom in\nnearly 10x more than usual."; var invisibleRider = GwenHelper.AddCheckbox(panelgeneral, "Invisible Rider", Settings.InvisibleRider, (o, e) => { Settings.InvisibleRider = ((Checkbox)o).IsChecked; Settings.Save(); }); }
private void PopulateOverlay(ControlBase parent) { var offset = new Spinner(null) { Min = -999, Max = 999, Value = Settings.Local.TrackOverlayOffset, }; offset.ValueChanged += (o, e) => { Settings.Local.TrackOverlayOffset = (int)offset.Value; }; var fixedspinner = new Spinner(null) { Min = 0, Max = _editor.FrameCount, Value = Settings.Local.TrackOverlayFixedFrame, }; fixedspinner.ValueChanged += (o, e) => { Settings.Local.TrackOverlayFixedFrame = (int)fixedspinner.Value; }; void updatedisabled() { offset.IsDisabled = Settings.Local.TrackOverlayFixed; fixedspinner.IsDisabled = !Settings.Local.TrackOverlayFixed; } var enabled = GwenHelper.AddCheckbox(parent, "Enabled", Settings.Local.TrackOverlay, (o, e) => { Settings.Local.TrackOverlay = ((Checkbox)o).IsChecked; updatedisabled(); }); GwenHelper.AddCheckbox(parent, "Fixed Frame", Settings.Local.TrackOverlayFixed, (o, e) => { Settings.Local.TrackOverlayFixed = ((Checkbox)o).IsChecked; updatedisabled(); }); GwenHelper.CreateLabeledControl(parent, "Frame Offset", offset); GwenHelper.CreateLabeledControl(parent, "Frame ID", fixedspinner); updatedisabled(); enabled.Tooltip = "Display an onion skin of the track\nat a specified offset for animation"; }
// End of Individual line options private void PopulateLines2(ControlBase parent) { var lineoptions2 = GwenHelper.CreateHeaderPanel(parent, "XY Lock options"); var xylock = new Spinner(null) { Max = 180, Min = 1, Value = Settings.XY, }; xylock.ValueChanged += (o, e) => { Settings.XY = (float)xylock.Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(lineoptions2, "XY Degrees", xylock); }
private void PopulateOther(ControlBase parent) { var updates = GwenHelper.CreateHeaderPanel(parent, "Updates"); var showid = GwenHelper.AddCheckbox(updates, "Check For Updates", Settings.CheckForUpdates, (o, e) => { Settings.CheckForUpdates = ((Checkbox)o).IsChecked; Settings.Save(); }); var accel = GwenHelper.CreateHeaderPanel(parent, ("Time Elapsed: " + Settings.MinutesElapsed + " minutes")); var secret = GwenHelper.CreateHeaderPanel(parent, "Secrets"); secret.Padding = new Padding(secret.Padding.Left, 600, 0, 0); var showida = GwenHelper.AddCheckbox(secret, "Confetti Lines", Settings.ConfettiLines, (o, e) => { Settings.ConfettiLines = ((Checkbox)o).IsChecked; Settings.Save(); _editor.LineColorsChanged(); }); }
private void PopulateTools(ControlBase parent) { var select = GwenHelper.CreateHeaderPanel(parent, "Select Tool -- Line Info"); var length = GwenHelper.AddCheckbox(select, "Show Length", Settings.Editor.ShowLineLength, (o, e) => { Settings.Editor.ShowLineLength = ((Checkbox)o).IsChecked; Settings.Save(); }); var angle = GwenHelper.AddCheckbox(select, "Show Angle", Settings.Editor.ShowLineAngle, (o, e) => { Settings.Editor.ShowLineAngle = ((Checkbox)o).IsChecked; Settings.Save(); }); var showid = GwenHelper.AddCheckbox(select, "Show ID", Settings.Editor.ShowLineID, (o, e) => { Settings.Editor.ShowLineID = ((Checkbox)o).IsChecked; Settings.Save(); }); Panel panelSnap = GwenHelper.CreateHeaderPanel(parent, "Snapping"); var linesnap = GwenHelper.AddCheckbox(panelSnap, "Snap New Lines", Settings.Editor.SnapNewLines, (o, e) => { Settings.Editor.SnapNewLines = ((Checkbox)o).IsChecked; Settings.Save(); }); var movelinesnap = GwenHelper.AddCheckbox(panelSnap, "Snap Line Movement", Settings.Editor.SnapMoveLine, (o, e) => { Settings.Editor.SnapMoveLine = ((Checkbox)o).IsChecked; Settings.Save(); }); var forcesnap = GwenHelper.AddCheckbox(panelSnap, "Force X/Y snap", Settings.Editor.ForceXySnap, (o, e) => { Settings.Editor.ForceXySnap = ((Checkbox)o).IsChecked; Settings.Save(); }); forcesnap.Tooltip = "Forces all lines drawn to\nsnap to a 45 degree angle"; movelinesnap.Tooltip = "Snap to lines when using the\nselect tool to move a single line"; }
private void PopulateAudio(ControlBase parent) { var opts = GwenHelper.CreateHeaderPanel(parent, "Sync options"); var syncenabled = GwenHelper.AddCheckbox(opts, "Mute", Settings.MuteAudio, (o, e) => { Settings.MuteAudio = ((Checkbox)o).IsChecked; Settings.Save(); }); HorizontalSlider vol = new HorizontalSlider(null) { Min = 0, Max = 100, Value = Settings.Volume, Width = 80, }; vol.ValueChanged += (o, e) => { Settings.Volume = (float)vol.Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(opts, "Volume", vol); vol.Width = 200; }
private void PopulateDiscordSettings(ControlBase parent) { var discordHeader = GwenHelper.CreateHeaderPanel(parent, "Discord Activity Settings"); var showid = GwenHelper.AddCheckbox(discordHeader, "Enable Discord Activity (Needs Restart to Disable)", Settings.discordActivityEnabled, (o, e) => { Settings.discordActivityEnabled = ((Checkbox)o).IsChecked; Settings.Save(); }); ComboBox activity1 = GwenHelper.CreateLabeledCombobox(discordHeader, "Line 1 Text 1:"); ComboBox activity2 = GwenHelper.CreateLabeledCombobox(discordHeader, "Line 1 Text 2:"); ComboBox activity3 = GwenHelper.CreateLabeledCombobox(discordHeader, "Line 2 Text 1:"); ComboBox activity4 = GwenHelper.CreateLabeledCombobox(discordHeader, "Line 2 Text 2:"); ComboBox[] boxArr = { activity1, activity2, activity3, activity4 }; for (int i = 0; i < 4; i++) { boxArr[i].AddItem("None", "none", "none"); boxArr[i].AddItem("Selected Tool", "toolText", "toolText"); boxArr[i].AddItem("Number of Unsaved Changes", "unsavedChangesText", "unsavedChangesText"); boxArr[i].AddItem("Track Name", "trackText", "trackText"); boxArr[i].AddItem("Amount of Lines", "lineText", "lineText"); boxArr[i].AddItem("Version", "versionText", "versionText"); } activity1.SelectByUserData(Settings.discordActivity1); activity2.SelectByUserData(Settings.discordActivity2); activity3.SelectByUserData(Settings.discordActivity3); activity4.SelectByUserData(Settings.discordActivity4); activity1.ItemSelected += (o, e) => { Settings.discordActivity1 = (String)e.SelectedItem.UserData;; Settings.Save(); }; activity2.ItemSelected += (o, e) => { Settings.discordActivity2 = (String)e.SelectedItem.UserData;; Settings.Save(); }; activity3.ItemSelected += (o, e) => { Settings.discordActivity3 = (String)e.SelectedItem.UserData;; Settings.Save(); }; activity4.ItemSelected += (o, e) => { Settings.discordActivity4 = (String)e.SelectedItem.UserData;; Settings.Save(); }; ComboBox largeImageKey = GwenHelper.CreateLabeledCombobox(discordHeader, "Image:"); largeImageKey.AddItem("LRTran App Icon", "lrl", "lrl"); largeImageKey.AddItem(":boshbless:", "bosh_pray", "bosh_pray"); largeImageKey.SelectByUserData(Settings.largeImageKey); largeImageKey.ItemSelected += (o, e) => { Settings.largeImageKey = (String)e.SelectedItem.UserData;; Settings.Save(); }; }
private void PopulateRiderSettings(ControlBase parent) { var scarfSettingPanel = GwenHelper.CreateHeaderPanel(parent, "Scarf Settings"); var riderSettingPanel = GwenHelper.CreateHeaderPanel(parent, "Rider Settings"); ComboBox scarfCombobox = GwenHelper.CreateLabeledCombobox(scarfSettingPanel, "Selected Scarf:"); scarfCombobox.AddItem("Default", "*default*", "*default*"); string[] scarfPaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\LRA\\Scarves"); for (int i = 0; i < scarfPaths.Length; i++) { string scarfNames = Path.GetFileName(scarfPaths[i]); scarfCombobox.AddItem(scarfNames, scarfNames, scarfNames); } scarfCombobox.ItemSelected += (o, e) => { Settings.SelectedScarf = (String)e.SelectedItem.UserData; Debug.WriteLine("Selected Scarf: \"" + Settings.SelectedScarf + "\""); Settings.Save(); }; var scarfSegments = new Spinner(parent) { Min = 1, Max = int.MaxValue - 1, Value = Settings.ScarfSegments, }; scarfSegments.ValueChanged += (o, e) => { Settings.ScarfSegments = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(scarfSettingPanel, "Scarf Segments (Needs Restart)", scarfSegments); var multiScarfAmount = new Spinner(parent) { Min = 1, Max = int.MaxValue - 1, Value = Settings.multiScarfAmount, }; multiScarfAmount.ValueChanged += (o, e) => { Settings.multiScarfAmount = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(scarfSettingPanel, "Multi-Scarf Amount (Needs Restart)", multiScarfAmount); var multiScarfSegments = new Spinner(parent) { Min = 1, Max = int.MaxValue - 1, Value = Settings.multiScarfSegments, }; multiScarfSegments.ValueChanged += (o, e) => { Settings.multiScarfSegments = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(scarfSettingPanel, "Multi-Scarf Segments (Needs Restart)", multiScarfSegments); var showid = GwenHelper.AddCheckbox(scarfSettingPanel, "Apply Custom Scarf to Rider png", Settings.customScarfOnPng, (o, e) => { Settings.customScarfOnPng = ((Checkbox)o).IsChecked; Settings.Save(); }); ComboBox boshSkinCombobox = GwenHelper.CreateLabeledCombobox(riderSettingPanel, "Selected Rider:"); boshSkinCombobox.AddItem("Default", "*default*", "*default*"); string[] riderPaths = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/LRA/Riders"); for (int i = 0; i < riderPaths.Length; i++) { String riderNames = Path.GetFileName(riderPaths[i]); boshSkinCombobox.AddItem(riderNames, riderNames, riderNames); } boshSkinCombobox.ItemSelected += (o, e) => { Settings.SelectedBoshSkin = (String)e.SelectedItem.UserData;; Debug.WriteLine("Selected rider Skin: \"" + Settings.SelectedBoshSkin + "\""); Settings.Save(); }; scarfCombobox.SelectByUserData(Settings.SelectedScarf); boshSkinCombobox.SelectByUserData(Settings.SelectedBoshSkin); }
private void PopulateOther(ControlBase parent) { var updates = GwenHelper.CreateHeaderPanel(parent, "Updates"); var showid = GwenHelper.AddCheckbox(updates, "Check For Updates", Settings.CheckForUpdates, (o, e) => { Settings.CheckForUpdates = ((Checkbox)o).IsChecked; Settings.Save(); }); var showChangelog = GwenHelper.AddCheckbox(updates, "Show LRTran Changelog", Settings.showChangelog, (o, e) => { Settings.showChangelog = ((Checkbox)o).IsChecked; Settings.Save(); }); var mainWindowSettings = GwenHelper.CreateHeaderPanel(parent, "Window Launch Size"); var mainWindowWidth = new Spinner(mainWindowSettings) { Min = 1, Max = int.MaxValue - 1, Value = Settings.mainWindowWidth, }; mainWindowWidth.ValueChanged += (o, e) => { Settings.mainWindowWidth = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(mainWindowSettings, "Main Window Width (Current: " + (Program.GetWindowWidth()) + ")", mainWindowWidth); var mainWindowHeight = new Spinner(mainWindowSettings) { Min = 1, Max = int.MaxValue - 1, Value = Settings.mainWindowHeight, }; mainWindowHeight.ValueChanged += (o, e) => { Settings.mainWindowHeight = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(mainWindowSettings, "Main Window Height (Current: " + (Program.GetWindowHeight()) + ")", mainWindowHeight); var saveSettings = GwenHelper.CreateHeaderPanel(parent, "Saves"); var autosaveMinutes = new Spinner(saveSettings) { Min = 1, Max = int.MaxValue - 1, Value = Settings.autosaveMinutes, }; autosaveMinutes.ValueChanged += (o, e) => { Settings.autosaveMinutes = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(saveSettings, "Minutes between autosaves", autosaveMinutes); var autosaveChanges = new Spinner(saveSettings) { Min = 1, Max = int.MaxValue - 1, Value = Settings.autosaveChanges, }; autosaveChanges.ValueChanged += (o, e) => { Settings.autosaveChanges = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(saveSettings, "Min changes to start autosaving", autosaveChanges); ComboBox defaultSaveType = GwenHelper.CreateLabeledCombobox(saveSettings, "Default Save As Format:"); defaultSaveType.AddItem(".trk", "", ".trk"); defaultSaveType.AddItem(".json", "", ".json"); defaultSaveType.AddItem(".sol", "", ".sol"); defaultSaveType.ItemSelected += (o, e) => { Settings.DefaultSaveFormat = (String)e.SelectedItem.UserData; Settings.Save(); }; ComboBox defaultQuicksaveType = GwenHelper.CreateLabeledCombobox(saveSettings, "Default Quicksave Format:"); defaultQuicksaveType.AddItem(".trk", "", ".trk"); defaultQuicksaveType.AddItem(".json", "", ".json"); defaultQuicksaveType.AddItem(".sol", "", ".sol"); defaultQuicksaveType.ItemSelected += (o, e) => { Settings.DefaultQuicksaveFormat = (String)e.SelectedItem.UserData; Settings.Save(); }; ComboBox defaultAutosaveType = GwenHelper.CreateLabeledCombobox(saveSettings, "Default Autosave Format:"); defaultAutosaveType.AddItem(".trk", "", ".trk"); defaultAutosaveType.AddItem(".json", "", ".json"); defaultAutosaveType.AddItem(".sol", "", ".sol"); defaultAutosaveType.SelectByUserData(Settings.DefaultAutosaveFormat); defaultAutosaveType.ItemSelected += (o, e) => { Settings.DefaultAutosaveFormat = (String)e.SelectedItem.UserData; Settings.Save(); }; ComboBox defaultCrashBackupType = GwenHelper.CreateLabeledCombobox(saveSettings, "Default Crash Backup Format:"); defaultCrashBackupType.AddItem(".trk", "", ".trk"); defaultCrashBackupType.AddItem(".json", "", ".json"); defaultCrashBackupType.AddItem(".sol", "", ".sol"); defaultCrashBackupType.SelectByUserData(Settings.DefaultCrashBackupFormat); defaultCrashBackupType.ItemSelected += (o, e) => { Settings.DefaultCrashBackupFormat = (String)e.SelectedItem.UserData; Settings.Save(); }; defaultSaveType.SelectByUserData(Settings.DefaultSaveFormat); defaultQuicksaveType.SelectByUserData(Settings.DefaultQuicksaveFormat); defaultAutosaveType.SelectByUserData(Settings.DefaultAutosaveFormat); defaultAutosaveType.SelectByUserData(Settings.DefaultCrashBackupFormat); }
private void PopulatePlayback(ControlBase parent) { var playbackzoom = GwenHelper.CreateHeaderPanel(parent, "Playback Zoom"); RadioButtonGroup pbzoom = new RadioButtonGroup(playbackzoom) { Dock = Dock.Left, ShouldDrawBackground = false, }; pbzoom.AddOption("Default Zoom"); pbzoom.AddOption("Current Zoom"); pbzoom.AddOption("Specific Zoom"); Spinner playbackspinner = new Spinner(pbzoom) { Dock = Dock.Bottom, Max = 24, Min = 1, }; pbzoom.SelectionChanged += (o, e) => { Settings.PlaybackZoomType = ((RadioButtonGroup)o).SelectedIndex; Settings.Save(); playbackspinner.IsHidden = (((RadioButtonGroup)o).SelectedLabel != "Specific Zoom"); }; playbackspinner.ValueChanged += (o, e) => { Settings.PlaybackZoomValue = (float)((Spinner)o).Value; Settings.Save(); }; pbzoom.SetSelection(Settings.PlaybackZoomType); playbackspinner.Value = Settings.PlaybackZoomValue; var playbackmode = GwenHelper.CreateHeaderPanel(parent, "Playback Color"); GwenHelper.AddCheckbox(playbackmode, "Color Playback", Settings.ColorPlayback, (o, e) => { Settings.ColorPlayback = ((Checkbox)o).IsChecked; Settings.Save(); }); var preview = GwenHelper.AddCheckbox(playbackmode, "Preview Mode", Settings.PreviewMode, (o, e) => { Settings.PreviewMode = ((Checkbox)o).IsChecked; Settings.Save(); }); var recording = GwenHelper.AddCheckbox(playbackmode, "Recording Mode", Settings.Local.RecordingMode, (o, e) => { Settings.Local.RecordingMode = ((Checkbox)o).IsChecked; }); var framerate = GwenHelper.CreateHeaderPanel(parent, "Frame Control"); var smooth = GwenHelper.AddCheckbox(framerate, "Smooth Playback", Settings.SmoothPlayback, (o, e) => { Settings.SmoothPlayback = ((Checkbox)o).IsChecked; Settings.Save(); }); ComboBox pbrate = GwenHelper.CreateLabeledCombobox(framerate, "Playback Rate:"); for (var i = 0; i < Constants.MotionArray.Length; i++) { var f = (Constants.MotionArray[i] / (float)Constants.PhysicsRate); pbrate.AddItem(f + "x", f.ToString(CultureInfo.InvariantCulture), f); } pbrate.SelectByName(Settings.DefaultPlayback.ToString(CultureInfo.InvariantCulture)); pbrate.ItemSelected += (o, e) => { Settings.DefaultPlayback = (float)e.SelectedItem.UserData; Settings.Save(); }; var cbslowmo = GwenHelper.CreateLabeledCombobox(framerate, "Slowmo FPS:"); var fpsarray = new[] { 1, 2, 5, 10, 20 }; for (var i = 0; i < fpsarray.Length; i++) { cbslowmo.AddItem(fpsarray[i].ToString(), fpsarray[i].ToString(CultureInfo.InvariantCulture), fpsarray[i]); } cbslowmo.SelectByName(Settings.SlowmoSpeed.ToString(CultureInfo.InvariantCulture)); cbslowmo.ItemSelected += (o, e) => { Settings.SlowmoSpeed = (int)e.SelectedItem.UserData; Settings.Save(); }; smooth.Tooltip = "Interpolates frames from the base\nphysics rate of 40 frames/second\nup to 60 frames/second"; }
private void Setup() { ControlBase top = new ControlBase(this) { Dock = Dock.Top, AutoSizeToContents = true, }; ControlBase panel = new ControlBase(this) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Fill, AutoSizeToContents = true }; ControlBase bottom = new ControlBase(this) { Dock = Dock.Bottom, AutoSizeToContents = true, }; GeneratorOptions = new Panel(panel) { Dock = Dock.Fill }; Button generate = new Button(bottom) { Dock = Dock.Left, Margin = new Margin(0, 2, 0, 0), Text = "Generate" }; generate.Clicked += (o, e) => { Render_Final(); GeneratePressed = true; Close(); }; PopulateCircle(); Populate10pc(); GeneratorTypeBox = GwenHelper.CreateLabeledCombobox(top, "Generator Type:"); GeneratorTypeBox.Dock = Dock.Top; var tenpc = GeneratorTypeBox.AddItem("10-Point Cannon", "", GeneratorType.TenPC); tenpc.CheckChanged += (o, e) => { GeneratorOptions.Children.Clear(); TenPCOptions.Parent = GeneratorOptions; CurrentGenerator = GeneratorType.TenPC; }; var circle = GeneratorTypeBox.AddItem("Circle", "", GeneratorType.Circle); circle.CheckChanged += (o, e) => { GeneratorOptions.Children.Clear(); CircleGenOptions.Parent = GeneratorOptions; CurrentGenerator = GeneratorType.Circle; }; GeneratorOptions.Children.Clear(); switch (CurrentGenerator) { default: GeneratorTypeBox.SelectedItem = circle; CircleGenOptions.Parent = GeneratorOptions; break; case GeneratorType.Circle: GeneratorTypeBox.SelectedItem = circle; CircleGenOptions.Parent = GeneratorOptions; break; case GeneratorType.TenPC: GeneratorTypeBox.SelectedItem = tenpc; TenPCOptions.Parent = GeneratorOptions; break; } Render_Preview(); }
private void SetupTriggers(PropertyTree tree) { if (_ownerline is StandardLine physline) { var table = tree.Add("Triggers", 120); var currenttrigger = physline.Trigger; var triggerenabled = GwenHelper.AddPropertyCheckbox( table, "Enabled", currenttrigger != null); var zoom = new NumberProperty(table) { Min = Constants.MinimumZoom, Max = Constants.MaxZoom, NumberValue = 4 }; table.Add("Target Zoom", zoom); var frames = new NumberProperty(table) { Min = 0, Max = 40 * 60 * 2,//2 minutes is enough for a zoom trigger, you crazy nuts. NumberValue = 40, OnlyWholeNumbers = true, }; if (currenttrigger != null) { zoom.NumberValue = currenttrigger.ZoomTarget; frames.NumberValue = currenttrigger.ZoomFrames; } table.Add("Frames", frames); zoom.ValueChanged += (o, e) => { using (var trk = _editor.CreateTrackWriter()) { trk.DisableExtensionUpdating(); if (triggerenabled.IsChecked) { var cpy = (StandardLine)_ownerline.Clone(); cpy.Trigger.ZoomTarget = (float)zoom.NumberValue; UpdateOwnerLine(trk, cpy); } } }; frames.ValueChanged += (o, e) => { using (var trk = _editor.CreateTrackWriter()) { trk.DisableExtensionUpdating(); if (triggerenabled.IsChecked) { var cpy = (StandardLine)_ownerline.Clone(); cpy.Trigger.ZoomFrames = (int)frames.NumberValue; UpdateOwnerLine(trk, cpy); } } }; triggerenabled.ValueChanged += (o, e) => { using (var trk = _editor.CreateTrackWriter()) { trk.DisableExtensionUpdating(); var cpy = (StandardLine)_ownerline.Clone(); if (triggerenabled.IsChecked) { cpy.Trigger = new LineTrigger() { ZoomTrigger = true, ZoomFrames = (int)frames.NumberValue, ZoomTarget = (float)zoom.NumberValue }; UpdateOwnerLine(trk, cpy); } else { cpy.Trigger = null; UpdateOwnerLine(trk, cpy); } } }; } }
private void SetupRedOptions(PropertyTree tree) { var vec = _ownerline.GetVector(); var len = vec.Length; var angle = Angle.FromVector(vec); angle.Degrees += 90; var lineProp = tree.Add("Line Properties", 120); Console.WriteLine(_ownerline.GetType().ToString()); if (!(_ownerline is SceneryLine scenery)) { var id = new NumberProperty(lineProp) { Min = 0, Max = int.MaxValue - 1, NumberValue = _ownerline.ID, OnlyWholeNumbers = true, }; id.ValueChanged += (o, e) => { ChangeID((int)id.NumberValue); }; lineProp.Add("ID", id); } _length = new NumberProperty(lineProp) { Min = 0.0000001, Max = double.MaxValue - 1, NumberValue = len, }; _length.ValueChanged += (o, e) => { ChangeLength(_length.NumberValue); }; lineProp.Add("Length", _length); _angleProp = new NumberProperty(lineProp) { Min = 0, Max = 360, NumberValue = angle.Degrees, }; _angleProp.ValueChanged += (o, e) => { ChangeAngle(_angleProp.NumberValue); }; lineProp.Add("Angle", _angleProp); if (!(_ownerline is SceneryLine)) { var multilines = new NumberProperty(lineProp) { Min = 1, Max = int.MaxValue - 1, OnlyWholeNumbers = true, }; multilines.NumberValue = GetMultiLines(true).Count; multilines.ValueChanged += (o, e) => { Multiline((int)multilines.NumberValue); }; lineProp.Add("Multilines", multilines); } if (_ownerline is SceneryLine sceneryLine) { _width = new NumberProperty(lineProp) { Min = 0.1, Max = 25.5, NumberValue = _ownerline.Width, }; _width.ValueChanged += (o, e) => { ChangeWidth(_width.NumberValue); }; lineProp.Add("Width", _width); } if (_ownerline is RedLine red) { var acceleration = tree.Add("Acceleration", 120); var multiplier = new NumberProperty(acceleration) { Min = 1, Max = 255, NumberValue = red.Multiplier, OnlyWholeNumbers = true, }; multiplier.ValueChanged += (o, e) => { ChangeMultiplier((int)multiplier.NumberValue); }; acceleration.Add("Multiplier", multiplier); var accelinverse = GwenHelper.AddPropertyCheckbox( acceleration, "Inverse", red.inv ); accelinverse.ValueChanged += (o, e) => { using (var trk = _editor.CreateTrackWriter()) { var multi = GetMultiLines(false); foreach (var l in multi) { var cpy = (StandardLine)l.Clone(); cpy.Position = l.Position2; cpy.Position2 = l.Position; cpy.inv = accelinverse.IsChecked; UpdateLine(trk, l, cpy); } var owner = (StandardLine)_ownerline.Clone(); owner.Position = _ownerline.Position2; owner.Position2 = _ownerline.Position; owner.inv = accelinverse.IsChecked; UpdateOwnerLine(trk, owner); } }; } }
private void Setup() { Dictionary <string, bool> trackfeatures; using (var trk = _editor.CreateTrackReader()) { trackfeatures = trk.GetFeatures(); } TabControl tabs = new TabControl(this) { Dock = Dock.Fill }; var settings = tabs.AddPage("Settings"); var song = tabs.AddPage("Song"); _tree = new PropertyTree(settings) { Dock = Dock.Fill, }; var table = _tree.Add("Settings", 150); NumberProperty startzoom = new NumberProperty(null) { Min = 1, NumberValue = _editor.StartZoom, Max = Constants.MaxZoom, }; startzoom.ValueChanged += (o, e) => { _editor.StartZoom = (float)startzoom.NumberValue; }; table.Add("Start Zoom", startzoom); var zerostart = GwenHelper.AddPropertyCheckbox(table, "Zero Start", _editor.ZeroStart); zerostart.ValueChanged += (o, e) => { _editor.ZeroStart = zerostart.IsChecked; }; NumberProperty ygravity = new NumberProperty(null) { Min = float.MinValue + 1, Max = float.MaxValue - 1, }; ygravity.Value = ((float)_editor.YGravity).ToString(); ygravity.ValueChanged += (o, e) => { _editor.YGravity = float.Parse(ygravity.Value); }; table.Add("Y Gravity Multiplier", ygravity); NumberProperty xgravity = new NumberProperty(null) { Min = float.MinValue + 1, Max = float.MaxValue - 1, }; xgravity.Value = ((float)_editor.XGravity).ToString(); xgravity.ValueChanged += (o, e) => { _editor.XGravity = float.Parse(xgravity.Value); }; table.Add("X Gravity Multiplier", xgravity); NumberProperty gravitywellsize = new NumberProperty(null) { Min = 0, Max = double.MaxValue - 1, }; gravitywellsize.Value = ((double)_editor.GravityWellSize).ToString(); gravitywellsize.ValueChanged += (o, e) => { _editor.GravityWellSize = double.Parse(gravitywellsize.Value); }; table.Add("Gravity Well Size", gravitywellsize); //BG COLORS table = _tree.Add("Starting Background Color", 150); NumberProperty startbgred = new NumberProperty(null) { Min = 0, Max = 255 }; startbgred.Value = _editor.StartingBGColorR.ToString(); //Put value out here because putting it in the number property makes it get set to 100 for some reason??? startbgred.ValueChanged += (o, e) => { _editor.StartingBGColorR = int.Parse(startbgred.Value); }; table.Add("Background Red", startbgred); NumberProperty startbggreen = new NumberProperty(null) { Min = 0, Max = 255 }; startbggreen.Value = _editor.StartingBGColorG.ToString(); //Put value out here because putting it in the number property makes it get set to 100 for some reason??? startbggreen.ValueChanged += (o, e) => { _editor.StartingBGColorG = int.Parse(startbggreen.Value); }; table.Add("Background Green", startbggreen); NumberProperty startbgblue = new NumberProperty(null) { Min = 0, Max = 255 }; startbgblue.Value = _editor.StartingBGColorB.ToString(); //Put value out here because putting it in the number property makes it get set to 100 for some reason??? startbgblue.ValueChanged += (o, e) => { _editor.StartingBGColorB = int.Parse(startbgblue.Value); }; table.Add("Background Blue", startbgblue); //LINE COLORS table = _tree.Add("Starting Line Color", 150); NumberProperty startlinered = new NumberProperty(null) { Min = 0, Max = 255 }; startlinered.Value = _editor.StartingLineColorR.ToString(); //Put value out here because putting it in the number property makes it get set to 100 for some reason??? startlinered.ValueChanged += (o, e) => { _editor.StartingLineColorR = int.Parse(startlinered.Value); }; table.Add("Line Red", startlinered); NumberProperty startlinegreen = new NumberProperty(null) { Min = 0, Max = 255 }; startlinegreen.Value = _editor.StartingLineColorG.ToString(); //Put value out here because putting it in the number property makes it get set to 100 for some reason??? startlinegreen.ValueChanged += (o, e) => { _editor.StartingLineColorG = int.Parse(startlinegreen.Value); }; table.Add("Line Green", startlinegreen); NumberProperty startlineblue = new NumberProperty(null) { Min = 0, Max = 255 }; startlineblue.Value = _editor.StartingLineColorB.ToString(); //Put value out here because putting it in the number property makes it get set to 100 for some reason??? startlineblue.ValueChanged += (o, e) => { _editor.StartingLineColorB = int.Parse(startlineblue.Value); }; table.Add("Line Blue", startlineblue); table = _tree.Add("Info", 150); // var trackname = table.AddLabel("Track Name", _editor.Name); var physics = table.AddLabel("Physics", CheckFeature(trackfeatures, TrackFeatures.six_one) ? "6.1" : "6.2"); table.AddLabel("Blue Lines", _editor.BlueLines.ToString()); table.AddLabel("Red Lines", _editor.RedLines.ToString()); table.AddLabel("Scenery Lines", _editor.GreenLines.ToString()); table = _tree.Add("Features Used", 150); AddFeature(table, trackfeatures, "Red Multiplier", TrackFeatures.redmultiplier); AddFeature(table, trackfeatures, "Scenery Width", TrackFeatures.scenerywidth); AddFeature(table, trackfeatures, "Line Triggers", TrackFeatures.ignorable_trigger); table = _tree.Add("Physics Modifiers", 150); var remount = GwenHelper.AddPropertyCheckbox(table, "Remount", _editor.UseRemount); remount.ValueChanged += (o, e) => { _editor.UseRemount = remount.IsChecked; }; PopulateSong(song); _tree.ExpandAll(); // table.Add }
private void PopulateTools(ControlBase parent) { var bezier = GwenHelper.CreateHeaderPanel(parent, "Bezier Tool"); var resolution = new Spinner(bezier) { Min = 5, Max = 100, Value = Settings.Bezier.Resolution, IncrementSize = 1 }; resolution.ValueChanged += (o, e) => { Settings.Bezier.Resolution = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(bezier, "Resolution (Lines per 100 pixels)", resolution); var nodeSize = new Spinner(bezier) { Min = 5, Max = 100, Value = Settings.Bezier.NodeSize, IncrementSize = 1 }; nodeSize.ValueChanged += (o, e) => { Settings.Bezier.NodeSize = (int)((Spinner)o).Value; Settings.Save(); }; GwenHelper.CreateLabeledControl(bezier, "Size of the bezier curve nodes", nodeSize); var bezierModeSelector = new RadioButtonGroup(bezier) { Dock = Dock.Top, ShouldDrawBackground = false }; var directType = bezierModeSelector.AddOption("Direct Visualization Mode"); var traceType = bezierModeSelector.AddOption("Trace Visualization Mode"); switch ((Settings.BezierMode)Settings.Bezier.Mode) { case Settings.BezierMode.Direct: directType.Select(); break; case Settings.BezierMode.Trace: traceType.Select(); break; } directType.CheckChanged += (o, e) => { Settings.Bezier.Mode = (int)Settings.BezierMode.Direct; Settings.Save(); }; traceType.CheckChanged += (o, e) => { Settings.Bezier.Mode = (int)Settings.BezierMode.Trace; Settings.Save(); }; var select = GwenHelper.CreateHeaderPanel(parent, "Select Tool -- Line Info"); var length = GwenHelper.AddCheckbox(select, "Show Length", Settings.Editor.ShowLineLength, (o, e) => { Settings.Editor.ShowLineLength = ((Checkbox)o).IsChecked; Settings.Save(); }); var angle = GwenHelper.AddCheckbox(select, "Show Angle", Settings.Editor.ShowLineAngle, (o, e) => { Settings.Editor.ShowLineAngle = ((Checkbox)o).IsChecked; Settings.Save(); }); var showid = GwenHelper.AddCheckbox(select, "Show ID", Settings.Editor.ShowLineID, (o, e) => { Settings.Editor.ShowLineID = ((Checkbox)o).IsChecked; Settings.Save(); }); Panel panelSnap = GwenHelper.CreateHeaderPanel(parent, "Snapping"); var linesnap = GwenHelper.AddCheckbox(panelSnap, "Snap New Lines", Settings.Editor.SnapNewLines, (o, e) => { Settings.Editor.SnapNewLines = ((Checkbox)o).IsChecked; Settings.Save(); }); var movelinesnap = GwenHelper.AddCheckbox(panelSnap, "Snap Line Movement", Settings.Editor.SnapMoveLine, (o, e) => { Settings.Editor.SnapMoveLine = ((Checkbox)o).IsChecked; Settings.Save(); }); var gridsnap = GwenHelper.AddCheckbox(panelSnap, "Snap to displayed grids", Settings.Editor.SnapToGrid, (o, e) => { Settings.Editor.SnapToGrid = ((Checkbox)o).IsChecked; Settings.Save(); }); var forcesnap = GwenHelper.AddCheckbox(panelSnap, "Force X/Y snap", Settings.Editor.ForceXySnap, (o, e) => { Settings.Editor.ForceXySnap = ((Checkbox)o).IsChecked; Settings.Save(); }); var snapAngle = new Spinner(panelSnap) { Min = 0, Max = 180, Value = Settings.Editor.XySnapDegrees, IncrementSize = 1 }; snapAngle.ValueChanged += (o, e) => { Settings.Editor.XySnapDegrees = (float)Math.Round((float)((Spinner)o).Value, 2, MidpointRounding.AwayFromZero); ((Spinner)o).Value = Settings.Editor.XySnapDegrees; // Re-display the rounded value Settings.Save(); }; GwenHelper.CreateLabeledControl(panelSnap, "X/Y snap degrees", snapAngle); forcesnap.Tooltip = "Forces all lines drawn to\nsnap to multiples of a chosen angle"; movelinesnap.Tooltip = "Snap to lines when using the\nselect tool to move a single line"; }
private void PopulateSong(ControlBase parent) { var currentpanel = GwenHelper.CreateHeaderPanel(parent, "Current Song"); currentpanel.Dock = Dock.Fill; ListSongs(currentpanel); var opts = GwenHelper.CreateHeaderPanel(parent, "Sync options"); var syncenabled = GwenHelper.AddCheckbox(opts, "Sync Song to Track", _editor.Song.Enabled, (o, e) => { var song = _editor.Song; song.Enabled = ((Checkbox)o).IsChecked; _editor.Song = song; }); Spinner offset = new Spinner(null) { Min = 0, Value = _editor.Song.Offset }; offset.ValueChanged += (o, e) => { var song = _editor.Song; song.Offset = (float)offset.Value; _editor.Song = song; }; CreateLabeledControl(opts, "Offset", offset); Button help = new Button(parent) { Dock = Dock.Bottom, Text = "Help", }; help.Clicked += (o, e) => { MessageBox.Show(_canvas, "LRA can sync songs with tracks you make.\nSongs are imported from Documents/LRA/Songs.\n\nWe load files as .ogg, but support importing all common filetypes. LRA will mark files it needs to automatically convert with [convert]", "Help", true); }; this.IsHiddenChanged += (o, e) => { if (!this.IsHidden) { return; } var fn = Program.UserDirectory + "Songs" + Path.DirectorySeparatorChar + _editor.Song.Location; if (_editor.Song.Enabled && File.Exists(fn)) { if (!IsOgg(fn) && !linerider.IO.ffmpeg.FFMPEG.HasExecutable) { var song = _editor.Song; song.Location = null; _editor.Song = song; _canvas.ShowffmpegMissing(); } else { _canvas.Loading = true; Audio.AudioService.LoadFile(ref fn); var song = _editor.Song; song.Location = Path.GetFileName(fn); _editor.Song = song; _canvas.Loading = false; } } }; }
private void SetupRight() { SetupZoom(); SetupCameraOffset(); ControlBase rightcontainer = new ControlBase(this) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Right, AutoSizeToContents = true }; ControlBase buttoncontainer = new ControlBase(rightcontainer) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Bottom, AutoSizeToContents = true, Children = { new Button(null) { Text = "Cancel", Name = "btncancel", Dock = Dock.Right, Margin = new Margin(5, 0, 0, 0), AutoSizeToContents = false, Width = 60, }, new Button(null) { Text = "Save", Name = "btnsave", Dock = Dock.Right, AutoSizeToContents = false, Width = 120, } } }; var save = buttoncontainer.FindChildByName("btnsave"); var cancel = buttoncontainer.FindChildByName("btncancel"); save.Clicked += (o, e) => { FinishChange(); Close(); }; cancel.Clicked += (o, e) => { CancelChange(); Close(); }; _triggeroptions = new Panel(rightcontainer) { Dock = Dock.Fill, Padding = Padding.Four, Margin = new Margin(0, 0, 0, 5) }; _zoomoptions.Parent = _triggeroptions; _triggertype = GwenHelper.CreateLabeledCombobox( rightcontainer, "Trigger Type:"); _triggertype.Dock = Dock.Bottom; var zoom = _triggertype.AddItem("Zoom", "", TriggerType.Zoom); zoom.Selected += (o, e) => { _triggeroptions.Children.Clear(); _zoomoptions.Parent = _triggeroptions; }; var cameraoffset = _triggertype.AddItem("Camera Offset", "", TriggerType.CameraOffset); cameraoffset.Selected += (o, e) => { _triggeroptions.Children.Clear(); _cameraoffsetoptions.Parent = _triggeroptions; }; _triggertype.SelectByUserData(TriggerType.Zoom); }
private void PopulateCircle() { CircleGenOptions = new ControlBase(null) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Top, AutoSizeToContents = true }; //Panel configPanel = GwenHelper.CreateHeaderPanel(CircleGenOptions, "Configure Circle Properties"); CircleRadius = new Spinner(null) { Min = 0.0, Max = 1.0e9, Value = gen_Circle.radius }; CircleRadius.ValueChanged += (o, e) => { gen_Circle.radius = CircleRadius.Value; gen_Circle.ReGenerate_Preview(); }; CircleLineCount = new Spinner(null) { Min = 3.0, Max = 1.0e7, Value = gen_Circle.lineCount }; CircleLineCount.ValueChanged += (o, e) => { gen_Circle.lineCount = (int)CircleLineCount.Value; gen_Circle.ReGenerate_Preview(); }; CircleOffsetX = new Spinner(null) { Min = -30000000000, Max = 30000000000, Value = gen_Circle.position.X }; CircleOffsetX.ValueChanged += (o, e) => { gen_Circle.position.X = CircleOffsetX.Value; gen_Circle.ReGenerate_Preview(); }; CircleOffsetY = new Spinner(null) { Min = -30000000000, Max = 30000000000, Value = gen_Circle.position.Y }; CircleOffsetY.ValueChanged += (o, e) => { gen_Circle.position.Y = CircleOffsetY.Value; gen_Circle.ReGenerate_Preview(); }; CircleMultiplier = new Spinner(null) { Min = 0, Max = 255, Value = gen_Circle.multiplier, IsDisabled = true }; CircleMultiplier.ValueChanged += (o, e) => { gen_Circle.multiplier = (int)CircleMultiplier.Value; gen_Circle.ReGenerate_Preview(); }; CircleWidth = new Spinner(null) { Min = 0.1, Max = 25.5, Value = gen_Circle.width, IncrementSize = 0.1, IsDisabled = true }; CircleWidth.ValueChanged += (o, e) => { gen_Circle.width = (float)CircleWidth.Value; gen_Circle.ReGenerate_Preview(); }; GwenHelper.CreateLabeledControl(CircleGenOptions, "Radius", CircleRadius); GwenHelper.CreateLabeledControl(CircleGenOptions, "Line Count", CircleLineCount); GwenHelper.CreateLabeledControl(CircleGenOptions, "Centre X", CircleOffsetX); GwenHelper.CreateLabeledControl(CircleGenOptions, "Centre Y", CircleOffsetY); GwenHelper.CreateLabeledControl(CircleGenOptions, "Acceleration Multiplier", CircleMultiplier); GwenHelper.CreateLabeledControl(CircleGenOptions, "Scenery Width Multiplier", CircleWidth); var lineTypeRadioGroup = new RadioButtonGroup(CircleGenOptions) { Dock = Dock.Top, ShouldDrawBackground = false }; var blueType = lineTypeRadioGroup.AddOption("Blue"); var redType = lineTypeRadioGroup.AddOption("Red"); var greenType = lineTypeRadioGroup.AddOption("Green"); switch (gen_Circle.lineType) { case LineType.Blue: blueType.Select(); break; case LineType.Red: redType.Select(); break; case LineType.Scenery: greenType.Select(); break; default: break; } blueType.CheckChanged += (o, e) => { gen_Circle.lineType = LineType.Blue; gen_Circle.ReGenerate_Preview(); CircleMultiplier.Disable(); CircleWidth.Disable(); CircleInverse.Enable(); CircleReverse.Disable(); }; redType.CheckChanged += (o, e) => { gen_Circle.lineType = LineType.Red; gen_Circle.ReGenerate_Preview(); CircleMultiplier.Enable(); CircleWidth.Disable(); CircleInverse.Enable(); CircleReverse.Enable(); }; greenType.CheckChanged += (o, e) => { gen_Circle.lineType = LineType.Scenery; gen_Circle.ReGenerate_Preview(); CircleMultiplier.Disable(); CircleWidth.Enable(); CircleInverse.Disable(); CircleReverse.Disable(); }; CircleInverse = GwenHelper.AddCheckbox(CircleGenOptions, "Invert", gen_Circle.invert, (o, e) => { gen_Circle.invert = ((Checkbox)o).IsChecked; gen_Circle.ReGenerate_Preview(); }); CircleReverse = GwenHelper.AddCheckbox(CircleGenOptions, "Reverse", gen_Circle.reverse, (o, e) => { gen_Circle.reverse = ((Checkbox)o).IsChecked; gen_Circle.ReGenerate_Preview(); }); }
private void SetupLeft() { ControlBase leftcontainer = new ControlBase(this) { Margin = new Margin(0, 0, 0, 0), Dock = Dock.Left, AutoSizeToContents = true, }; var panel = new ControlBase(leftcontainer); panel.Width = 150; panel.Height = 200; ControlBase topcontainer = new ControlBase(panel) { Margin = new Margin(0, 3, 0, 3), Padding = Padding.Five, Dock = Dock.Top, Children = { new Button(null) { Text = "-", Name = "btndelete", Dock = Dock.Right, Margin = new Margin(2, 0, 2, 0), Height = 16, Width = 16, AutoSizeToContents = false }, new Button(null) { Text = "+", Name = "btnadd", Dock = Dock.Right, Margin = new Margin(2, 0, 2, 0), Width = 16, Height = 16, AutoSizeToContents = false } }, AutoSizeToContents = true, }; var add = topcontainer.FindChildByName("btnadd"); var delete = topcontainer.FindChildByName("btndelete"); add.Clicked += (o, e) => { GameTrigger trigger; switch (_triggertype.SelectedItem.UserData) { case TriggerType.Zoom: trigger = new GameTrigger() { TriggerType = TriggerType.Zoom, Start = _editor.Offset, End = _editor.Offset + 40, ZoomTarget = (float)_zoomtarget.Value, }; break; case TriggerType.CameraOffset: trigger = new GameTrigger() { TriggerType = TriggerType.CameraOffset, Start = _editor.Offset, End = _editor.Offset + 40, XOffsetInPixels = (float)_camerapixeloffsetx.Value, YOffsetInPixels = (float)_camerapixeloffsety.Value, }; break; default: //Make a standard zoom trigger if something goes wrong trigger = new GameTrigger() { TriggerType = TriggerType.Zoom, Start = _editor.Offset, End = _editor.Offset + 40, ZoomTarget = 4, }; break; } _changemade = true; using (var trk = _editor.CreateTrackWriter()) { trk.Triggers.Add(trigger); _editor.Timeline.TriggerChanged(trigger, trigger); UpdateFrame(); } ToggleDisable(false); _lbtriggers.AddRow(GetTriggerLabel(trigger), "", trigger); _lbtriggers.SelectByUserData(trigger); }; delete.Clicked += (o, e) => { var row = _lbtriggers.SelectedRow; if (row != null) { var trigger = (GameTrigger)(row.UserData); _changemade = true; using (var trk = _editor.CreateTrackWriter()) { trk.Triggers.RemoveAt(SelectedTrigger); _editor.Timeline.TriggerChanged(trigger, trigger); UpdateFrame(); } _lbtriggers.Children.Remove(row); ToggleDisable(true); } }; _lbtriggers = new ListBox(panel) { Dock = Dock.Fill, Margin = new Margin(0, 0, 0, 5) }; ControlBase spinnerContainer = new ControlBase(leftcontainer) { Margin = new Margin(0, 0, 0, 0), Padding = new Padding(0, 0, 50, 0), Dock = Dock.Bottom, AutoSizeToContents = true }; _spinnerStart = new Spinner(null) { OnlyWholeNumbers = true, Min = 1, Max = Constants.MaxFrames, Value = _editor.Offset //TODO set values }; _spinnerDuration = new Spinner(null) { OnlyWholeNumbers = true, Min = 0, Max = double.MaxValue, //Yeah, I am crazy nuts. I want more than 2 minutes. Value = 0 //TODO set values }; _spinnerStart.ValueChanged += OnTriggerTimeChanged; _spinnerDuration.ValueChanged += OnTriggerTimeChanged; GwenHelper.CreateLabeledControl( spinnerContainer, "Duration: ", _spinnerDuration).Dock = Dock.Bottom; GwenHelper.CreateLabeledControl( spinnerContainer, "Start:", _spinnerStart).Dock = Dock.Bottom; _lbtriggers.RowSelected += OnTriggerSelected; }