Exemple #1
0
        internal Color GetColor()
        {
            Color underGroundColor = staticInstance.GrasColor;

            if (underGroundColor.a < 1f)
            {
                underGroundColor = GrassColorUtils.ManualCalcNewColor(underGroundColor, grasTextureName, grasTextureName);
            }
            return(underGroundColor);
        }
Exemple #2
0
        internal Color GetColor()
        {
            Color underGroundColor = staticInstance.GrasColor;

            if (underGroundColor.a != 1f && underGroundColor.a != 0f)
            {
                underGroundColor = GrassColorUtils.ManualCalcNewColor(underGroundColor, grasTextureName, grasTextureName);
                // convert it once and for all
                staticInstance.GrasColor = underGroundColor;
            }
            return(underGroundColor);
        }
Exemple #3
0
        public void ReadConfig()
        {
            if (staticInstance.grassColor2Configs.Count == 0)
            {
                nearGrassTextureName  = DefaultNearGrassTexture;
                farGrassTextureName   = DefaultFarGrassTexture;
                tarmacTextureName     = DefaultTarmacTexture;
                blendMaskTextureName  = DefaultBlendMaskTexture;
                nearGrassTiling       = float.Parse(DefaultNearGrassTiling);
                farGrassTiling        = float.Parse(DefaultFarGrassTiling);
                farGrassBlendDistance = float.Parse(DefaultFarGrassBlendDistance);
                grassColor            = defaultColor;
                tarmacColor           = Color.white;
                tarmacTiling          = new Vector2(10, 10);

                // try to import legacy values
                if (staticInstance.GrasColor != Color.clear)
                {
                    Log.Normal("Loading Legacy Grass Config" + staticInstance.gameObject.name);
                    //useLegacy = true;
                    grassColor = staticInstance.GrasColor;
                    string oldGrassTexture = staticInstance.GrasTexture;
                    if (String.IsNullOrEmpty(staticInstance.GrasTexture) || staticInstance.GrasTexture == "BUILTIN:/terrain_grass00_new")
                    {
                        oldGrassTexture = "KerbalKonstructs/Assets/Colors/legacyGrassColors";
                    }
                    if (String.IsNullOrEmpty(staticInstance.GrasTexture))
                    {
                        staticInstance.GrasTexture = "BUILTIN:/terrain_grass00_new_detail";
                    }

                    farGrassTiling       = farGrassTiling * 5;
                    nearGrassTextureName = staticInstance.GrasTexture;
                    farGrassTextureName  = staticInstance.GrasTexture;

                    grassColor = GrassColorUtils.ManualCalcNewColor(staticInstance.GrasColor, oldGrassTexture, staticInstance.GrasTexture);
                }

                return;
            }

            foreach (ConfigNode grassConfig in staticInstance.grassColor2Configs)
            {
                Log.Normal("found instance cfgnode");
                if (grassConfig.GetValue("GrassMeshName") == GrassMeshName)
                {
                    Log.Normal("found instance grassnode");
                    nearGrassTextureName  = (grassConfig.HasValue("NearGrassTexture")) ? grassConfig.GetValue("NearGrassTexture") : DefaultNearGrassTexture;
                    farGrassTextureName   = (grassConfig.HasValue("FarGrassTexture")) ? grassConfig.GetValue("FarGrassTexture") : DefaultFarGrassTexture;
                    tarmacTextureName     = (grassConfig.HasValue("TarmacTexture")) ? grassConfig.GetValue("TarmacTexture") : DefaultTarmacTexture;
                    blendMaskTextureName  = (grassConfig.HasValue("BlendMaskTexture")) ? grassConfig.GetValue("BlendMaskTexture") : DefaultBlendMaskTexture;
                    nearGrassTiling       = (grassConfig.HasValue("NearGrassTiling")) ? float.Parse(grassConfig.GetValue("NearGrassTiling")) : 1f;
                    farGrassTiling        = (grassConfig.HasValue("FarGrassTiling")) ? float.Parse(grassConfig.GetValue("FarGrassTiling")) : 1f;
                    farGrassBlendDistance = (grassConfig.HasValue("FarGrassBlendDistance")) ? float.Parse(grassConfig.GetValue("FarGrassBlendDistance")) : 50f;

                    grassColor   = (grassConfig.HasValue("GrassColor")) ? ConfigNode.ParseColor(grassConfig.GetValue("GrassColor")) : defaultColor;
                    tarmacColor  = (grassConfig.HasValue("TarmacColor")) ? ConfigNode.ParseColor(grassConfig.GetValue("TarmacColor")) : Color.white;
                    tarmacTiling = (grassConfig.HasValue("TarmacTiling")) ? ConfigNode.ParseVector2(grassConfig.GetValue("TarmacTiling")) : new Vector2(10, 10);
                    useLegacy    = (grassConfig.HasValue("UseLegacyColor")) ? Boolean.Parse(grassConfig.GetValue("UseLegacyColor")) : false;
                    break;
                }
            }
        }
        internal static void CreateContent()
        {
            content.Add(new DialogGUIHorizontalLayout(
                            new DialogGUILabel("Grass Color Editor", HighLogic.UISkin.label),
                            new DialogGUIFlexibleSpace(),
                            new DialogGUIButton("select preset", delegate { GrassColorPresetUI2.callBack = selectedMod.UpdateCallBack; GrassColorPresetUI2.instance.Open(); }, 50, 25, false),
                            new DialogGUIFlexibleSpace(),
                            new DialogGUIButton("Pick Surface Color", delegate {
                selectedMod.grassColor = GrassColorUtils.GetUnderGroundColor(selectedMod);
                selectedMod.ApplySettings();
            }, 80, 25, false)
                            ));


            content.Add(VaiantList);
            content.Add(new DialogGUIVerticalLayout(
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("NearGrassTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(NearGrassTexture, false, 40, SetNearGrassTexture, delegate { return(GetTextureName("nearGrassTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("nearGrassTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("FarGrassTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(FarGrassTexture, false, 40, SetFarGrassTexture, delegate { return(GetTextureName("farGrassTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("farGrassTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("TamarcTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(TamarcTexture, false, 40, SetTarmacTexture, delegate { return(GetTextureName("tarmacTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("tarmacTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("BlendMaskTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(BlendMaskTexture, false, 40, SetBlendMaskTexture, delegate { return(GetTextureName("blendMaskTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("blendMaskTextureName", TextureUsage.BlendMask); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel(" Grass: R ", KKStyle.whiteLabel),
                                new DialogGUISlider(GetGrassFloatR, 0, 4f, false, 140, 25, SetGrassFloatR),
                                new DialogGUITextInput("0", false, 10, SetGrassRStr, GetGrassRStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel(" Grass: G ", KKStyle.whiteLabel),
                                new DialogGUISlider(GetGrassFloatG, 0, 4f, false, 140, 25, SetGrassFloatG),
                                new DialogGUITextInput("0", false, 10, SetGrassGStr, GetGrassGStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel(" Grass: B ", KKStyle.whiteLabel),
                                new DialogGUISlider(GetGrassFloatB, 0, 4f, false, 140, 25, SetGrassFloatB),
                                new DialogGUITextInput("0", false, 10, SetGrassBStr, GetGrassBStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            //new DialogGUIHorizontalLayout(
                            //     new DialogGUILabel("Tarmac: R ", HighLogic.UISkin.label),
                            //     new DialogGUISlider(GetTarmacFloatR, 0, 1, false, 140, 25, SetTarmacFloatR),
                            //     new DialogGUITextInput("0", false, 10, SetTarmacRStr, GetTarmacRStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            //new DialogGUIHorizontalLayout(
                            //     new DialogGUILabel("Tarmac: G ", HighLogic.UISkin.label),
                            //     new DialogGUISlider(GetTarmacFloatG, 0, 1, false, 140, 25, SetTarmacFloatG),
                            //     new DialogGUITextInput("0", false, 10, SetTarmacGStr, GetTarmacGStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            //new DialogGUIHorizontalLayout(
                            //     new DialogGUILabel("Tarmac: B ", HighLogic.UISkin.label),
                            //     new DialogGUISlider(GetTarmacFloatB, 0, 1, false, 140, 25, SetTarmacFloatB),
                            //     new DialogGUITextInput("0", false, 10, SetTarmacBStr, GetTarmacBStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("NearGrassTiling", KKStyle.whiteLabel),
                                new DialogGUITextInput(NearGrassTiling, NearGrassTiling, false, 10, SetNearTile, 25)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("FarGrassTiling", KKStyle.whiteLabel),
                                new DialogGUITextInput(FarGrassTiling, FarGrassTiling, false, 10, SetFarTile, 25)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("FarBlendDistance", KKStyle.whiteLabel),
                                new DialogGUITextInput(BlendDistance, BlendDistance, false, 10, SetBlendDistance, 25))

                            //new DialogGUIHorizontalLayout(
                            //    new DialogGUILabel("Overall Tiling", KKStyle.whiteLabel),
                            //    new DialogGUISlider(GetOffsetTiling, 0, 200f, true, 140, 25, SetOffsetTiling),
                            //    new DialogGUITextInput("0", false, 10, SetOffsetTilingStr, GetOffsetTilingStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25))

                            ));;
        }
Exemple #5
0
        private void GrasSelectorWindow(int WindowID)
        {
            GUI.enabled = true;

            GUILayout.BeginHorizontal();
            {
                GUI.enabled = false;
                GUILayout.Button("-KK-", UIMain.DeadButton, GUILayout.Height(21));

                GUILayout.FlexibleSpace();

                GUILayout.Button(titleText, UIMain.DeadButton, GUILayout.Height(21));

                GUILayout.FlexibleSpace();

                GUI.enabled = true;

                if (GUILayout.Button("X", UIMain.DeadButtonRed, GUILayout.Height(21)))
                {
                    this.Close();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(1);
            GUILayout.Box(UIMain.tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));

            GUILayout.BeginHorizontal();
            {
                if (GUILayout.Button("Select Preset", GUILayout.Height(23), GUILayout.Width(120)))
                {
                    GrassColorPresetUI.callBack = UpdateCallBack;
                    GrassColorPresetUI.instance.Open();
                }

                GUILayout.Space(20);
                if (GUILayout.Button("Pick Surface Color", GUILayout.Height(23), GUILayout.Width(120)))
                {
                    selectedInstance.GrasColor = GrassColorUtils.GetUnderGroundColor(selectedInstance);
                    selectedInstance.Update();
                    SetupFields();
                }
                GUILayout.FlexibleSpace();
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(3);
            GUI.enabled = true;
            {
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Label("Red: ", GUILayout.Height(23));
                    GUILayout.FlexibleSpace();
                    grasColorRStr = (GUILayout.TextField(grasColorRStr, 7, GUILayout.Width(90), GUILayout.Height(23)));
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Label("Green: ", GUILayout.Height(23));
                    GUILayout.FlexibleSpace();
                    grasColorGStr = (GUILayout.TextField(grasColorGStr, 7, GUILayout.Width(90), GUILayout.Height(23)));
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Label("Blue: ", GUILayout.Height(23));
                    GUILayout.FlexibleSpace();
                    grasColorBStr = (GUILayout.TextField(grasColorBStr, 7, GUILayout.Width(90), GUILayout.Height(23)));
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Label("Alpha: ", GUILayout.Height(23));
                    GUILayout.FlexibleSpace();
                    grasColorAStr = (GUILayout.TextField(grasColorAStr, 7, GUILayout.Width(80), GUILayout.Height(23)));
                }
                GUILayout.EndHorizontal();
            }
            GUI.enabled = true;
            GUILayout.Space(1);
            GUILayout.Box(UIMain.tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));


            GUILayout.Label("Grass Texture: ", GUILayout.Height(23));
            grasTextureName = (GUILayout.TextField(grasTextureName, 200, GUILayout.Width(280), GUILayout.Height(23)));

            GUILayout.Space(1);
            GUILayout.Box(UIMain.tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));
            GUILayout.BeginHorizontal();
            {
                if (GUILayout.Button("Apply", GUILayout.Height(23), GUILayout.Width(80)))
                {
                    ApplySettings();
                }
            }
            GUILayout.EndHorizontal();
            GUILayout.Space(1);
            GUILayout.Box(UIMain.tHorizontalSep, UIMain.BoxNoBorder, GUILayout.Height(4));
            GUILayout.BeginHorizontal();
            {
                if (GUILayout.Button("Cancel", GUILayout.Height(23)))
                {
                    this.Close();
                }
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Apply & Close", GUILayout.Height(23)))
                {
                    ApplySettings();
                    this.Close();
                }
            }
            GUILayout.EndHorizontal();

            GUI.DragWindow(new Rect(0, 0, 10000, 10000));
        }
        public void ReadConfig()
        {
            if (staticInstance.grassColor2Configs.Count == 0)
            {
                nearGrassTextureName  = DefaultNearGrassTexture;
                farGrassTextureName   = DefaultFarGrassTexture;
                tarmacTextureName     = DefaultTarmacTexture;
                blendMaskTextureName  = DefaultBlendMaskTexture;
                nearGrassTiling       = float.Parse(DefaultNearGrassTiling);
                farGrassTiling        = float.Parse(DefaultFarGrassTiling);
                farGrassBlendDistance = float.Parse(DefaultFarGrassBlendDistance);
                tarmacTiling          = ConfigNode.ParseVector2(DefaultTarmacTiling);
                tarmacTileRandom      = bool.Parse(DefaultTarmacTileRandom);
                grassColor            = defaultColor;
                tarmacColor           = Color.white;

                nearGrassTextureGray = bool.Parse(DefaultNearGrassTextureGray);
                farGrassTextureGray  = bool.Parse(DefaultFarGrassTextureGray);
                tarmacTextureGray    = bool.Parse(DefaultTarmacTextureGray);
                thirdTextureGray     = bool.Parse(DefaultThirdTextureGray);
                fourthTextureGray    = bool.Parse(DefaultFourthTextureGray);

                //Log.Normal("MaterialOffset:" + MaterialOffset);


                thirdTextureName       = DefaultThirdTexture;
                thirdTextureTiling     = float.Parse(DefaultThirdTextureTiling);
                thirdTextureColor      = ConfigNode.ParseColor(DefaultThirdTextureColor);
                thirdTextureTileRandom = bool.Parse(DefaultThirdTextureTileRandom);

                fourthTextureName       = DefaultFourthTexture;
                fourthTextureTiling     = float.Parse(DefaultFourthTextureTiling);
                fourthTextureColor      = ConfigNode.ParseColor(DefaultFourthTextureColor);
                fourthTextureTileRandom = bool.Parse(DefaultFourthTextureTileRandom);


                // try to import legacy values
                if (staticInstance.GrasColor != Color.clear)
                {
                    Log.Normal("Loading Legacy Grass Config" + staticInstance.gameObject.name);
                    //useLegacy = true;
                    grassColor = staticInstance.GrasColor;
                    string oldGrassTexture = staticInstance.GrasTexture;
                    if (String.IsNullOrEmpty(staticInstance.GrasTexture) || staticInstance.GrasTexture == "BUILTIN:/terrain_grass00_new")
                    {
                        oldGrassTexture = "KerbalKonstructs/Assets/Colors/legacyGrassColors";
                    }
                    if (String.IsNullOrEmpty(staticInstance.GrasTexture))
                    {
                        staticInstance.GrasTexture = "BUILTIN:/terrain_grass00_new_detail";
                    }

                    //farGrassTiling = 10;
                    //nearGrassTiling = 1;
                    nearGrassTextureName = staticInstance.GrasTexture;
                    farGrassTextureName  = staticInstance.GrasTexture;


                    grassColor = GrassColorUtils.ManualCalcNewColor(staticInstance.GrasColor, oldGrassTexture, staticInstance.GrasTexture);

                    staticInstance.grassColor2Configs.Add(GiveConfig());
                }

                return;
            }

            foreach (ConfigNode grassConfig in staticInstance.grassColor2Configs)
            {
                //Log.Normal("found instance cfgnode");
                if (grassConfig.GetValue("GrassMeshName") == GrassMeshName)
                {
                    if (grassConfig.HasValue("MaterialOffset") && (grassConfig.GetValue("MaterialOffset") != MaterialOffset))
                    {
                        continue;
                    }

                    //Log.Normal("found instance grassnode");
                    grassColor = (grassConfig.HasValue("GrassColor")) ? ConfigNode.ParseColor(grassConfig.GetValue("GrassColor")) : defaultColor;

                    nearGrassTextureName = (grassConfig.HasValue("NearGrassTexture")) ? grassConfig.GetValue("NearGrassTexture") : DefaultNearGrassTexture;
                    farGrassTextureName  = (grassConfig.HasValue("FarGrassTexture")) ? grassConfig.GetValue("FarGrassTexture") : DefaultFarGrassTexture;

                    nearGrassTiling       = (grassConfig.HasValue("NearGrassTiling")) ? float.Parse(grassConfig.GetValue("NearGrassTiling")) : 1f;
                    farGrassTiling        = (grassConfig.HasValue("FarGrassTiling")) ? float.Parse(grassConfig.GetValue("FarGrassTiling")) : 1f;
                    farGrassBlendDistance = (grassConfig.HasValue("FarGrassBlendDistance")) ? float.Parse(grassConfig.GetValue("FarGrassBlendDistance")) : 50f;

                    blendMaskTextureName = (grassConfig.HasValue("BlendMaskTexture")) ? grassConfig.GetValue("BlendMaskTexture") : DefaultBlendMaskTexture;

                    tarmacTextureName = (grassConfig.HasValue("TarmacTexture")) ? grassConfig.GetValue("TarmacTexture") : DefaultTarmacTexture;
                    tarmacColor       = (grassConfig.HasValue("TarmacColor")) ? ConfigNode.ParseColor(grassConfig.GetValue("TarmacColor")) : Color.white;
                    tarmacTiling      = (grassConfig.HasValue("TarmacTiling")) ? ConfigNode.ParseVector2(grassConfig.GetValue("TarmacTiling")) : new Vector2(10, 10);
                    tarmacTileRandom  = (grassConfig.HasValue("TarmacTileRandom")) ? Boolean.Parse(grassConfig.GetValue("TarmacTileRandom")) : false;

                    thirdTextureName       = (grassConfig.HasValue("ThirdTexture")) ? grassConfig.GetValue("ThirdTexture") : "";
                    thirdTextureTiling     = (grassConfig.HasValue("ThirdTextureTiling")) ? float.Parse(grassConfig.GetValue("ThirdTextureTiling")) : 1f;
                    thirdTextureColor      = (grassConfig.HasValue("ThirdTextureColor")) ? ConfigNode.ParseColor(grassConfig.GetValue("ThirdTextureColor")) : new Color(1, 1, 1, 1);
                    thirdTextureTileRandom = (grassConfig.HasValue("ThirdTextureTileRandom")) ? Boolean.Parse(grassConfig.GetValue("ThirdTextureTileRandom")) : false;

                    fourthTextureName       = (grassConfig.HasValue("FourthTexture")) ? grassConfig.GetValue("FourthTexture") : "";
                    fourthTextureTiling     = (grassConfig.HasValue("FourthTextureTiling")) ? float.Parse(grassConfig.GetValue("FourthTextureTiling")) : 1f;
                    fourthTextureColor      = (grassConfig.HasValue("FourthTextureColor")) ? ConfigNode.ParseColor(grassConfig.GetValue("FourthTextureColor")) : new Color(1, 1, 1, 1);
                    fourthTextureTileRandom = (grassConfig.HasValue("FourthTextureTileRandom")) ? Boolean.Parse(grassConfig.GetValue("FourthTextureTileRandom")) : false;


                    nearGrassTextureGray = grassConfig.HasValue("NearGrassGrayScale") ? bool.Parse(grassConfig.GetValue("NearGrassGrayScale")): false;
                    farGrassTextureGray  = grassConfig.HasValue("FarGrassGrayScale") ? bool.Parse(grassConfig.GetValue("FarGrassGrayScale")) : false;
                    tarmacTextureGray    = grassConfig.HasValue("TarmacGrayScale") ? bool.Parse(grassConfig.GetValue("TarmacGrayScale")) : false;
                    thirdTextureGray     = grassConfig.HasValue("ThirdTextureGrayScale") ? bool.Parse(grassConfig.GetValue("ThirdTextureGrayScale")) : false;
                    fourthTextureGray    = grassConfig.HasValue("FourthTextureGrayScale") ? bool.Parse(grassConfig.GetValue("FourthTextureGrayScale")) : false;

                    break;
                }
            }
        }
Exemple #7
0
        internal static void CreateContent()
        {
            content.Add(new DialogGUIHorizontalLayout(
                            new DialogGUILabel("Grass Color Editor", HighLogic.UISkin.label),
                            new DialogGUIFlexibleSpace(),
                            new DialogGUIButton("select preset", delegate { GrassColorPresetUI2.callBack = selectedMod.UpdateCallBack; GrassColorPresetUI2.instance.Open(); }, 50, 25, false),
                            new DialogGUIFlexibleSpace(),
                            new DialogGUIButton("Pick Surface Color", delegate {
                selectedMod.grassColor = GrassColorUtils.GetUnderGroundColor(selectedMod);
                selectedMod.ApplySettings();
            }, 80, 25, false)
                            ));


            content.Add(VaiantList);

            content.Add(new DialogGUIVerticalLayout(
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Grass Color : ", KKStyle.whiteLabel),
                                new DialogGUITextInput("", false, 40, delegate(string colorString) { selectedMod.grassColor = ConfigNode.ParseColor(colorString); return(colorString); }, delegate { return(ConfigNode.WriteColor(selectedMod.grassColor)); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("Edit", delegate { ColorSelector.callBack = SetGrassColor;; ColorSelector.selectedColor = selectedMod.grassColor; ColorSelector.Open(); }, 40f, 21.0f, false, KKStyle.whiteLabel)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("NearGrassTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(NearGrassTexture, false, 40, SetNearGrassTexture, delegate { return(GetTextureName("nearGrassTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("nearGrassTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("NearGrassTiling", KKStyle.whiteLabel),
                                new DialogGUITextInput(NearGrassTiling, NearGrassTiling, false, 10, SetNearTile, 25),
                                new DialogGUIToggle(selectedMod.nearGrassTextureGray, "GrayScale", delegate(bool state) { selectedMod.nearGrassTextureGray = state; selectedMod.ApplySettings(); }, 120, 21)),

                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("FarGrassTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(FarGrassTexture, false, 40, SetFarGrassTexture, delegate { return(GetTextureName("farGrassTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("farGrassTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("FarGrassTiling", KKStyle.whiteLabel),
                                new DialogGUITextInput(FarGrassTiling, FarGrassTiling, false, 10, SetFarTile, 25),
                                new DialogGUIToggle(selectedMod.farGrassTextureGray, "GrayScale", delegate(bool state) { selectedMod.farGrassTextureGray = state; selectedMod.ApplySettings(); }, 120, 21)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("FarBlendDistance", KKStyle.whiteLabel),
                                new DialogGUITextInput(BlendDistance, BlendDistance, false, 10, SetBlendDistance, 25)),
                            new DialogGUIHorizontalLayout(

                                new DialogGUILabel("TamarcTexture", KKStyle.whiteLabel),
                                new DialogGUITextInput(TamarcTexture, false, 40, SetTarmacTexture, delegate { return(GetTextureName("tarmacTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("tarmacTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Tarmac Color : ", KKStyle.whiteLabel),
                                new DialogGUITextInput("", false, 40, delegate(string colorString) { selectedMod.tarmacColor = ConfigNode.ParseColor(colorString); return(colorString); }, delegate { return(ConfigNode.WriteColor(selectedMod.tarmacColor)); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("Edit", delegate { ColorSelector.callBack = SetTarmacColor;; ColorSelector.selectedColor = selectedMod.tarmacColor; ColorSelector.Open(); }, 40f, 21.0f, false, KKStyle.whiteLabel)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Tarmac Tiling: U: ", KKStyle.whiteLabel),
                                new DialogGUITextInput("0", false, 10, SetTarmacUStr, GetTarmacUStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25),
                                new DialogGUILabel("V: ", KKStyle.whiteLabel),
                                new DialogGUITextInput("0", false, 10, SetTarmacVStr, GetTarmacVStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUIToggle(selectedMod.tarmacTileRandom, "Tarmac Random", delegate(bool state) { selectedMod.tarmacTileRandom = state; selectedMod.ApplySettings(); }, 120, 21),
                                new DialogGUIToggle(selectedMod.tarmacTextureGray, "Tarmac GrayScale", delegate(bool state) { selectedMod.tarmacTextureGray = state; selectedMod.ApplySettings(); }, 120, 21)),

                            new DialogGUIHorizontalLayout(
                                new DialogGUIButton("  R", ReloadBlendMask, 21f, 21.0f, false, HighLogic.UISkin.label),
                                new DialogGUILabel("BlendMask", KKStyle.whiteLabel),
                                new DialogGUITextInput(BlendMaskTexture, false, 40, SetBlendMaskTexture, delegate { return(GetTextureName("blendMaskTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("blendMaskTextureName", TextureUsage.BlendMask); }, 21f, 21.0f, false, HighLogic.UISkin.label)),

                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Third Texture", KKStyle.whiteLabel),
                                new DialogGUITextInput(ThirdTexture, false, 40, SetThirdTexture, delegate { return(GetTextureName("thirdTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("thirdTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Third Texture Tiling: ", KKStyle.whiteLabel),
                                new DialogGUITextInput(ThirdTextureTiling, ThirdTextureTiling, false, 10, SetThirdTile, 25),
                                new DialogGUIToggle(selectedMod.thirdTextureTileRandom, "Random", delegate(bool state) { selectedMod.thirdTextureTileRandom = state; selectedMod.ApplySettings(); }, 60, 21),
                                new DialogGUIToggle(selectedMod.thirdTextureGray, "Gray", delegate(bool state) { selectedMod.thirdTextureGray = state; selectedMod.ApplySettings(); }, 60, 21)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Third Color : ", KKStyle.whiteLabel),
                                new DialogGUITextInput("", false, 40, delegate(string colorString) { selectedMod.thirdTextureColor = ConfigNode.ParseColor(colorString); return(colorString); }, delegate { return(ConfigNode.WriteColor(selectedMod.thirdTextureColor)); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("Edit", delegate { ColorSelector.callBack = SetThirdColor;; ColorSelector.selectedColor = selectedMod.thirdTextureColor; ColorSelector.Open(); }, 40f, 21.0f, false, KKStyle.whiteLabel)),

                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Fourth Texture", KKStyle.whiteLabel),
                                new DialogGUITextInput(FourthTexture, false, 40, SetFourthTexture, delegate { return(GetTextureName("fourthTextureName")); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("  S", delegate { OpenTextureSelector("fourthTextureName"); }, 21f, 21.0f, false, HighLogic.UISkin.label)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Fourth Texture Tiling: ", KKStyle.whiteLabel),
                                new DialogGUITextInput(FourthTextureTiling, FourthTextureTiling, false, 10, SetFourthTile, 25),
                                new DialogGUIToggle(selectedMod.fourthTextureTileRandom, "Random", delegate(bool state) { selectedMod.fourthTextureTileRandom = state; selectedMod.ApplySettings(); }, 60, 21),
                                new DialogGUIToggle(selectedMod.fourthTextureGray, "Gray", delegate(bool state) { selectedMod.fourthTextureGray = state; selectedMod.ApplySettings(); }, 60, 21)),
                            new DialogGUIHorizontalLayout(
                                new DialogGUILabel("Fourth Color : ", KKStyle.whiteLabel),
                                new DialogGUITextInput("", false, 40, delegate(string colorString) { selectedMod.fourthTextureColor = ConfigNode.ParseColor(colorString); return(colorString); }, delegate { return(ConfigNode.WriteColor(selectedMod.fourthTextureColor)); }, TMPro.TMP_InputField.ContentType.Standard, 25),
                                new DialogGUIButton("Edit", delegate { ColorSelector.callBack = SetFourthColor;; ColorSelector.selectedColor = selectedMod.fourthTextureColor; ColorSelector.Open(); }, 40f, 21.0f, false, KKStyle.whiteLabel))

                            //new DialogGUIHorizontalLayout(
                            //    new DialogGUILabel("Overall Tiling", KKStyle.whiteLabel),
                            //    new DialogGUISlider(GetOffsetTiling, 0, 200f, true, 140, 25, SetOffsetTiling),
                            //    new DialogGUITextInput("0", false, 10, SetOffsetTilingStr, GetOffsetTilingStr, TMPro.TMP_InputField.ContentType.DecimalNumber, 25))

                            ));;
        }