private void AddDefaultSetting(ScadMod m, BepInExSettingsPacket p, object current)
 {
     if (!DefaultWrappers.ContainsKey(m))
     {
         DefaultWrappers.Add(m, new Dictionary <BepInExSettingsPacket, object>());
     }
     DefaultWrappers[m].Add(p, current);
 }
        internal void CreateToggle(ScadMod m, BepInExSettingsPacket w)
        {
            // I believe the Old Object's parent is a special display component that contains both text and the toggle button
            Debug.Log("Creating Toggle with name: " + Util.GetName(m, w));
            DynData <OptionsPanel> d      = new DynData <OptionsPanel>(optionsPanel);
            GameObject             oldObj = d.Get <AgeControlToggle>("vSyncToggle").transform.parent.gameObject;
            // oldObj is now the group object!

            GameObject toggleGroup = (GameObject)GameObject.Instantiate(oldObj);

            toggleGroup.name = Util.GetName(m, w);
            toggleGroup.transform.SetParent(modSettingsTable.transform);
            Debug.Log("Toggle Group Object Created!");

            Transform toggle = toggleGroup.transform.GetChild(2);

            toggle.gameObject.name = Util.GetName(m, w) + "_Toggle";
            AgeControlToggle toggleControl = toggle.GetComponent <AgeControlToggle>();

            toggleControl.State = ((ConfigWrapper <bool>)w.Wrapper).Value;
            toggle.GetComponent <AgeTooltip>().Content = Util.GetName(m, w);

            Transform label = toggleGroup.transform.GetChild(1);

            label.gameObject.name = Util.GetName(m, w) + "_Label";
            label.GetComponent <AgePrimitiveLabel>().Text = Util.GetName(m, w);

            toggleGroup.GetComponent <AgeTransform>().PixelMarginTop = VisibleWrappers.Count * (settingSpacing + toggleGroup.GetComponent <AgeTransform>().Height);
            Debug.Log("VisibleFields Count: " + VisibleWrappers.Count);
            toggleControl.OnSwitchMethod = "OnTogglePressed";
            toggleControl.OnSwitchObject = transform.gameObject;
            Debug.Log("Switch - Method: " + toggleControl.OnSwitchMethod + " GameObject: " + toggleControl.OnSwitchObject);


            VisibleWrappers.Add(w);
            toggles.Add(toggleControl);
        }
        internal void CreateSlider(ScadMod m, BepInExSettingsPacket w, SliderRange range)
        {
            Debug.Log("Creating Slider with name: " + Util.GetName(m, w));
            DynData <OptionsPanel> d           = new DynData <OptionsPanel>(optionsPanel);
            GameObject             oldObj      = d.Get <AgeControlSlider>("masterVolSlider").transform.parent.parent.gameObject;
            GameObject             sliderGroup = (GameObject)GameObject.Instantiate(oldObj);

            sliderGroup.name = Util.GetName(m, w);
            sliderGroup.transform.SetParent(modSettingsTable.transform);
            Debug.Log("Slider Group Object Created!");

            Debug.Log("OLD:");
            Debug.Log("Slider: " + d.Get <AgeControlSlider>("masterVolSlider").transform);
            Debug.Log("Parent: " + d.Get <AgeControlSlider>("masterVolSlider").transform.parent);
            Debug.Log("Parent's Parent: " + d.Get <AgeControlSlider>("masterVolSlider").transform.parent.parent);
            Debug.Log("Children");
            foreach (Transform t in d.Get <AgeControlSlider>("masterVolSlider").transform.parent.parent)
            {
                Debug.Log("Components:");
                foreach (Component _ in t.GetComponents(typeof(Component)))
                {
                    Debug.Log("- " + _);
                }
            }
            Transform slider = sliderGroup.transform.FindChild("20-SliderContainer").FindChild("10-Slider");

            slider.gameObject.name = Util.GetName(m, w) + "_Slider";
            AgeControlSlider sliderControl = slider.GetComponent <AgeControlSlider>();

            Debug.Log("Created Slider Control!");

            //slider.GetComponent<AgeTooltip>().Content = Util.GetName(m, f);

            Transform label = sliderGroup.transform.FindChild("0-Title");

            label.gameObject.name = Util.GetName(m, w) + "_Label";
            label.GetComponent <AgePrimitiveLabel>().Text = Util.GetName(m, w);

            sliderGroup.GetComponent <AgeTransform>().Position       = d.Get <AgeControlSlider>("masterVolSlider").transform.parent.parent.GetComponent <AgeTransform>().Position;
            sliderGroup.GetComponent <AgeTransform>().PixelMarginTop = VisibleWrappers.Count * (settingSpacing + sliderGroup.GetComponent <AgeTransform>().Height);
            Debug.Log("Setup Slider Location!");

            sliderControl.MinValue  = range.Min;
            sliderControl.MaxValue  = range.Max;
            sliderControl.Increment = range.Increment;
            if (w.Type.Equals(typeof(int)))
            {
                sliderControl.CurrentValue = ((ConfigWrapper <int>)w.Wrapper).Value;
            }
            else if (w.Type.Equals(typeof(float)))
            {
                sliderControl.CurrentValue = ((ConfigWrapper <float>)w.Wrapper).Value;
            }
            else if (w.Type.Equals(typeof(double)))
            {
                sliderControl.CurrentValue = (float)((ConfigWrapper <double>)w.Wrapper).Value;
            }
            Debug.Log("Setup Slider Control!");

            sliderControl.AgeTransform.Position = d.Get <AgeControlSlider>("masterVolSlider").AgeTransform.Position;
            // Set to have same stats as old sliders
            sliderGroup.transform.FindChild("20-SliderContainer").GetComponent <AgeTransform>().PixelMarginLeft   = 36;
            sliderGroup.transform.FindChild("20-SliderContainer").GetComponent <AgeTransform>().PixelMarginRight  = 36;
            sliderGroup.transform.FindChild("20-SliderContainer").GetComponent <AgeTransform>().PixelMarginBottom = 6;
            //sliderGroup.transform.FindChild("20-SliderContainer").GetComponent<AgeTransform>().Width = 612;
            sliderGroup.transform.FindChild("10-SliderBg").GetComponent <AgeTransform>().PixelMarginBottom = 6;
            sliderGroup.transform.FindChild("30-Value").GetComponent <AgePrimitiveLabel>().Text            = sliderControl.CurrentValue.ToString();
            label.GetComponent <AgePrimitiveLabel>().AgeTransform.Height          = 42;
            label.GetComponent <AgePrimitiveLabel>().AgeTransform.PixelMarginLeft = 8;
            sliderControl.AgeTransform.GetParent().X     = 36;
            sliderControl.AgeTransform.GetParent().Y     = 36;
            sliderControl.AgeTransform.GetParent().Width = d.Get <AgeControlSlider>("masterVolSlider").AgeTransform.GetParent().Width;
            sliderGroup.transform.FindChild("30-Value").GetComponent <AgeTransform>().Height = 42;


            sliderControl.OnDragMethod = "OnSliderDragged";
            sliderControl.OnDragObject = transform.gameObject;
            Debug.Log("Arm - Method: " + sliderControl.OnArmMethod + " GameObject: " + sliderControl.OnArmObject);
            Debug.Log("Drag - Method: " + sliderControl.OnDragMethod + " GameObject: " + sliderControl.OnDragObject);
            Debug.Log("Release - Method: " + sliderControl.OnReleaseMethod + " GameObject: " + sliderControl.OnReleaseObject);


            VisibleWrappers.Add(w);

            sliders.Add(sliderControl);
        }
        // This method creates all of the AgeControl items that correspond to mod settings
        // They are placed within the optionsPanel instance variable
        private void CreateSettings()
        {
            Debug.Log("Creating Settings!");
            foreach (ScadMod m in mods)
            {
                Debug.Log("Attempting to find ConfigFile for mod: " + m.name);
                ConfigFile file = Util.GetConfigFile(m);

                Debug.Log("Mod: " + m.name + " with: " + file.ConfigDefinitions.Count + " fields.");

                foreach (ConfigDefinition d in file.ConfigDefinitions)
                {
                    // If it exists in the config file, it is meant to be there.

                    //TODO DEBUG!
                    // NEED TO REDO ATTRIBUTES FOR RANGE HERE NOW THAT I REMOVED MOST OF THAT STUFF WITH BEPINEX
                    if (d.Section.Equals(DustDevil.IGNORED_SETTINGS_SECTION_NAME))
                    {
                        Debug.Log("Ignoring Definition: " + d.Key);
                        continue;
                    }
                    Debug.Log("Attempting Definition: " + d.Key);

                    //ConfigWrapper<object> wrapper = file.Wrap<object>(d);

                    //Debug.Log("Definition: " + d + " has value: " + wrapper.Value);

                    //if (wrapper.Value == null)
                    //{
                    //    Debug.Log("Wrapper value is null!");
                    //    continue;
                    //}

                    try
                    {
                        Debug.Log("Attempting with type: bool");
                        ConfigWrapper <bool> wrapper = file.Wrap <bool>(d);
                        Debug.Log("File path: " + file.ConfigFilePath);

                        bool throwAway = wrapper.Value;

                        var packet = new BepInExSettingsPacket(wrapper, wrapper.Definition.Key, typeof(bool));

                        Debug.Log("Showing bool with name: " + Util.GetName(m, packet));
                        CreateToggle(m, packet);
                        AddDefaultSetting(m, packet, throwAway);
                    } catch (Exception)
                    {
                        try
                        {
                            Debug.Log("Attempting with type: float");
                            ConfigWrapper <float> wrapper = file.Wrap <float>(d);

                            float throwAway = wrapper.Value;

                            var packet = new BepInExSettingsPacket(wrapper, wrapper.Definition.Key, typeof(float));

                            Debug.Log("Showing slider with name: " + Util.GetName(m, packet));

                            // Get SliderRange of this definition.
                            SliderRange sliderRange = new SliderRange();
                            try
                            {
                                Debug.Log("Attempting to find slider range for slider: " + d.Key);

                                // Attempt to get the lower and upper settings...
                                ConfigWrapper <float> lowWrapper  = file.Wrap <float>(DustDevil.IGNORED_SETTINGS_SECTION_NAME, d.Key + "Min", "The minimum value for " + d.Key + ".", sliderRange.Min);
                                ConfigWrapper <float> highWrapper = file.Wrap <float>(DustDevil.IGNORED_SETTINGS_SECTION_NAME, d.Key + "Max", "The maximum value for " + d.Key + ".", sliderRange.Max);
                                sliderRange = new SliderRange(lowWrapper.Value, highWrapper.Value);
                                // Attempt to get the increment...
                                ConfigWrapper <float> incrementWrapper = file.Wrap <float>(DustDevil.IGNORED_SETTINGS_SECTION_NAME, d.Key + "Increment", "How much to increment " + d.Key + " by.", sliderRange.Increment);
                                sliderRange.SetIncrement(incrementWrapper.Value);
                            }
                            catch (Exception)
                            {
                                Debug.Log("Error when attempting to get a slider range object. Will use most recent functional slider range.");
                            }

                            Debug.Log("Creating a slider with SliderRange: " + sliderRange);
                            CreateSlider(m, packet, sliderRange);
                            AddDefaultSetting(m, packet, throwAway);
                        } catch (Exception)
                        {
                            Debug.Log("Skipping Item with Name: " + d.Key + " as it was unparseable for settings!");
                        }
                    }
                }
                Debug.Log("==========================================");
            }
        }
Exemple #5
0
 // Returns a legible name from the given fieldinfo.Name
 internal static string GetName(ScadMod m, BepInExSettingsPacket packet)
 {
     return(m.name + " - " + packet.Name);
 }