예제 #1
0
 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;
 }
예제 #2
0
        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();
            });
        }
예제 #3
0
        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";
        }
예제 #4
0
        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);
                    }
                };
            }
        }
예제 #5
0
        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
        }
예제 #6
0
 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;
 }
예제 #7
0
        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();
            });
        }
예제 #8
0
        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);
        }
예제 #10
0
        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();
            });
        }
예제 #12
0
        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";
        }
예제 #13
0
        // 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);
        }
예제 #14
0
        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();
            });
        }
예제 #15
0
        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";
        }
예제 #16
0
        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;
        }
예제 #17
0
        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();
            };
        }
예제 #18
0
        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);
        }
예제 #19
0
        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);
        }
예제 #20
0
        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();
        }
예제 #22
0
        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);
                        }
                    }
                };
            }
        }
예제 #23
0
        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);
                    }
                };
            }
        }
예제 #24
0
        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";
        }
예제 #26
0
        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;
                    }
                }
            };
        }
예제 #27
0
        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();
            });
        }
예제 #29
0
        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;
        }