コード例 #1
0
ファイル: TRGui.cs プロジェクト: reesewilson/TextureReplacer
        void windowHandler(int id)
        {
            Reflections  reflections  = Reflections.instance;
            Personaliser personaliser = Personaliser.instance;

            GUILayout.BeginVertical();
            GUILayout.BeginHorizontal();

            GUILayout.BeginVertical(GUILayout.Width(200));

            // Roster area.
            rosterScroll = GUILayout.BeginScrollView(rosterScroll);
            GUILayout.BeginVertical();

            foreach (ProtoCrewMember kerbal in HighLogic.CurrentGame.CrewRoster.Crew)
            {
                switch (kerbal.rosterStatus)
                {
                case ProtoCrewMember.RosterStatus.Assigned:
                    GUI.contentColor = Color.cyan;
                    break;

                case ProtoCrewMember.RosterStatus.Dead:
                    continue;

                case ProtoCrewMember.RosterStatus.Missing:
                    GUI.contentColor = Color.yellow;
                    break;

                default:
                    GUI.contentColor = Color.white;
                    break;
                }

                if (GUILayout.Button(kerbal.name))
                {
                    selectedKerbal = kerbal;
                    selectedClass  = null;
                }
            }

            foreach (ProtoCrewMember kerbal in HighLogic.CurrentGame.CrewRoster.Unowned)
            {
                switch (kerbal.rosterStatus)
                {
                case ProtoCrewMember.RosterStatus.Dead:
                    GUI.contentColor = Color.cyan;
                    break;

                default:
                    continue;
                }

                if (GUILayout.Button(kerbal.name))
                {
                    selectedKerbal = kerbal;
                    selectedClass  = null;
                }
            }

            GUI.contentColor = Color.white;
            GUI.color        = CLASS_COLOUR;

            // Class suits.
            foreach (string clazz in classes)
            {
                if (GUILayout.Button(clazz))
                {
                    selectedKerbal = null;
                    selectedClass  = clazz;
                }
            }

            GUI.color = Color.white;

            GUILayout.EndVertical();
            GUILayout.EndScrollView();

            if (GUILayout.Button("Reset to Defaults"))
            {
                personaliser.resetKerbals();
            }

            GUILayout.EndVertical();

            // Textures.
            Personaliser.Head       defaultHead = personaliser.defaultHead[0];
            Personaliser.Suit       defaultSuit = personaliser.defaultSuit;
            Personaliser.KerbalData kerbalData  = null;
            Personaliser.Head       head        = null;
            Personaliser.Suit       suit        = null;
            int headIndex = -1;
            int suitIndex = -1;

            if (selectedKerbal != null)
            {
                kerbalData  = personaliser.getKerbalData(selectedKerbal);
                defaultHead = personaliser.defaultHead[(int)selectedKerbal.gender];

                head = personaliser.getKerbalHead(selectedKerbal, kerbalData);
                suit = personaliser.getKerbalSuit(selectedKerbal, kerbalData);

                headIndex = personaliser.heads.IndexOf(head);
                suitIndex = personaliser.suits.IndexOf(suit);
            }
            else if (selectedClass != null)
            {
                personaliser.classSuits.TryGetValue(selectedClass, out suit);

                if (suit != null)
                {
                    suitIndex = personaliser.suits.IndexOf(suit);
                }
            }

            GUILayout.Space(10);
            GUILayout.BeginVertical();

            if (head != null)
            {
                GUILayout.Box(head.head, GUILayout.Width(200), GUILayout.Height(200));

                GUILayout.Label(head.name);
            }

            if (suit != null)
            {
                Texture2D suitTex = suit == defaultSuit && kerbalData != null && kerbalData.isVeteran ?
                                    defaultSuit.suitVeteran : (suit.suit ?? defaultSuit.suit);
                Texture2D helmetTex    = suit.helmet ?? defaultSuit.helmet;
                Texture2D evaSuitTex   = suit.evaSuit ?? defaultSuit.evaSuit;
                Texture2D evaHelmetTex = suit.evaHelmet ?? defaultSuit.evaHelmet;

                GUILayout.BeginHorizontal();
                GUILayout.Box(suitTex, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.Space(10);
                GUILayout.Box(helmetTex, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.EndHorizontal();

                GUILayout.Space(10);

                GUILayout.BeginHorizontal();
                GUILayout.Box(evaSuitTex, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.Space(10);
                GUILayout.Box(evaHelmetTex, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.EndHorizontal();

                GUILayout.Label(suit.name);
            }

            GUILayout.EndVertical();
            GUILayout.BeginVertical(GUILayout.Width(120));

            if (kerbalData != null)
            {
                GUILayout.BeginHorizontal();
                GUI.enabled = personaliser.heads.Count != 0;

                if (GUILayout.Button("<"))
                {
                    headIndex = headIndex == -1 ? 0 : headIndex;
                    headIndex = (personaliser.heads.Count + headIndex - 1) % personaliser.heads.Count;

                    kerbalData.head = personaliser.heads[headIndex];
                }
                if (GUILayout.Button(">"))
                {
                    headIndex = (headIndex + 1) % personaliser.heads.Count;

                    kerbalData.head = personaliser.heads[headIndex];
                }

                GUI.enabled = true;
                GUILayout.EndHorizontal();

                GUI.color = kerbalData.head == defaultHead ? SELECTED_COLOUR : Color.white;
                if (GUILayout.Button("Default"))
                {
                    kerbalData.head = defaultHead;
                }

                GUI.color = kerbalData.head == null ? SELECTED_COLOUR : Color.white;
                if (GUILayout.Button("Unset/Generic"))
                {
                    kerbalData.head = null;
                }

                GUI.color = Color.white;
            }

            if (kerbalData != null || selectedClass != null)
            {
                GUILayout.Space(130);

                GUILayout.BeginHorizontal();
                GUI.enabled = personaliser.suits.Count != 0;

                if (GUILayout.Button("<"))
                {
                    suitIndex = suitIndex == -1 ? 0 : suitIndex;
                    suitIndex = (personaliser.suits.Count + suitIndex - 1) % personaliser.suits.Count;

                    if (kerbalData != null)
                    {
                        kerbalData.suit      = personaliser.suits[suitIndex];
                        kerbalData.cabinSuit = null;
                    }
                    else
                    {
                        personaliser.classSuits[selectedClass] = personaliser.suits[suitIndex];
                    }
                }
                if (GUILayout.Button(">"))
                {
                    suitIndex = (suitIndex + 1) % personaliser.suits.Count;

                    if (kerbalData != null)
                    {
                        kerbalData.suit      = personaliser.suits[suitIndex];
                        kerbalData.cabinSuit = null;
                    }
                    else
                    {
                        personaliser.classSuits[selectedClass] = personaliser.suits[suitIndex];
                    }
                }

                GUI.enabled = true;
                GUILayout.EndHorizontal();

                GUI.color = suit == defaultSuit && (kerbalData == null || kerbalData.suit != null) ?
                            SELECTED_COLOUR : Color.white;

                if (GUILayout.Button("Default"))
                {
                    if (kerbalData != null)
                    {
                        kerbalData.suit      = defaultSuit;
                        kerbalData.cabinSuit = null;
                    }
                    else
                    {
                        personaliser.classSuits[selectedClass] = defaultSuit;
                    }
                }

                GUI.color = suit == null || (kerbalData != null && kerbalData.suit == null) ? SELECTED_COLOUR : Color.white;
                if (GUILayout.Button("Unset/Generic"))
                {
                    if (kerbalData != null)
                    {
                        kerbalData.suit      = null;
                        kerbalData.cabinSuit = null;
                    }
                    else
                    {
                        personaliser.classSuits[selectedClass] = null;
                    }
                }

                GUI.color = Color.white;
            }

            GUILayout.EndVertical();
            GUILayout.EndHorizontal();
            GUILayout.Space(10);

            personaliser.isHelmetRemovalEnabled = GUILayout.Toggle(
                personaliser.isHelmetRemovalEnabled, "Remove IVA helmets in safe situations");

            personaliser.isAtmSuitEnabled = GUILayout.Toggle(
                personaliser.isAtmSuitEnabled, "Spawn Kerbals in IVA suits when in breathable atmosphere");

            Reflections.Type reflectionType = reflections.reflectionType;

            GUILayout.BeginHorizontal();
            GUILayout.Label("Reflections", GUILayout.Width(120));
            reflectionType = (Reflections.Type)GUILayout.SelectionGrid((int)reflectionType, REFLECTION_TYPES, 3);
            GUILayout.EndHorizontal();

            if (reflectionType != reflections.reflectionType)
            {
                reflections.setReflectionType(reflectionType);
            }

            GUILayout.EndVertical();
            GUI.DragWindow(new Rect(0, 0, Screen.width, 30));
        }
コード例 #2
0
 public static void Recreate()
 {
     Instance = new Reflections();
 }
コード例 #3
0
ファイル: TRGui.cs プロジェクト: jrodrigv/TextureReplacer
        void WindowHandler(int id)
        {
            Reflections  reflections  = Reflections.Instance;
            Personaliser personaliser = Personaliser.Instance;

            GUILayout.BeginVertical();
            GUILayout.BeginHorizontal();

            GUILayout.BeginVertical(GUILayout.Width(200));

            // Roster area.
            rosterScroll = GUILayout.BeginScrollView(rosterScroll);
            GUILayout.BeginVertical();

            foreach (ProtoCrewMember kerbal in HighLogic.CurrentGame.CrewRoster.Crew)
            {
                switch (kerbal.rosterStatus)
                {
                case ProtoCrewMember.RosterStatus.Assigned:
                    GUI.contentColor = Color.cyan;
                    break;

                case ProtoCrewMember.RosterStatus.Dead:
                    continue;

                case ProtoCrewMember.RosterStatus.Missing:
                    GUI.contentColor = Color.yellow;
                    break;

                default:
                    GUI.contentColor = Color.white;
                    break;
                }

                if (GUILayout.Button(kerbal.name))
                {
                    selectedKerbal = kerbal;
                    selectedClass  = null;
                }
            }

            foreach (ProtoCrewMember kerbal in HighLogic.CurrentGame.CrewRoster.Unowned)
            {
                switch (kerbal.rosterStatus)
                {
                case ProtoCrewMember.RosterStatus.Dead:
                    GUI.contentColor = Color.cyan;
                    break;

                default:
                    continue;
                }

                if (GUILayout.Button(kerbal.name))
                {
                    selectedKerbal = kerbal;
                    selectedClass  = null;
                }
            }

            GUI.contentColor = Color.white;
            GUI.color        = ClassColour;

            // Class suits.
            foreach (string clazz in classes)
            {
                if (GUILayout.Button(clazz))
                {
                    selectedKerbal = null;
                    selectedClass  = clazz;
                }
            }

            GUI.color = Color.white;

            GUILayout.EndVertical();
            GUILayout.EndScrollView();

            if (GUILayout.Button("Reset to Defaults"))
            {
                personaliser.ResetKerbals();
            }

            GUILayout.EndVertical();

            // Textures.
            Skin       defaultSkin = personaliser.DefaultSkin[0];
            Suit       defaultSuit = personaliser.DefaultSuit;
            Appearance appearance  = null;
            Skin       skin        = null;
            Suit       suit        = null;
            int        skinIndex   = -1;
            int        suitIndex   = -1;

            if (selectedKerbal != null)
            {
                if (selectedKerbal.suit == KerbalSuit.Vintage)
                {
                    defaultSuit = personaliser.VintageSuit;
                }

                appearance  = personaliser.GetAppearance(selectedKerbal);
                defaultSkin = personaliser.DefaultSkin[(int)selectedKerbal.gender];

                skin = personaliser.GetKerbalSkin(selectedKerbal, appearance);
                suit = personaliser.GetKerbalSuit(selectedKerbal, appearance);

                skinIndex = personaliser.Skins.IndexOf(skin);
                suitIndex = personaliser.Suits.IndexOf(suit);
            }
            else if (selectedClass != null)
            {
                personaliser.ClassSuits.TryGetValue(selectedClass, out suit);

                if (suit != null)
                {
                    suitIndex = personaliser.Suits.IndexOf(suit);
                }
            }

            GUILayout.Space(10);
            GUILayout.BeginVertical();

            if (skin != null)
            {
                GUILayout.Box(skin.Head, GUILayout.Width(200), GUILayout.Height(200));

                GUILayout.Label(skin.Name);
            }

            if (suit != null)
            {
                Texture2D suitTex = suit == defaultSuit && selectedKerbal != null && selectedKerbal.veteran
          ? suit.IvaSuitVeteran
          : suit.IvaSuit[0];
                Texture2D evaSuitTex = suit.EvaSuit[0] ?? defaultSuit.EvaSuit[0];

                GUILayout.BeginHorizontal();
                GUILayout.Box(suitTex, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.Space(10);
                GUILayout.Box(evaSuitTex, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.EndHorizontal();

                GUILayout.Label(suit.Name);
            }

            GUILayout.EndVertical();
            GUILayout.BeginVertical(GUILayout.Width(120));

            bool isKerbalSelected = appearance != null;
            bool isClassSelected  = selectedClass != null;

            if (isKerbalSelected)
            {
                GUILayout.BeginHorizontal();
                GUI.enabled = personaliser.Skins.Count != 0;

                if (GUILayout.Button("<"))
                {
                    skinIndex = skinIndex == -1 ? 0 : skinIndex;
                    skinIndex = (personaliser.Skins.Count + skinIndex - 1) % personaliser.Skins.Count;

                    appearance.Skin = personaliser.Skins[skinIndex];
                }
                if (GUILayout.Button(">"))
                {
                    skinIndex = (skinIndex + 1) % personaliser.Skins.Count;

                    appearance.Skin = personaliser.Skins[skinIndex];
                }

                GUI.enabled = true;
                GUILayout.EndHorizontal();

                GUI.color = appearance.Skin == defaultSkin ? SelectedColour : Color.white;
                if (GUILayout.Button("Default"))
                {
                    appearance.Skin = defaultSkin;
                }

                GUI.color = appearance.Skin == null ? SelectedColour : Color.white;
                if (GUILayout.Button("Unset/Generic"))
                {
                    appearance.Skin = null;
                }

                GUI.color = Color.white;

                selectedKerbal.veteran = GUILayout.Toggle(selectedKerbal.veteran, "Veteran");
            }

            if (isKerbalSelected || isClassSelected)
            {
                bool isVintage = false;

                if (isKerbalSelected)
                {
                    isVintage = selectedKerbal.suit == KerbalSuit.Vintage;
                    GUILayout.Space(100);
                }

                GUILayout.BeginHorizontal();
                GUI.enabled = personaliser.Suits.Count != 0;

                if (GUILayout.Button("<"))
                {
                    suitIndex = suitIndex == -1 ? 0 : suitIndex;
                    suitIndex = (personaliser.Suits.Count + suitIndex - 1) % personaliser.Suits.Count;

                    if (isClassSelected)
                    {
                        personaliser.ClassSuits[selectedClass] = personaliser.Suits[suitIndex];
                    }
                    else
                    {
                        appearance.Suit = personaliser.Suits[suitIndex];
                    }
                }
                if (GUILayout.Button(">"))
                {
                    suitIndex = (suitIndex + 1) % personaliser.Suits.Count;

                    if (isClassSelected)
                    {
                        personaliser.ClassSuits[selectedClass] = personaliser.Suits[suitIndex];
                    }
                    else
                    {
                        appearance.Suit = personaliser.Suits[suitIndex];
                    }
                }

                GUI.enabled = true;
                GUILayout.EndHorizontal();

                bool hasKerbalGenericSuit = isKerbalSelected && appearance.Suit == null;

                GUI.color = suit == defaultSuit && !hasKerbalGenericSuit ? SelectedColour : Color.white;
                if (GUILayout.Button("Default"))
                {
                    if (isClassSelected)
                    {
                        personaliser.ClassSuits[selectedClass] = defaultSuit;
                    }
                    else
                    {
                        appearance.Suit = defaultSuit;
                    }
                }

                GUI.color = suit == null || hasKerbalGenericSuit ? SelectedColour : Color.white;
                if (GUILayout.Button("Unset/Generic"))
                {
                    if (isClassSelected)
                    {
                        personaliser.ClassSuits[selectedClass] = null;
                    }
                    else
                    {
                        appearance.Suit = null;
                    }
                }

                GUI.color = Color.white;

                if (isKerbalSelected)
                {
                    isVintage           = GUILayout.Toggle(isVintage, "Vintage");
                    selectedKerbal.suit = isVintage ? KerbalSuit.Vintage : KerbalSuit.Default;

                    // Make sure the right kind of default suit is selected.
                    if (appearance.Suit == personaliser.DefaultSuit || appearance.Suit == personaliser.VintageSuit)
                    {
                        appearance.Suit = defaultSuit;
                    }
                }
            }

            GUILayout.EndVertical();
            GUILayout.EndHorizontal();
            GUILayout.Space(5);

            bool enableReflections = reflections.ReflectionType == Reflections.Type.Real;

            enableReflections          = GUILayout.Toggle(enableReflections, "Enable real-time reflections for visors and parts");
            reflections.ReflectionType = enableReflections ? Reflections.Type.Real : Reflections.Type.None;

            bool hideParachuteBackpack = personaliser.HideParachuteBackpack;

            hideParachuteBackpack = GUILayout.Toggle(hideParachuteBackpack, "Hide parachute backpack");
            personaliser.HideParachuteBackpack = hideParachuteBackpack;

            GUILayout.EndVertical();
            GUI.DragWindow(new Rect(0, 0, Screen.width, 30));
        }
コード例 #4
0
        public override void OnStart(StartState state)
        {
            Reflections reflections = Reflections.Instance;

            Shader reflectiveShader = shader.Length == 0 ? null : Shader.Find(shader);
            Color  reflectionColour = Color.white;
            int    updateInterval   = 1;

            Util.Parse(ReflectionColor, ref reflectionColour);
            Util.Parse(colour, ref reflectionColour);
            Util.Parse(interval, ref updateInterval);

            updateInterval = Math.Max(updateInterval, 1);

            List <string> meshNames = Util.SplitConfigValue(meshes).ToList();

            if (MeshesToChange != "all")
            {
                meshNames.AddUniqueRange(Util.SplitConfigValue(MeshesToChange));
            }
            if (reflections.LogReflectiveMeshes)
            {
                log.Print("Part \"{0}\"", part.name);
            }
            if (reflections.ReflectionType == Reflections.Type.None)
            {
                return;
            }

            script = new Reflections.Script(part, updateInterval);

            bool success = false;

            foreach (MeshFilter meshFilter in part.FindModelComponents <MeshFilter>())
            {
                Renderer renderer = meshFilter.GetComponent <Renderer>();
                if (renderer == null)
                {
                    continue;
                }

                Material material = renderer.material;
                if (reflections.LogReflectiveMeshes)
                {
                    log.Print("+ {0} [{1}]", meshFilter.name, material.shader.name);
                }
                if (meshNames.Count == 0 || meshNames.Contains(meshFilter.name))
                {
                    success |= script.Apply(material, reflectiveShader, reflectionColour);
                }
            }

            if (!success)
            {
                if (script != null)
                {
                    script.Destroy();
                    script = null;
                }
                log.Print("Failed to replace any shader on \"{0}\" with its reflective counterpart", part.name);
            }
        }
コード例 #5
0
 public static void Recreate()
 {
     Instance?.Destroy();
     Instance = new Reflections();
 }
コード例 #6
0
        public override void OnStart(StartState state)
        {
            Reflections reflections = Reflections.instance;

            Shader reflectiveShader = shader.Length == 0 ? null : TextureReplacer.GetShader(shader);
            Color  reflectionColour = new Color(0.5f, 0.5f, 0.5f);
            int    updateInterval   = 1;

            Util.parse(ReflectionColor, ref reflectionColour);
            Util.parse(colour, ref reflectionColour);
            Util.parse(interval, ref updateInterval);

            updateInterval = Math.Max(updateInterval, 1);

            List <string> meshNames = Util.splitConfigValue(meshes).ToList();

            if (MeshesToChange != "all")
            {
                meshNames.AddUniqueRange(Util.splitConfigValue(MeshesToChange));
            }

            if (reflections.reflectionType == Reflections.Type.NONE)
            {
                return;
            }
            if (reflections.reflectionType == Reflections.Type.REAL)
            {
                script = new Reflections.Script(part, updateInterval);
            }

            if (reflections.logReflectiveMeshes)
            {
                Util.log("Part \"{0}\"", part.name);
            }

            bool success = false;

            foreach (MeshFilter meshFilter in part.FindModelComponents <MeshFilter>())
            {
                if (meshFilter.GetComponent <Renderer>() == null)
                {
                    continue;
                }

                Material material = meshFilter.GetComponent <Renderer>().material;

                if (reflections.logReflectiveMeshes)
                {
                    Util.log("+ {0} [{1}]", meshFilter.name, material.shader.name);
                }

                if (meshNames.Count == 0 || meshNames.Contains(meshFilter.name))
                {
                    success |= script == null?
                               reflections.applyStatic(material, reflectiveShader, reflectionColour) :
                                   script.apply(material, reflectiveShader, reflectionColour);
                }
            }

            if (!success)
            {
                if (script != null)
                {
                    script.destroy();
                    script = null;
                }

                Util.log("Failed to replace any shader on \"{0}\" with its reflective counterpart", part.name);
            }
        }