From e39bd641229b06cbbad7b32fba111a412b0811e3 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Fri, 3 Nov 2017 19:39:36 +0100 Subject: [PATCH 01/27] use your head --- Heads/Changelog.txt | 3 + .../Heads/Plugins/SigmaReplacementsHeads.dll | Bin 0 -> 25600 bytes .../Plugins/SigmaReplacementsHeads.version | 25 ++ Heads/License.txt | 8 + Heads/README.md | 11 + .../Distribution/SigmaReplacementsHeads.dll | Bin 0 -> 25600 bytes .../SigmaReplacementsHeads/CrewMember.cs | 20 ++ .../SigmaReplacementsHeads/CustomHead.cs | 198 +++++++++++++++ .../SigmaReplacementsHeads/DebugLogger.cs | 51 ++++ .../SigmaReplacementsHeads/Extensions.cs | 145 +++++++++++ .../SigmaReplacementsHeads/HeadInfo.cs | 233 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 12 + .../SigmaReplacementsHeads/SettingsLoader.cs | 46 ++++ .../SigmaReplacementsHeads.csproj | 67 +++++ .../SigmaReplacementsHeads.sln | 25 ++ .../SigmaReplacementsHeads/Triggers.cs | 53 ++++ .../SigmaReplacementsHeads/UserSettings.cs | 63 +++++ .../SigmaReplacementsHeads/Version.cs | 19 ++ 18 files changed, 979 insertions(+) create mode 100644 Heads/Changelog.txt create mode 100644 Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll create mode 100644 Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version create mode 100644 Heads/License.txt create mode 100644 Heads/README.md create mode 100644 Heads/[Source]/Distribution/SigmaReplacementsHeads.dll create mode 100644 Heads/[Source]/SigmaReplacementsHeads/CrewMember.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/DebugLogger.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/Extensions.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/Properties/AssemblyInfo.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj create mode 100644 Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln create mode 100644 Heads/[Source]/SigmaReplacementsHeads/Triggers.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/UserSettings.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/Version.cs diff --git a/Heads/Changelog.txt b/Heads/Changelog.txt new file mode 100644 index 0000000..3729537 --- /dev/null +++ b/Heads/Changelog.txt @@ -0,0 +1,3 @@ +**v0.1.0** + +- First Beta Release diff --git a/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll new file mode 100644 index 0000000000000000000000000000000000000000..ab176d4c49b326844b29a9d756ecf2e8d17b0dc8 GIT binary patch literal 25600 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 literal 0 HcmV?d00001 diff --git a/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version new file mode 100644 index 0000000..4bccda2 --- /dev/null +++ b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version @@ -0,0 +1,25 @@ +{ + "NAME": "Sigma Replacements: Heads", + "URL": "https://raw.githubusercontent.com/Sigma88/Sigma-Replacements/master/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version", + "DOWNLOAD": "http://forum.kerbalspaceprogram.com/index.php?/topic/-0", + "CHANGE_LOG_URL": "https://raw.githubusercontent.com/Sigma88/Sigma-Replacements/master/Heads/Changelog.txt", + "GITHUB": + { + "USERNAME": "Sigma88", + "REPOSITORY": "Sigma-Replacements", + "ALLOW_PRE_RELEASE": false + }, + "VERSION": + { + "MAJOR": 0, + "MINOR": 1, + "PATCH": 0, + "BUILD": 0 + }, + "KSP_VERSION": + { + "MAJOR": 1, + "MINOR": 3, + "PATCH": 1 + } +} diff --git a/Heads/License.txt b/Heads/License.txt new file mode 100644 index 0000000..68a8a80 --- /dev/null +++ b/Heads/License.txt @@ -0,0 +1,8 @@ +Sigma Replacements: Heads by Sigma88 is released under the following license: + + +All Rights Reserved + + +For more info visit the KSP Forum Thread: +http://forum.kerbalspaceprogram.com/index.php?/topic/-0 diff --git a/Heads/README.md b/Heads/README.md new file mode 100644 index 0000000..5e4a66d --- /dev/null +++ b/Heads/README.md @@ -0,0 +1,11 @@ +# Sigma Replacements: Heads + + +**Customizeable Crew Heads** + + +KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/-0/ + +Download Latest Release: https://github.com/Sigma88/Sigma-KerbalReplacements/releases + +Dev version: https://github.com/Sigma88/Sigma-Replacements/tree/Development diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll new file mode 100644 index 0000000000000000000000000000000000000000..ab176d4c49b326844b29a9d756ecf2e8d17b0dc8 GIT binary patch literal 25600 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 literal 0 HcmV?d00001 diff --git a/Heads/[Source]/SigmaReplacementsHeads/CrewMember.cs b/Heads/[Source]/SigmaReplacementsHeads/CrewMember.cs new file mode 100644 index 0000000..2193afe --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/CrewMember.cs @@ -0,0 +1,20 @@ +namespace SigmaReplacements +{ + namespace Heads + { + internal class CrewMember : ProtoCrewMember + { + internal new string name = ""; + + internal CrewMember(KerbalType type, string name) : base(type, name) + { + this.name = name; + this.type = type; + } + + CrewMember(KerbalType type) : base(type) { } + CrewMember(ProtoCrewMember copyOf) : base(copyOf) { } + CrewMember(Game.Modes mode, ConfigNode node, KerbalType crewType = KerbalType.Crew) : base(mode, node, crewType) { } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs new file mode 100644 index 0000000..c1f561f --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs @@ -0,0 +1,198 @@ +using System.Linq; +using UnityEngine; + + +namespace SigmaReplacements +{ + namespace Heads + { + internal class CustomHead : MonoBehaviour + { + // Colors + Color? pupilLeft = null; + Color? pupilRight = null; + Color? eyeballLeft = null; + Color? eyeballRight = null; + Color? upTeeth01 = null; + Color? upTeeth02 = null; + Color? head = null; + Color? hair = null; + + // Textures + Texture pupilLeftTex = null; + Texture pupilRightTex = null; + Texture eyeballLeftTex = null; + Texture eyeballRightTex = null; + Texture upTeeth01Tex = null; + Texture upTeeth02Tex = null; + Texture headTex = null; + Texture hairTex = null; + + // Normals + Texture pupilLeftNrm = null; + Texture pupilRightNrm = null; + Texture eyeballLeftNrm = null; + Texture eyeballRightNrm = null; + Texture upTeeth01Nrm = null; + Texture upTeeth02Nrm = null; + Texture headNrm = null; + Texture hairNrm = null; + + void Start() + { + KerbalEVA kerbalEVA = GetComponent(); + ProtoCrewMember kerbal = kerbalEVA?.part?.protoModuleCrew?.FirstOrDefault(); + if (kerbal == null) kerbal = GetComponent(); + if (kerbal == null) return; + + LoadFor(kerbal); + + ApplyTo(kerbal); + } + + void LoadFor(ProtoCrewMember kerbal) + { + HeadInfo.hash = ""; + int? useChance = null; + + for (int i = 0; i < HeadInfo.DataBase?.Count; i++) + { + HeadInfo info = HeadInfo.DataBase[i].GetFor(kerbal); + + if (info != null) + { + if (info.useChance != 1) + useChance = kerbal.Hash(info.useGameSeed) % 100; + + if (info.useChance == 1 || useChance < info.useChance * 100) + { + // Colors + pupilLeft = pupilLeft ?? info.pupilLeft.Pick(kerbal, info.useGameSeed); + pupilRight = pupilRight ?? info.pupilRight.Pick(kerbal, info.useGameSeed); + eyeballLeft = eyeballLeft ?? info.eyeballLeft.Pick(kerbal, info.useGameSeed); + eyeballRight = eyeballRight ?? info.eyeballRight.Pick(kerbal, info.useGameSeed); + upTeeth01 = upTeeth01 ?? info.upTeeth01.Pick(kerbal, info.useGameSeed); + upTeeth02 = upTeeth02 ?? info.upTeeth02.Pick(kerbal, info.useGameSeed); + head = head ?? info.head.Pick(kerbal, info.useGameSeed); + hair = hair ?? info.hair.Pick(kerbal, info.useGameSeed); + + // Textures + pupilLeftTex = pupilLeftTex ?? info.pupilLeftTex.Pick(kerbal, info.useGameSeed); + pupilRightTex = pupilRightTex ?? info.pupilRightTex.Pick(kerbal, info.useGameSeed); + eyeballLeftTex = eyeballLeftTex ?? info.eyeballLeftTex.Pick(kerbal, info.useGameSeed); + eyeballRightTex = eyeballRightTex ?? info.eyeballRightTex.Pick(kerbal, info.useGameSeed); + upTeeth01Tex = upTeeth01Tex ?? info.upTeeth01Tex.Pick(kerbal, info.useGameSeed); + upTeeth02Tex = upTeeth02Tex ?? info.upTeeth02Tex.Pick(kerbal, info.useGameSeed); + headTex = headTex ?? info.headTex.Pick(kerbal, info.useGameSeed); + hairTex = hairTex ?? info.hairTex.Pick(kerbal, info.useGameSeed); + + // Normals + pupilLeftNrm = pupilLeftNrm ?? info.pupilLeftNrm.Pick(kerbal, info.useGameSeed); + pupilRightNrm = pupilRightNrm ?? info.pupilRightNrm.Pick(kerbal, info.useGameSeed); + eyeballLeftNrm = eyeballLeftNrm ?? info.eyeballLeftNrm.Pick(kerbal, info.useGameSeed); + eyeballRightNrm = eyeballRightNrm ?? info.eyeballRightNrm.Pick(kerbal, info.useGameSeed); + upTeeth01Nrm = upTeeth01Nrm ?? info.upTeeth01Nrm.Pick(kerbal, info.useGameSeed); + upTeeth02Nrm = upTeeth02Nrm ?? info.upTeeth02Nrm.Pick(kerbal, info.useGameSeed); + headNrm = headNrm ?? info.headNrm.Pick(kerbal, info.useGameSeed); + hairNrm = hairNrm ?? info.hairNrm.Pick(kerbal, info.useGameSeed); + } + } + } + } + + void ApplyTo(ProtoCrewMember kerbal) + { + Renderer[] renderers = GetComponentsInChildren(); + + for (int i = 0; i < renderers?.Length; i++) + { + string name = renderers[i]?.name; + Material material = renderers[i]?.material; + if (material == null) continue; + + if (name == "pupilLeft") + { + if (pupilLeft != null) + { + material.color = (Color)pupilLeft; + } + if (pupilLeftTex != null) + material.mainTexture = pupilLeftTex; + if (pupilLeftNrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", pupilLeftNrm); + } + + if (name == "pupilRight") + { + if (pupilRight != null) + material.color = (Color)pupilRight; + if (pupilRightTex != null) + material.mainTexture = pupilRightTex; + if (pupilRightNrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", pupilRightNrm); + } + + if (name == "eyeballLeft") + { + if (eyeballLeft != null) + material.color = (Color)eyeballLeft; + if (eyeballLeftTex != null) + material.mainTexture = eyeballLeftTex; + if (eyeballLeftNrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", eyeballLeftNrm); + } + + if (name == "eyeballRight") + { + if (eyeballRight != null) + material.color = (Color)eyeballRight; + if (eyeballRightTex != null) + material.mainTexture = eyeballRightTex; + if (eyeballRightNrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", eyeballRightNrm); + } + + if (name == "upTeeth01" || name == "downTeeth01") + { + if (upTeeth01 != null) + material.color = (Color)upTeeth01; + if (upTeeth01Tex != null) + material.mainTexture = upTeeth01Tex; + if (upTeeth01Nrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", upTeeth01Nrm); + } + + if (name == "upTeeth02" || name == "upTeeth01") + { + if (upTeeth02 != null) + material.color = (Color)upTeeth02; + if (upTeeth02Tex != null) + material.mainTexture = upTeeth02Tex; + if (upTeeth02Nrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", upTeeth02Nrm); + } + + if (name == "headMesh01" || name == "headMesh") + { + if (head != null) + material.color = (Color)head; + if (headTex != null) + material.mainTexture = headTex; + if (headNrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", headNrm); + } + + if (name == "ponytail") + { + if (hair != null) + material.color = (Color)hair; + if (hairTex != null) + material.mainTexture = hairTex; + if (hairNrm != null && material.HasProperty("_BumpMap")) + material.SetTexture("_BumpMap", hairNrm); + } + } + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/DebugLogger.cs b/Heads/[Source]/SigmaReplacementsHeads/DebugLogger.cs new file mode 100644 index 0000000..cab95b5 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/DebugLogger.cs @@ -0,0 +1,51 @@ +using UnityEngine; + + +namespace SigmaReplacements +{ + internal static class Debug + { + internal static bool debug = false; + internal static string Tag = "[SigmaLog SR]"; + + internal static void Log(string message) + { + if (debug) + { + UnityEngine.Debug.Log(Tag + ": " + message); + } + } + + internal static void Log(string Method, string message) + { + if (debug) + { + UnityEngine.Debug.Log(Tag + " " + Method + ": " + message); + } + } + } + + [KSPAddon(KSPAddon.Startup.MainMenu, true)] + class DebugWarning : MonoBehaviour + { + void Start() + { + if (Debug.debug) + { + PopupDialog.SpawnPopupDialog + ( + new Vector2(0.5f, 0.5f), + new Vector2(0.5f, 0.5f), + UserSettings.nodeName, + UserSettings.nodeName + " Warning", + "\nDebug Spam is activated.\n\n" + + "This feature will greatly affect performance:\n" + + "use it only for debugging purposes.", + "OK", + true, + UISkinManager.GetSkin("MainMenuSkin") + ); + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs new file mode 100644 index 0000000..244c040 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; +using KSP.UI; +using KSP.UI.Screens; +using KSP.UI.TooltipTypes; + + +namespace SigmaReplacements +{ + namespace Heads + { + internal static class Extensions + { + internal static Texture Pick(this List list, ProtoCrewMember kerbal, bool useGameSeed) + { + if (list.Count == 1) + return list[0]; + else if (list.Count > 1) + return list[kerbal.Hash(useGameSeed) % list.Count]; + else + return null; + } + + internal static Color? Pick(this List list, ProtoCrewMember kerbal, bool useGameSeed) + { + if (list.Count == 1) + return list[0]; + else if (list.Count > 1) + return list[kerbal.Hash(useGameSeed) % list.Count]; + else + return null; + } + + internal static int Hash(this ProtoCrewMember kerbal, bool useGameSeed) + { + string hash = HeadInfo.hash; + + if (string.IsNullOrEmpty(hash)) hash = kerbal.name; + + int h = Math.Abs(hash.GetHashCode()); + + if (useGameSeed) h += Math.Abs(HighLogic.CurrentGame.Seed); + + HeadInfo.hash = h.ToString(); + + return h; + } + + internal static int crewLimit(this AstronautComplex complex) + { + FieldInfo crewLimit = typeof(AstronautComplex).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(k => k.Name == "crewLimit"); + + try + { + return (int)crewLimit.GetValue(complex); + } + catch + { + return int.MaxValue; + } + } + + internal static CrewListItem crewListItem(this ProtoCrewMember kerbal) + { + FieldInfo crew = typeof(CrewListItem).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(k => k.FieldType == typeof(ProtoCrewMember)); + Debug.Log("Kerbal.crewListItem", "Kerbal reflection = " + crew); + AstronautComplex ac = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + Debug.Log("Kerbal.crewListItem", "AstronautComplex = " + ac); + if (crew == null || ac == null) return null; + + UIList[] list = new[] { ac?.ScrollListApplicants, ac?.ScrollListAssigned, ac?.ScrollListAvailable, ac?.ScrollListKia }; + CrewListItem item = null; + + for (int i = 0; i < list?.Length; i++) + { + item = list[i]?.GetUiListItems()?.FirstOrDefault(k => crew.GetValue(k.GetComponent()) == kerbal)?.GetComponent(); + if (item != null) break; + } + + Debug.Log("Kerbal.crewListItem", "Item = " + item); + return item; + } + + internal static TooltipController_CrewAC GetTooltip(this CrewListItem listItem) + { + return listItem?.GetComponent(); + } + + internal static string PrintFor(this string s, ProtoCrewMember kerbal) + { + return s + .Replace("&br;", "\n") + .Replace("&name;", kerbal.name) + .Replace("&trait;", kerbal.trait) + .Replace("&seed;", "" + HighLogic.CurrentGame.Seed) + .Replace("&visited;", "" + (kerbal?.careerLog?.Entries?.Select(e => e.target)?.Where(t => !string.IsNullOrEmpty(t))?.Distinct()?.Count() ?? 0)) + .Replace("&missions;", "" + (kerbal?.careerLog?.Entries?.Select(e => e.flight)?.Distinct()?.Count() ?? 0)) + .GetHashColor(); + } + + internal static string GetHashColor(this string s) + { + int start = 0; + + while (s.Substring(start).Contains("&Color")) + { + start = s.IndexOf("&Color"); + int end = s.Substring(start).IndexOf(";") + 1; + if (end > 9) + { + int add = 0; + switch (s.Substring(start + 6, 2)) + { + case "Lo": + break; + case "Hi": + add = 80; + break; + default: + start++; + continue; + } + string text = s.Substring(start, end); + int hash = Math.Abs(text.GetHashCode()); + string color = "#"; + for (int i = 0; i < 3; i++) + { + color += (hash % 176 + add).ToString("X"); + hash = Math.Abs(hash.ToString().GetHashCode()); + } + s = s.Replace(text, ""); + } + else + { + continue; + } + } + return s; + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs new file mode 100644 index 0000000..472fabc --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs @@ -0,0 +1,233 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Gender = ProtoCrewMember.Gender; +using Type = ProtoCrewMember.KerbalType; + + +namespace SigmaReplacements +{ + namespace Heads + { + internal class HeadInfo + { + // Static + internal static string hash = ""; + internal static List List = new List(); + internal static List DataBase = new List(); + + // Identifiers + internal string name = null; + + // Requirements + internal bool useGameSeed = false; + internal float useChance = 1; + Type? rosterStatus = null; + Gender? gender = null; + string[] trait = null; + bool? veteran = null; + bool? isBadass = null; + int minLevel = 0; + int maxLevel = 5; + float minCourage = 0; + float maxCourage = 1; + float minStupidity = 0; + float maxStupidity = 1; + + // Colors Lists + internal List pupilLeft = new List(); + internal List pupilRight = new List(); + internal List eyeballLeft = new List(); + internal List eyeballRight = new List(); + internal List upTeeth01 = new List(); + internal List upTeeth02 = new List(); + internal List head = new List(); + internal List hair = new List(); + + // Textures Lists + internal List pupilLeftTex = new List(); + internal List pupilRightTex = new List(); + internal List eyeballLeftTex = new List(); + internal List eyeballRightTex = new List(); + internal List upTeeth01Tex = new List(); + internal List upTeeth02Tex = new List(); + internal List headTex = new List(); + internal List hairTex = new List(); + + // Normals Lists + internal List pupilLeftNrm = new List(); + internal List pupilRightNrm = new List(); + internal List eyeballLeftNrm = new List(); + internal List eyeballRightNrm = new List(); + internal List upTeeth01Nrm = new List(); + internal List upTeeth02Nrm = new List(); + internal List headNrm = new List(); + internal List hairNrm = new List(); + + + // Get + internal HeadInfo GetFor(ProtoCrewMember kerbal) + { + if (name == null || name == kerbal.name) + { + Debug.Log("HeadInfo.GetFor", "Matched name = " + name + " to kerbal name = " + kerbal.name); + if (rosterStatus == null || rosterStatus == kerbal.type) + { + Debug.Log("HeadInfo.GetFor", "Matched rosterStatus = " + rosterStatus + " to kerbal rosterStatus = " + kerbal.type); + if (gender == null || gender == kerbal.gender) + { + Debug.Log("HeadInfo.GetFor", "Matched gender = " + gender + " to kerbal gender = " + kerbal.gender); + if (trait == null || trait.Contains(kerbal.trait)) + { + Debug.Log("HeadInfo.GetFor", "Matched trait = " + trait + " to kerbal trait = " + kerbal.trait); + if (veteran == null || veteran == kerbal.veteran) + { + Debug.Log("HeadInfo.GetFor", "Matched veteran = " + veteran + " to kerbal veteran = " + kerbal.veteran); + if (isBadass == null || isBadass == kerbal.isBadass) + { + Debug.Log("HeadInfo.GetFor", "Matched isBadass = " + isBadass + " to kerbal isBadass = " + kerbal.isBadass); + if (minLevel <= kerbal.experienceLevel && maxLevel >= kerbal.experienceLevel) + { + Debug.Log("HeadInfo.GetFor", "Matched minLevel = " + minLevel + ", maxLevel = " + maxLevel + " to kerbal level = " + kerbal.experienceLevel); + if (minCourage <= kerbal.courage && maxCourage >= kerbal.courage) + { + Debug.Log("HeadInfo.GetFor", "Matched minCourage = " + minCourage + ", maxCourage = " + maxCourage + " to kerbal courage = " + kerbal.courage); + if (minStupidity <= kerbal.stupidity && maxStupidity >= kerbal.stupidity) + { + Debug.Log("HeadInfo.GetFor", "Matched minStupidity = " + minStupidity + ", maxStupidity = " + maxStupidity + " to kerbal stupidity = " + kerbal.stupidity); + Debug.Log("Information.GetText", "Return this HeadInfo"); + return this; + } + } + } + } + } + } + } + } + } + + Debug.Log("Information.GetText", "Return null"); + return null; + } + + + // New HeadInfo + internal HeadInfo(ConfigNode requirements, ConfigNode info) + { + // Parse HeadInfo Requirements + useGameSeed = Parse(requirements.GetValue("useGameSeed"), useGameSeed); + useChance = Parse(requirements.GetValue("useChance"), useChance); + name = requirements.GetValue("name"); + rosterStatus = Parse(requirements.GetValue("rosterStatus"), rosterStatus); + gender = Parse(requirements.GetValue("gender"), gender); + trait = requirements.HasValue("trait") ? requirements.GetValues("trait") : null; + veteran = Parse(requirements.GetValue("veteran"), veteran); + isBadass = Parse(requirements.GetValue("isBadass"), isBadass); + minLevel = Parse(requirements.GetValue("minLevel"), minLevel); + maxLevel = Parse(requirements.GetValue("maxLevel"), maxLevel); + minCourage = Parse(requirements.GetValue("minCourage"), minCourage); + maxCourage = Parse(requirements.GetValue("maxCourage"), maxCourage); + minStupidity = Parse(requirements.GetValue("minStupidity"), minStupidity); + maxStupidity = Parse(requirements.GetValue("maxStupidity"), maxStupidity); + + + // Parse HeadInfo Colors + pupilLeft = Parse(info.GetValues("pupilLeft"), pupilLeft); + pupilRight = Parse(info.GetValues("pupilRight"), pupilRight); + eyeballLeft = Parse(info.GetValues("eyeballLeft"), eyeballLeft); + eyeballRight = Parse(info.GetValues("eyeballRight"), eyeballRight); + upTeeth01 = Parse(info.GetValues("upTeeth01"), upTeeth01); + upTeeth02 = Parse(info.GetValues("upTeeth02"), upTeeth02); + head = Parse(info.GetValues("head"), head); + hair = Parse(info.GetValues("hair"), hair); + + // Parse HeadInfo Textures + pupilLeftTex = Parse(info.GetValues("pupilLeftTex"), pupilLeftTex); + pupilRightTex = Parse(info.GetValues("pupilRightTex"), pupilRightTex); + eyeballLeftTex = Parse(info.GetValues("eyeballLeftTex"), eyeballLeftTex); + eyeballRightTex = Parse(info.GetValues("eyeballRightTex"), eyeballRightTex); + upTeeth01Tex = Parse(info.GetValues("upTeeth01Tex"), upTeeth01Tex); + upTeeth02Tex = Parse(info.GetValues("upTeeth02Tex"), upTeeth02Tex); + headTex = Parse(info.GetValues("headTex"), headTex); + hairTex = Parse(info.GetValues("hairTex"), hairTex); + + // Parse HeadInfo Normals + pupilLeftNrm = Parse(info.GetValues("pupilLeftNrm"), pupilLeftNrm); + pupilRightNrm = Parse(info.GetValues("pupilRightNrm"), pupilRightNrm); + eyeballLeftNrm = Parse(info.GetValues("eyeballLeftNrm"), eyeballLeftNrm); + eyeballRightNrm = Parse(info.GetValues("eyeballRightNrm"), eyeballRightNrm); + upTeeth01Nrm = Parse(info.GetValues("upTeeth01Nrm"), upTeeth01Nrm); + upTeeth02Nrm = Parse(info.GetValues("upTeeth02Nrm"), upTeeth02Nrm); + headNrm = Parse(info.GetValues("headNrm"), headNrm); + hairNrm = Parse(info.GetValues("hairNrm"), hairNrm); + } + + + // Parsers + float Parse(string s, float defaultValue) { return float.TryParse(s, out float f) ? f : defaultValue; } + float? Parse(string s, float? defaultValue) { return float.TryParse(s, out float f) ? f : defaultValue; } + bool Parse(string s, bool defaultValue) { return bool.TryParse(s, out bool b) ? b : defaultValue; } + bool? Parse(string s, bool? defaultValue) { return bool.TryParse(s, out bool b) ? b : defaultValue; } + int Parse(string s, int defaultValue) { return int.TryParse(s, out int b) ? b : defaultValue; } + int? Parse(string s, int? defaultValue) { return int.TryParse(s, out int b) ? b : defaultValue; } + + Type? Parse(string s, Type? defaultValue) + { + try { return (Type)Enum.Parse(typeof(Type), s); } + catch { return defaultValue; } + } + + Gender? Parse(string s, Gender? defaultValue) + { + try { return (Gender)Enum.Parse(typeof(Gender), s); } + catch { return defaultValue; } + } + + Texture Parse(string s, Texture defaultValue) + { + return Resources.FindObjectsOfTypeAll().FirstOrDefault(t => t.name == s) ?? defaultValue; + } + + List Parse(string[] s, List defaultValue) + { + for (int i = 0; i < s.Length; i++) + { + Texture tex = null; + tex = Parse(s[i], tex); + if (tex != null && !defaultValue.Contains(tex)) + defaultValue.Add(tex); + } + return defaultValue; + } + + Color? Parse(string s, Color? defaultValue) + { + try { return ConfigNode.ParseColor(s); } + catch { return defaultValue; } + } + + List Parse(string[] s, List defaultValue) + { + for (int i = 0; i < s.Length; i++) + { + Color? col = null; + col = Parse(s[i], col); + if (!defaultValue.Contains((Color)col)) + defaultValue.Add((Color)col); + } + + return defaultValue; + } + + + // Order DataBase + internal static void OrderDB() + { + DataBase.AddRange(List.Where(h => !string.IsNullOrEmpty(h?.name))); + DataBase.AddRange(List.Where(h => h != null && string.IsNullOrEmpty(h?.name))); + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/Properties/AssemblyInfo.cs b/Heads/[Source]/SigmaReplacementsHeads/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3695920 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/Properties/AssemblyInfo.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +[assembly: AssemblyTitle("SigmaReplacementsHeads")] +[assembly: AssemblyDescription("Sigma Replacements: Heads")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Sigma88")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Copyright (C) Sigma88 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: KSPAssembly("SigmaReplacementsHeads", 1, 0)] +[assembly: AssemblyVersion("1.0.0")] diff --git a/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs b/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs new file mode 100644 index 0000000..d6d4214 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using System.Collections.Generic; + + +namespace SigmaReplacements +{ + [KSPAddon(KSPAddon.Startup.MainMenu, true)] + class SettingsLoader : MonoBehaviour + { + void Start() + { + // Debug Spam + if (bool.TryParse(UserSettings.ConfigNode?.GetValue("debug"), out bool debug) && debug) Debug.debug = true; + } + } + + namespace Heads + { + [KSPAddon(KSPAddon.Startup.MainMenu, true)] + class SettingsLoader : MonoBehaviour + { + void Start() + { + // User Settings + ConfigNode[] InfoNodes = UserSettings.ConfigNode.GetNodes("Kerbal"); + + for (int i = 0; i < InfoNodes?.Length; i++) + { + ConfigNode[] requirements = InfoNodes[i].GetNodes("Requirements"); + ConfigNode head = InfoNodes[i].GetNode("Head"); + + if (requirements.Length == 0) + requirements = new[] { new ConfigNode() }; + + for (int j = 0; j < requirements.Length; j++) + { + HeadInfo.List.Add(new HeadInfo(requirements[j], head)); + } + } + + if (HeadInfo.List?.Count > 0) + HeadInfo.OrderDB(); + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj new file mode 100644 index 0000000..3ec368b --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj @@ -0,0 +1,67 @@ + + + + + Debug + AnyCPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC} + Library + Properties + SigmaReplacements.Heads + SigmaReplacementsHeads + v3.5 + 512 + + + + true + full + false + ..\Distribution\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + False + ..\..\..\[References]\KerbalSpaceProgram\Assembly-CSharp.dll + + + False + ..\..\..\[References]\KerbalSpaceProgram\UnityEngine.dll + + + False + ..\..\..\[References]\KerbalSpaceProgram\UnityEngine.UI.dll + + + + + \ No newline at end of file diff --git a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln new file mode 100644 index 0000000..4c82774 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SigmaReplacementsHeads", "SigmaReplacementsHeads.csproj", "{B3769F47-5A16-43C9-995F-1B3B15BE97CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E50D5E74-B8EE-48C9-9D22-5FCF86BB4E44} + EndGlobalSection +EndGlobal diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs new file mode 100644 index 0000000..d17abb3 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -0,0 +1,53 @@ +using System.Linq; +using UnityEngine; +using KSP.UI.Screens; + + +namespace SigmaReplacements +{ + namespace Heads + { + [KSPAddon(KSPAddon.Startup.MainMenu, false)] + class MainMenuTrigger : MonoBehaviour + {/* + void Awake() + { + Settings.menuVets = (new[] { Settings.menuVet2, Settings.menuVet3, Settings.menuVet1 }).ToList(); + + var orbitScene = Resources.FindObjectsOfTypeAll().FirstOrDefault(o => o.name == "OrbitScene"); + + var Kerbals = orbitScene.GetChild("Kerbals"); + + foreach (Transform child in Kerbals.transform) + { + child.gameObject.AddComponent(); + } + }*/ + } + + [KSPAddon(KSPAddon.Startup.Flight, false)] + class FlightTriggers : MonoBehaviour + { + void Start() + { + GameEvents.onCrewOnEva.Add(OnCrewOnEva); + Add(); + } + + void OnCrewOnEva(GameEvents.FromToAction action) + { + Add(); + } + + void Add() + { + KerbalEVA[] kerbals = Resources.FindObjectsOfTypeAll(); + + for (int i = 0; i < kerbals.Length; i++) + { + kerbals[i].gameObject.AddComponent(); + } + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/UserSettings.cs b/Heads/[Source]/SigmaReplacementsHeads/UserSettings.cs new file mode 100644 index 0000000..72cf311 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/UserSettings.cs @@ -0,0 +1,63 @@ +using System.IO; +using System.Linq; +using System.Reflection; +using UnityEngine; + + +namespace SigmaReplacements +{ + [KSPAddon(KSPAddon.Startup.Instantly, true)] + internal class UserSettings : MonoBehaviour + { + internal static ConfigNode ConfigNode + { + get + { + return GameDatabase.Instance?.GetConfigs(nodeName)?.FirstOrDefault(n => n.url == (folder.Substring(9) + file + "/" + nodeName))?.config; + } + } + + static string folder = "GameData/Sigma/Replacements/"; + static string file = "Settings"; + internal static string nodeName = "SigmaReplacements"; + + void Awake() + { + string path = Assembly.GetExecutingAssembly().Location.Replace('\\', '/'); + while (path.Substring(1).Contains("GameData/")) + path = path.Substring(1 + path.Substring(1).IndexOf("GameData/")); + + if (!Directory.Exists(folder)) + { + UnityEngine.Debug.Log(Debug.Tag + " WARNING: Missing folder => " + folder); + return; + } + + if (!File.Exists(folder + file + ".cfg")) + { + UnityEngine.Debug.Log(Debug.Tag + " WARNING: Missing file => " + folder + file + ".cfg"); + + File.WriteAllLines(folder + file + ".cfg", new[] { nodeName + " {}" }); + return; + } + + if (ConfigNode.Load(folder + file + ".cfg")?.HasNode(nodeName) != true) + { + UnityEngine.Debug.Log(Debug.Tag + " WARNING: Missing node => " + folder + file + "/" + nodeName); + + File.AppendAllText(folder + file + ".cfg", "\r\n" + nodeName + " {}"); + } + } + + void Start() + { + var configs = GameDatabase.Instance.GetConfigs(nodeName); + + for (int i = 0; i < configs?.Length; i++) + { + if (configs[i].url != (folder.Substring(9) + file + "/" + nodeName)) + configs[i].parent.configs.Remove(configs[i]); + } + } + } +} diff --git a/Heads/[Source]/SigmaReplacementsHeads/Version.cs b/Heads/[Source]/SigmaReplacementsHeads/Version.cs new file mode 100644 index 0000000..2c7b6f2 --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/Version.cs @@ -0,0 +1,19 @@ +using UnityEngine; + + +namespace SigmaReplacements +{ + namespace Heads + { + [KSPAddon(KSPAddon.Startup.Instantly, true)] + public class Version : MonoBehaviour + { + public static readonly System.Version number = new System.Version("0.1.0"); + + void Awake() + { + UnityEngine.Debug.Log("[SigmaLog] Version Check: Sigma Replacements: Heads v" + number); + } + } + } +} From 478ec7fae793f1dd1a614db79e4b91244a9b8e71 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Fri, 3 Nov 2017 19:41:35 +0100 Subject: [PATCH 02/27] readme --- Heads/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Heads/README.md b/Heads/README.md index 5e4a66d..8dd9451 100644 --- a/Heads/README.md +++ b/Heads/README.md @@ -8,4 +8,4 @@ KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/-0/ Download Latest Release: https://github.com/Sigma88/Sigma-KerbalReplacements/releases -Dev version: https://github.com/Sigma88/Sigma-Replacements/tree/Development +Dev version: https://github.com/Sigma88/Sigma-Replacements/tree/Heads From 2c505dfe133d966ecb4edf739cbf1feb4be8405e Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 03:50:34 +0100 Subject: [PATCH 03/27] ready for testing --- .../Distribution/SigmaReplacementsHeads.dll | Bin 25600 -> 29696 bytes .../SigmaReplacementsHeads/CustomHead.cs | 169 +++++++++--------- .../SigmaReplacementsHeads/Extensions.cs | 54 ++++++ .../SigmaReplacementsHeads/HeadInfo.cs | 84 ++++++++- .../SigmaReplacementsHeads/Triggers.cs | 42 ++--- 5 files changed, 239 insertions(+), 110 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index ab176d4c49b326844b29a9d756ecf2e8d17b0dc8..a5f0f09affec6b4b1786efaac47c915e406728d9 100644 GIT binary patch literal 29696 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 literal 25600 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 diff --git a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs index c1f561f..516e7d0 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs @@ -15,6 +15,7 @@ internal class CustomHead : MonoBehaviour Color? eyeballRight = null; Color? upTeeth01 = null; Color? upTeeth02 = null; + Color? tongue = null; Color? head = null; Color? hair = null; @@ -25,6 +26,7 @@ internal class CustomHead : MonoBehaviour Texture eyeballRightTex = null; Texture upTeeth01Tex = null; Texture upTeeth02Tex = null; + Texture tongueTex = null; Texture headTex = null; Texture hairTex = null; @@ -35,14 +37,22 @@ internal class CustomHead : MonoBehaviour Texture eyeballRightNrm = null; Texture upTeeth01Nrm = null; Texture upTeeth02Nrm = null; + Texture tongueNrm = null; Texture headNrm = null; Texture hairNrm = null; void Start() { + UnityEngine.Debug.Log("SigmaLog: START"); + UnityEngine.Debug.Log("SigmaLog: gameObject = " + gameObject); + KerbalEVA kerbalEVA = GetComponent(); ProtoCrewMember kerbal = kerbalEVA?.part?.protoModuleCrew?.FirstOrDefault(); - if (kerbal == null) kerbal = GetComponent(); + UnityEngine.Debug.Log("SigmaLog: kerbal = " + kerbal); + if (kerbal == null) kerbal = GetComponent()?.protoCrewMember; + UnityEngine.Debug.Log("SigmaLog: kerbal = " + kerbal); + if (kerbal == null) kerbal = GetComponent(); + UnityEngine.Debug.Log("SigmaLog: kerbal = " + kerbal); if (kerbal == null) return; LoadFor(kerbal); @@ -58,43 +68,53 @@ void LoadFor(ProtoCrewMember kerbal) for (int i = 0; i < HeadInfo.DataBase?.Count; i++) { HeadInfo info = HeadInfo.DataBase[i].GetFor(kerbal); + string collection = ""; if (info != null) { - if (info.useChance != 1) - useChance = kerbal.Hash(info.useGameSeed) % 100; - - if (info.useChance == 1 || useChance < info.useChance * 100) + if (string.IsNullOrEmpty(collection) || collection == info.collection) { - // Colors - pupilLeft = pupilLeft ?? info.pupilLeft.Pick(kerbal, info.useGameSeed); - pupilRight = pupilRight ?? info.pupilRight.Pick(kerbal, info.useGameSeed); - eyeballLeft = eyeballLeft ?? info.eyeballLeft.Pick(kerbal, info.useGameSeed); - eyeballRight = eyeballRight ?? info.eyeballRight.Pick(kerbal, info.useGameSeed); - upTeeth01 = upTeeth01 ?? info.upTeeth01.Pick(kerbal, info.useGameSeed); - upTeeth02 = upTeeth02 ?? info.upTeeth02.Pick(kerbal, info.useGameSeed); - head = head ?? info.head.Pick(kerbal, info.useGameSeed); - hair = hair ?? info.hair.Pick(kerbal, info.useGameSeed); - - // Textures - pupilLeftTex = pupilLeftTex ?? info.pupilLeftTex.Pick(kerbal, info.useGameSeed); - pupilRightTex = pupilRightTex ?? info.pupilRightTex.Pick(kerbal, info.useGameSeed); - eyeballLeftTex = eyeballLeftTex ?? info.eyeballLeftTex.Pick(kerbal, info.useGameSeed); - eyeballRightTex = eyeballRightTex ?? info.eyeballRightTex.Pick(kerbal, info.useGameSeed); - upTeeth01Tex = upTeeth01Tex ?? info.upTeeth01Tex.Pick(kerbal, info.useGameSeed); - upTeeth02Tex = upTeeth02Tex ?? info.upTeeth02Tex.Pick(kerbal, info.useGameSeed); - headTex = headTex ?? info.headTex.Pick(kerbal, info.useGameSeed); - hairTex = hairTex ?? info.hairTex.Pick(kerbal, info.useGameSeed); - - // Normals - pupilLeftNrm = pupilLeftNrm ?? info.pupilLeftNrm.Pick(kerbal, info.useGameSeed); - pupilRightNrm = pupilRightNrm ?? info.pupilRightNrm.Pick(kerbal, info.useGameSeed); - eyeballLeftNrm = eyeballLeftNrm ?? info.eyeballLeftNrm.Pick(kerbal, info.useGameSeed); - eyeballRightNrm = eyeballRightNrm ?? info.eyeballRightNrm.Pick(kerbal, info.useGameSeed); - upTeeth01Nrm = upTeeth01Nrm ?? info.upTeeth01Nrm.Pick(kerbal, info.useGameSeed); - upTeeth02Nrm = upTeeth02Nrm ?? info.upTeeth02Nrm.Pick(kerbal, info.useGameSeed); - headNrm = headNrm ?? info.headNrm.Pick(kerbal, info.useGameSeed); - hairNrm = hairNrm ?? info.hairNrm.Pick(kerbal, info.useGameSeed); + if (info.useChance != 1) + useChance = kerbal.Hash(info.useGameSeed) % 100; + + if (info.useChance == 1 || useChance < info.useChance * 100) + { + // Collection + collection = info.collection; + + // Colors + pupilLeft = pupilLeft ?? info.pupilLeft.Pick(kerbal, info.useGameSeed); + pupilRight = pupilRight ?? info.pupilRight.At(pupilLeft, info.pupilLeft) ?? info.pupilRight.Pick(kerbal, info.useGameSeed); + eyeballLeft = eyeballLeft ?? info.eyeballLeft.Pick(kerbal, info.useGameSeed); + eyeballRight = eyeballRight ?? info.eyeballRight.At(eyeballLeft, info.eyeballLeft) ?? info.eyeballRight.Pick(kerbal, info.useGameSeed); + upTeeth01 = upTeeth01 ?? info.upTeeth01.Pick(kerbal, info.useGameSeed); + upTeeth02 = upTeeth02 ?? info.upTeeth02.At(upTeeth01, info.upTeeth01) ?? info.upTeeth02.Pick(kerbal, info.useGameSeed); + tongue = tongue ?? info.tongue.Pick(kerbal, info.useGameSeed); + head = head ?? info.head.Pick(kerbal, info.useGameSeed); + hair = hair ?? info.hair.At(head, info.head) ?? info.hair.Pick(kerbal, info.useGameSeed); + + // Textures + pupilLeftTex = pupilLeftTex ?? info.pupilLeftTex.Pick(kerbal, info.useGameSeed); + pupilRightTex = pupilRightTex ?? info.pupilRightTex.At(pupilLeftTex, info.pupilLeftTex) ?? info.pupilRightTex.Pick(kerbal, info.useGameSeed); + eyeballLeftTex = eyeballLeftTex ?? info.eyeballLeftTex.Pick(kerbal, info.useGameSeed); + eyeballRightTex = eyeballRightTex ?? info.eyeballRightTex.At(eyeballLeftTex, info.eyeballLeftTex) ?? info.eyeballRightTex.Pick(kerbal, info.useGameSeed); + upTeeth01Tex = upTeeth01Tex ?? info.upTeeth01Tex.Pick(kerbal, info.useGameSeed); + upTeeth02Tex = upTeeth02Tex ?? info.upTeeth02Tex.At(upTeeth01Tex, info.upTeeth01Tex) ?? info.upTeeth02Tex.Pick(kerbal, info.useGameSeed); + tongueTex = tongueTex ?? info.tongueTex.Pick(kerbal, info.useGameSeed); + headTex = headTex ?? info.headTex.Pick(kerbal, info.useGameSeed); + hairTex = hairTex ?? info.hairTex.At(headTex, info.headTex) ?? info.hairTex.Pick(kerbal, info.useGameSeed); + + // Normals + pupilLeftNrm = pupilLeftNrm ?? info.pupilLeftNrm.Pick(kerbal, info.useGameSeed); + pupilRightNrm = pupilRightNrm ?? info.pupilRightNrm.At(pupilLeftNrm, info.pupilLeftNrm) ?? info.pupilRightNrm.Pick(kerbal, info.useGameSeed); + eyeballLeftNrm = eyeballLeftNrm ?? info.eyeballLeftNrm.Pick(kerbal, info.useGameSeed); + eyeballRightNrm = eyeballRightNrm ?? info.eyeballRightNrm.At(eyeballLeftNrm, info.eyeballLeftNrm) ?? info.eyeballRightNrm.Pick(kerbal, info.useGameSeed); + upTeeth01Nrm = upTeeth01Nrm ?? info.upTeeth01Nrm.Pick(kerbal, info.useGameSeed); + upTeeth02Nrm = upTeeth02Nrm ?? info.upTeeth02Nrm.At(upTeeth01Nrm, info.upTeeth01Nrm) ?? info.upTeeth02Nrm.Pick(kerbal, info.useGameSeed); + tongueNrm = tongueNrm ?? info.tongueNrm.Pick(kerbal, info.useGameSeed); + headNrm = headNrm ?? info.headNrm.Pick(kerbal, info.useGameSeed); + hairNrm = hairNrm ?? info.hairNrm.At(headNrm, info.headNrm) ?? info.hairNrm.Pick(kerbal, info.useGameSeed); + } } } } @@ -112,84 +132,65 @@ void ApplyTo(ProtoCrewMember kerbal) if (name == "pupilLeft") { - if (pupilLeft != null) - { - material.color = (Color)pupilLeft; - } - if (pupilLeftTex != null) - material.mainTexture = pupilLeftTex; - if (pupilLeftNrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", pupilLeftNrm); + material.SetColor(pupilLeft); + material.SetTexture(pupilLeftTex); + material.SetNormal(pupilLeftNrm); } if (name == "pupilRight") { - if (pupilRight != null) - material.color = (Color)pupilRight; - if (pupilRightTex != null) - material.mainTexture = pupilRightTex; - if (pupilRightNrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", pupilRightNrm); + material.SetColor(pupilRight); + material.SetTexture(pupilRightTex); + material.SetNormal(pupilRightNrm); } if (name == "eyeballLeft") { - if (eyeballLeft != null) - material.color = (Color)eyeballLeft; - if (eyeballLeftTex != null) - material.mainTexture = eyeballLeftTex; - if (eyeballLeftNrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", eyeballLeftNrm); + material.SetColor(eyeballLeft); + material.SetTexture(eyeballLeftTex); + material.SetNormal(eyeballLeftNrm); } if (name == "eyeballRight") { - if (eyeballRight != null) - material.color = (Color)eyeballRight; - if (eyeballRightTex != null) - material.mainTexture = eyeballRightTex; - if (eyeballRightNrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", eyeballRightNrm); + material.SetColor(eyeballRight); + material.SetTexture(eyeballRightTex); + material.SetNormal(eyeballRightNrm); } if (name == "upTeeth01" || name == "downTeeth01") { - if (upTeeth01 != null) - material.color = (Color)upTeeth01; - if (upTeeth01Tex != null) - material.mainTexture = upTeeth01Tex; - if (upTeeth01Nrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", upTeeth01Nrm); + material.SetColor(upTeeth01); + material.SetTexture(upTeeth01Tex); + material.SetNormal(upTeeth01Nrm); } if (name == "upTeeth02" || name == "upTeeth01") { - if (upTeeth02 != null) - material.color = (Color)upTeeth02; - if (upTeeth02Tex != null) - material.mainTexture = upTeeth02Tex; - if (upTeeth02Nrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", upTeeth02Nrm); + material.SetColor(upTeeth02); + material.SetTexture(upTeeth02Tex); + material.SetNormal(upTeeth02Nrm); + } + + if (name == "tongue") + { + material.SetColor(tongue); + material.SetTexture(tongueTex); + material.SetNormal(tongueNrm); } if (name == "headMesh01" || name == "headMesh") { - if (head != null) - material.color = (Color)head; - if (headTex != null) - material.mainTexture = headTex; - if (headNrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", headNrm); + material.SetColor(head); + material.SetTexture(headTex); + material.SetNormal(headNrm); } if (name == "ponytail") { - if (hair != null) - material.color = (Color)hair; - if (hairTex != null) - material.mainTexture = hairTex; - if (hairNrm != null && material.HasProperty("_BumpMap")) - material.SetTexture("_BumpMap", hairNrm); + material.SetColor(hair); + material.SetTexture(hairTex); + material.SetNormal(hairNrm); } } } diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 244c040..45ee110 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -14,6 +14,60 @@ namespace Heads { internal static class Extensions { + internal static void SetColor(this Material material, Color? color) + { + if (material != null && color != null) + { + material.color = (Color)color; + } + } + + internal static void SetTexture(this Material material, Texture newTex) + { + if (material != null && newTex != null) + { + Texture oldTex = material?.mainTexture; + + if (oldTex != null) + { + newTex.anisoLevel = oldTex.anisoLevel; + newTex.wrapMode = oldTex.wrapMode; + + material.mainTexture = newTex; + } + } + } + + internal static void SetNormal(this Material material, Texture newTex) + { + if (material != null && newTex != null && material.HasProperty("_BumpMap")) + { + Texture oldTex = material.GetTexture("_BumpMap"); + + if (oldTex != null) + { + newTex.anisoLevel = oldTex.anisoLevel; + newTex.wrapMode = oldTex.wrapMode; + + material.SetTexture("_BumpMap", newTex); + } + } + } + + internal static Texture At(this List right, Texture item, List left) + { + if (item != null && left.Contains(item) && right?.Count > left.IndexOf(item)) + return right[left.IndexOf(item)]; + return null; + } + + internal static Color? At(this List right, Color? item, List left) + { + if (item != null && left.Contains((Color)item) && right?.Count > left.IndexOf((Color)item)) + return right[left.IndexOf((Color)item)]; + return null; + } + internal static Texture Pick(this List list, ProtoCrewMember kerbal, bool useGameSeed) { if (list.Count == 1) diff --git a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs index 472fabc..04de6cb 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using UnityEngine; using Gender = ProtoCrewMember.Gender; @@ -35,6 +36,9 @@ internal class HeadInfo float minStupidity = 0; float maxStupidity = 1; + // Collection + internal string collection = ""; + // Colors Lists internal List pupilLeft = new List(); internal List pupilRight = new List(); @@ -42,6 +46,7 @@ internal class HeadInfo internal List eyeballRight = new List(); internal List upTeeth01 = new List(); internal List upTeeth02 = new List(); + internal List tongue = new List(); internal List head = new List(); internal List hair = new List(); @@ -52,6 +57,7 @@ internal class HeadInfo internal List eyeballRightTex = new List(); internal List upTeeth01Tex = new List(); internal List upTeeth02Tex = new List(); + internal List tongueTex = new List(); internal List headTex = new List(); internal List hairTex = new List(); @@ -62,6 +68,7 @@ internal class HeadInfo internal List eyeballRightNrm = new List(); internal List upTeeth01Nrm = new List(); internal List upTeeth02Nrm = new List(); + internal List tongueNrm = new List(); internal List headNrm = new List(); internal List hairNrm = new List(); @@ -133,6 +140,9 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) maxStupidity = Parse(requirements.GetValue("maxStupidity"), maxStupidity); + // Parse Collection + collection = info.GetValue("collection"); + // Parse HeadInfo Colors pupilLeft = Parse(info.GetValues("pupilLeft"), pupilLeft); pupilRight = Parse(info.GetValues("pupilRight"), pupilRight); @@ -140,6 +150,7 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) eyeballRight = Parse(info.GetValues("eyeballRight"), eyeballRight); upTeeth01 = Parse(info.GetValues("upTeeth01"), upTeeth01); upTeeth02 = Parse(info.GetValues("upTeeth02"), upTeeth02); + tongue = Parse(info.GetValues("tongue"), tongue); head = Parse(info.GetValues("head"), head); hair = Parse(info.GetValues("hair"), hair); @@ -150,6 +161,7 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) eyeballRightTex = Parse(info.GetValues("eyeballRightTex"), eyeballRightTex); upTeeth01Tex = Parse(info.GetValues("upTeeth01Tex"), upTeeth01Tex); upTeeth02Tex = Parse(info.GetValues("upTeeth02Tex"), upTeeth02Tex); + tongueTex = Parse(info.GetValues("tongueTex"), tongueTex); headTex = Parse(info.GetValues("headTex"), headTex); hairTex = Parse(info.GetValues("hairTex"), hairTex); @@ -160,8 +172,12 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) eyeballRightNrm = Parse(info.GetValues("eyeballRightNrm"), eyeballRightNrm); upTeeth01Nrm = Parse(info.GetValues("upTeeth01Nrm"), upTeeth01Nrm); upTeeth02Nrm = Parse(info.GetValues("upTeeth02Nrm"), upTeeth02Nrm); + tongueNrm = Parse(info.GetValues("tongueNrm"), tongueNrm); headNrm = Parse(info.GetValues("headNrm"), headNrm); hairNrm = Parse(info.GetValues("hairNrm"), hairNrm); + + // Parse Folders + ParseFolders(info.GetNode("Folders")); } @@ -221,12 +237,76 @@ List Parse(string[] s, List defaultValue) return defaultValue; } + void ParseFolders(ConfigNode node) + { + if (node == null) return; + + // Parse Texture Folders + pupilLeftTex = ParseFolders(node.GetValues("pupilLeftTex"), pupilLeftTex); + pupilRightTex = ParseFolders(node.GetValues("pupilRightTex"), pupilRightTex); + eyeballLeftTex = ParseFolders(node.GetValues("eyeballLeftTex"), eyeballLeftTex); + eyeballRightTex = ParseFolders(node.GetValues("eyeballRightTex"), eyeballRightTex); + upTeeth01Tex = ParseFolders(node.GetValues("upTeeth01Tex"), upTeeth01Tex); + upTeeth02Tex = ParseFolders(node.GetValues("upTeeth02Tex"), upTeeth02Tex); + tongueTex = ParseFolders(node.GetValues("tongueTex"), tongueTex); + headTex = ParseFolders(node.GetValues("headTex"), headTex); + hairTex = ParseFolders(node.GetValues("hairTex"), hairTex); + + // Parse Normal Folders + pupilLeftNrm = ParseFolders(node.GetValues("pupilLeftNrm"), pupilLeftNrm); + pupilRightNrm = ParseFolders(node.GetValues("pupilRightNrm"), pupilRightNrm); + eyeballLeftNrm = ParseFolders(node.GetValues("eyeballLeftNrm"), eyeballLeftNrm); + eyeballRightNrm = ParseFolders(node.GetValues("eyeballRightNrm"), eyeballRightNrm); + upTeeth01Nrm = ParseFolders(node.GetValues("upTeeth01Nrm"), upTeeth01Nrm); + upTeeth02Nrm = ParseFolders(node.GetValues("upTeeth02Nrm"), upTeeth02Nrm); + tongueNrm = ParseFolders(node.GetValues("tongueNrm"), tongueNrm); + headNrm = ParseFolders(node.GetValues("headNrm"), headNrm); + hairNrm = ParseFolders(node.GetValues("hairNrm"), hairNrm); + } + + List ParseFolders(string[] paths, List list) + { + for (int i = 0; i < paths?.Length; i++) + { + list.AddUniqueRange(ParseFolder(paths[i])); + } + + return list; + } + + List ParseFolder(string path) + { + Texture[] textures = Resources.FindObjectsOfTypeAll(); + List list = new List(); + + if (Directory.Exists("GameData/" + path)) + { + string[] files = Directory.GetFiles("GameData/" + path)?.Where(f => Path.GetExtension(f) == ".dds" || Path.GetExtension(f) == ".png")?.ToArray(); + + for (int i = 0; i < files?.Length; i++) + { + if (!string.IsNullOrEmpty(files[i])) + { + string name = path + Path.GetFileNameWithoutExtension(files[i]); + Texture texture = textures.FirstOrDefault(t => t?.name == name); + + if (texture != null) + list.AddUnique(texture); + } + } + } + + return list; + } + // Order DataBase internal static void OrderDB() { - DataBase.AddRange(List.Where(h => !string.IsNullOrEmpty(h?.name))); - DataBase.AddRange(List.Where(h => h != null && string.IsNullOrEmpty(h?.name))); + DataBase.AddRange(List.Where(h => !string.IsNullOrEmpty(h?.name) && !string.IsNullOrEmpty(h?.collection))); + DataBase.AddRange(List.Where(h => !string.IsNullOrEmpty(h?.name) && string.IsNullOrEmpty(h?.collection))); + DataBase.AddRange(List.Where(h => string.IsNullOrEmpty(h?.name) && !string.IsNullOrEmpty(h?.collection))); + DataBase.AddRange(List.Where(h => h != null && string.IsNullOrEmpty(h?.name) && string.IsNullOrEmpty(h?.collection))); } } } diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs index d17abb3..bcafb88 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -1,51 +1,45 @@ using System.Linq; using UnityEngine; -using KSP.UI.Screens; +using KSP.UI.Screens.Flight; namespace SigmaReplacements { namespace Heads { - [KSPAddon(KSPAddon.Startup.MainMenu, false)] - class MainMenuTrigger : MonoBehaviour - {/* - void Awake() - { - Settings.menuVets = (new[] { Settings.menuVet2, Settings.menuVet3, Settings.menuVet1 }).ToList(); - - var orbitScene = Resources.FindObjectsOfTypeAll().FirstOrDefault(o => o.name == "OrbitScene"); - - var Kerbals = orbitScene.GetChild("Kerbals"); - - foreach (Transform child in Kerbals.transform) - { - child.gameObject.AddComponent(); - } - }*/ - } - [KSPAddon(KSPAddon.Startup.Flight, false)] class FlightTriggers : MonoBehaviour { void Start() { GameEvents.onCrewOnEva.Add(OnCrewOnEva); - Add(); + TimingManager.LateUpdateAdd(TimingManager.TimingStage.Normal, Add); } void OnCrewOnEva(GameEvents.FromToAction action) { - Add(); + KerbalEVA kerbalEVA = action.to.GetComponent(); + if (kerbalEVA.GetComponent() == null) + kerbalEVA.gameObject.AddComponent(); } void Add() { - KerbalEVA[] kerbals = Resources.FindObjectsOfTypeAll(); + TimingManager.LateUpdateRemove(TimingManager.TimingStage.Normal, Add); + KerbalEVA[] kerbalEVAs = Resources.FindObjectsOfTypeAll(); + + for (int i = 0; i < kerbalEVAs.Length; i++) + { + if (kerbalEVAs[i].GetComponent() == null) + kerbalEVAs[i].gameObject.AddComponent(); + } + + kerbalExpressionSystem[] kerbalIVAs = Resources.FindObjectsOfTypeAll(); - for (int i = 0; i < kerbals.Length; i++) + for (int i = 0; i < kerbalIVAs.Length; i++) { - kerbals[i].gameObject.AddComponent(); + if (kerbalIVAs[i]?.GetComponent() == null) + kerbalIVAs[i].gameObject.AddComponent(); } } } From 34b970e2bcd162edabbfee291de3729aa4d938d9 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 03:52:18 +0100 Subject: [PATCH 04/27] less requirements --- .../Distribution/SigmaReplacementsHeads.dll | Bin 29696 -> 29696 bytes .../SigmaReplacementsHeads/Triggers.cs | 4 +--- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index a5f0f09affec6b4b1786efaac47c915e406728d9..50bcf2c085f43853c476be85a53ed3f156b7e5f6 100644 GIT binary patch delta 87 zcmZp8!PxMEaY6@EnD)jlzj%R(nd=^;dH?sEeQnu>oJ~{XH@}GQ;M57z{u{{v1WZ6I o!^ptU(GJ9!3=BcRF2SWyTq`7uZ@9K`TJk^K#C~k^oXiw10P_DI?*IS* delta 87 zcmZp8!PxMEaY6@ErPjtSzjy)7M7>4U5B|F~oL}#x%=`Y><`?lDoH~_Se Date: Sat, 4 Nov 2017 04:24:21 +0100 Subject: [PATCH 05/27] remove logspam --- .../Heads/Plugins/SigmaReplacementsHeads.dll | Bin 25600 -> 29696 bytes .../Distribution/SigmaReplacementsHeads.dll | Bin 29696 -> 29696 bytes .../SigmaReplacementsHeads/CustomHead.cs | 6 ------ 3 files changed, 6 deletions(-) diff --git a/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll index ab176d4c49b326844b29a9d756ecf2e8d17b0dc8..da3b5148e664320d65b6e37fa05a8b4033de1169 100644 GIT binary patch literal 29696 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 literal 25600 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 diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 50bcf2c085f43853c476be85a53ed3f156b7e5f6..da3b5148e664320d65b6e37fa05a8b4033de1169 100644 GIT binary patch delta 7822 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 List list = new List(); From b6ef330e5109caeb299a29edce895c79e5a33215 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 11:30:09 +0100 Subject: [PATCH 07/27] avoid stupid errors --- Heads/[Source]/SigmaReplacementsHeads/Extensions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 45ee110..7562df3 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -32,9 +32,9 @@ internal static void SetTexture(this Material material, Texture newTex) { newTex.anisoLevel = oldTex.anisoLevel; newTex.wrapMode = oldTex.wrapMode; - - material.mainTexture = newTex; } + + material.mainTexture = newTex; } } @@ -48,9 +48,9 @@ internal static void SetNormal(this Material material, Texture newTex) { newTex.anisoLevel = oldTex.anisoLevel; newTex.wrapMode = oldTex.wrapMode; - - material.SetTexture("_BumpMap", newTex); } + + material.SetTexture("_BumpMap", newTex); } } From bc20de8e183f5d75f6664542f33cc633e1cd1fdf Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 11:35:25 +0100 Subject: [PATCH 08/27] remove legaxy code --- .../Distribution/SigmaReplacementsHeads.dll | Bin 29696 -> 26112 bytes .../SigmaReplacementsHeads/Extensions.cs | 92 ------------------ 2 files changed, 92 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 6b8eef8d3fa8b651493d93e96ddc7086d38de1c8..33f8bc0056840ee030491c457a61ab98602ef17c 100644 GIT binary patch delta 9659 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 WxDnij^B?r_$tPpmJ{AYZnEwNjAA7w3 delta 13113 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 diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 7562df3..f0c3cfd 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -102,98 +102,6 @@ internal static int Hash(this ProtoCrewMember kerbal, bool useGameSeed) return h; } - - internal static int crewLimit(this AstronautComplex complex) - { - FieldInfo crewLimit = typeof(AstronautComplex).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(k => k.Name == "crewLimit"); - - try - { - return (int)crewLimit.GetValue(complex); - } - catch - { - return int.MaxValue; - } - } - - internal static CrewListItem crewListItem(this ProtoCrewMember kerbal) - { - FieldInfo crew = typeof(CrewListItem).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(k => k.FieldType == typeof(ProtoCrewMember)); - Debug.Log("Kerbal.crewListItem", "Kerbal reflection = " + crew); - AstronautComplex ac = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - Debug.Log("Kerbal.crewListItem", "AstronautComplex = " + ac); - if (crew == null || ac == null) return null; - - UIList[] list = new[] { ac?.ScrollListApplicants, ac?.ScrollListAssigned, ac?.ScrollListAvailable, ac?.ScrollListKia }; - CrewListItem item = null; - - for (int i = 0; i < list?.Length; i++) - { - item = list[i]?.GetUiListItems()?.FirstOrDefault(k => crew.GetValue(k.GetComponent()) == kerbal)?.GetComponent(); - if (item != null) break; - } - - Debug.Log("Kerbal.crewListItem", "Item = " + item); - return item; - } - - internal static TooltipController_CrewAC GetTooltip(this CrewListItem listItem) - { - return listItem?.GetComponent(); - } - - internal static string PrintFor(this string s, ProtoCrewMember kerbal) - { - return s - .Replace("&br;", "\n") - .Replace("&name;", kerbal.name) - .Replace("&trait;", kerbal.trait) - .Replace("&seed;", "" + HighLogic.CurrentGame.Seed) - .Replace("&visited;", "" + (kerbal?.careerLog?.Entries?.Select(e => e.target)?.Where(t => !string.IsNullOrEmpty(t))?.Distinct()?.Count() ?? 0)) - .Replace("&missions;", "" + (kerbal?.careerLog?.Entries?.Select(e => e.flight)?.Distinct()?.Count() ?? 0)) - .GetHashColor(); - } - - internal static string GetHashColor(this string s) - { - int start = 0; - - while (s.Substring(start).Contains("&Color")) - { - start = s.IndexOf("&Color"); - int end = s.Substring(start).IndexOf(";") + 1; - if (end > 9) - { - int add = 0; - switch (s.Substring(start + 6, 2)) - { - case "Lo": - break; - case "Hi": - add = 80; - break; - default: - start++; - continue; - } - string text = s.Substring(start, end); - int hash = Math.Abs(text.GetHashCode()); - string color = "#"; - for (int i = 0; i < 3; i++) - { - color += (hash % 176 + add).ToString("X"); - hash = Math.Abs(hash.ToString().GetHashCode()); - } - s = s.Replace(text, ""); - } - else - { - continue; - } - } - return s; - } } } } From ade61bd0376fe54269681266397bfee4cb47aa2b Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 11:36:22 +0100 Subject: [PATCH 09/27] unused usings --- .../Distribution/SigmaReplacementsHeads.dll | Bin 26112 -> 26112 bytes .../SigmaReplacementsHeads/Extensions.cs | 5 ----- 2 files changed, 5 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 33f8bc0056840ee030491c457a61ab98602ef17c..92dfcf59ffecf0546c9d53f677c70fa576541334 100644 GIT binary patch delta 66 zcmV-I0KNZ!%mIMR0g#9S9GJ0+mQoNksvzEcHPuR(Pjlb)KFg`IFjM#k0vwo=Dq9*5 Y=VOobn3g6>x<%tgXTi(Dvs7EG3h3A#xBvhE delta 66 zcmV-I0KNZ!%mIMR0g#9S Date: Sat, 4 Nov 2017 16:46:51 +0100 Subject: [PATCH 10/27] UIKerbals --- .../Distribution/SigmaReplacementsHeads.dll | Bin 26112 -> 29696 bytes .../SigmaReplacementsHeads/CrewMember.cs | 20 ----- .../SigmaReplacementsHeads/CustomHead.cs | 21 +++-- .../SigmaReplacementsHeads/HeadInfo.cs | 18 ++-- .../SigmaReplacementsHeads.csproj | 2 +- .../SigmaReplacementsHeads/Triggers.cs | 27 +++++- .../SigmaReplacementsHeads/UIKerbals.cs | 84 ++++++++++++++++++ 7 files changed, 134 insertions(+), 38 deletions(-) delete mode 100644 Heads/[Source]/SigmaReplacementsHeads/CrewMember.cs create mode 100644 Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 92dfcf59ffecf0546c9d53f677c70fa576541334..c0a95e8d4b9a07b8e038fc309d07037ed3798fbc 100644 GIT binary patch literal 29696 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 - ProtoCrewMember kerbal = kerbalEVA?.part?.protoModuleCrew?.FirstOrDefault(); + ProtoCrewMember kerbal = GetComponent()?.part?.protoModuleCrew?.FirstOrDefault(); if (kerbal == null) kerbal = GetComponent()?.protoCrewMember; - if (kerbal == null) kerbal = GetComponent(); + if (kerbal == null) kerbal = GetComponent()?.crewMember; if (kerbal == null) return; LoadFor(kerbal); @@ -124,42 +123,42 @@ void ApplyTo(ProtoCrewMember kerbal) Material material = renderers[i]?.material; if (material == null) continue; - if (name == "pupilLeft") + if (name == "pupilLeft" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_pupilLeft") { material.SetColor(pupilLeft); material.SetTexture(pupilLeftTex); material.SetNormal(pupilLeftNrm); } - if (name == "pupilRight") + if (name == "pupilRight" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_pupilRight") { material.SetColor(pupilRight); material.SetTexture(pupilRightTex); material.SetNormal(pupilRightNrm); } - if (name == "eyeballLeft") + if (name == "eyeballLeft" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_eyeballLeft") { material.SetColor(eyeballLeft); material.SetTexture(eyeballLeftTex); material.SetNormal(eyeballLeftNrm); } - if (name == "eyeballRight") + if (name == "eyeballRight" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_eyeballRight") { material.SetColor(eyeballRight); material.SetTexture(eyeballRightTex); material.SetNormal(eyeballRightNrm); } - if (name == "upTeeth01" || name == "downTeeth01") + if (name == "upTeeth01" || name == "downTeeth01" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_downTeeth01") { material.SetColor(upTeeth01); material.SetTexture(upTeeth01Tex); material.SetNormal(upTeeth01Nrm); } - if (name == "upTeeth02" || name == "upTeeth01") + if (name == "upTeeth02" || name == "upTeeth01" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_upTeeth01") { material.SetColor(upTeeth02); material.SetTexture(upTeeth02Tex); @@ -173,14 +172,14 @@ void ApplyTo(ProtoCrewMember kerbal) material.SetNormal(tongueNrm); } - if (name == "headMesh01" || name == "headMesh") + if (name == "headMesh01" || name == "headMesh" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_polySurface51") { material.SetColor(head); material.SetTexture(headTex); material.SetNormal(headNrm); } - if (name == "ponytail") + if (name == "ponytail" || name == "mesh_female_kerbalAstronaut01_kerbalGirl_mesh_pCube1") { material.SetColor(hair); material.SetTexture(hairTex); diff --git a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs index 4663981..34eb532 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs @@ -24,17 +24,21 @@ internal class HeadInfo // Requirements internal bool useGameSeed = false; internal float useChance = 1; - Type? rosterStatus = null; - Gender? gender = null; - string[] trait = null; - bool? veteran = null; - bool? isBadass = null; + internal Type? rosterStatus = null; + internal Gender? gender = null; + internal string[] trait = null; + internal bool? veteran = null; + internal bool? isBadass = null; int minLevel = 0; int maxLevel = 5; float minCourage = 0; float maxCourage = 1; float minStupidity = 0; float maxStupidity = 1; + // For MainMenuKerbals + internal float? courage = null; + internal float? stupidity = null; + internal int? experienceLevel = null; // Collection internal string collection = ""; @@ -138,6 +142,10 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) maxCourage = Parse(requirements.GetValue("maxCourage"), maxCourage); minStupidity = Parse(requirements.GetValue("minStupidity"), minStupidity); maxStupidity = Parse(requirements.GetValue("maxStupidity"), maxStupidity); + // For MainMenuKerbals + experienceLevel = Parse(requirements.GetValue("level"), experienceLevel); + courage = Parse(requirements.GetValue("courage"), courage); + stupidity = Parse(requirements.GetValue("stupidity"), stupidity); // Parse Collection diff --git a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj index 3ec368b..b563497 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj +++ b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj @@ -31,7 +31,7 @@ 4 - + diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs index 08e7f45..7b41e12 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -1,10 +1,35 @@ using UnityEngine; - +using System.Linq; namespace SigmaReplacements { namespace Heads { + [KSPAddon(KSPAddon.Startup.MainMenu, false)] + class MenuTriggers : MonoBehaviour + { + void Start() + { + int i = 0; + foreach (var transform in Resources.FindObjectsOfTypeAll().Where(r => r?.name == "Kerbals")) + { + foreach (Transform child in transform) + { + if (child?.gameObject != null && child?.GetComponent () == null) + child.gameObject.AddComponent(); + + UIKerbal kerbal = child.GetComponent(); + kerbal.crewMember = UIKerbal.menuKerbals[i]; + i++; + + if (child?.gameObject != null && child?.GetComponent() == null) + child.gameObject.AddComponent(); + } + } + } + } + + [KSPAddon(KSPAddon.Startup.Flight, false)] class FlightTriggers : MonoBehaviour { diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs new file mode 100644 index 0000000..4668ebf --- /dev/null +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -0,0 +1,84 @@ +using UnityEngine; + +namespace SigmaReplacements +{ + namespace Heads + { + internal class UIKerbal : MonoBehaviour + { + static CrewMember mun1 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bob Kerman", ProtoCrewMember.Gender.Male, "Scientist", true, false, 0.3f, 0.1f, 0); + static CrewMember orbit1 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bill Kerman", ProtoCrewMember.Gender.Male, "Engineer", true, false, 0.5f, 0.8f, 0); + static CrewMember orbit2 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bob Kerman", ProtoCrewMember.Gender.Male, "Scientist", true, false, 0.3f, 0.1f, 0); + static CrewMember orbit3 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Jebediah Kerman", ProtoCrewMember.Gender.Male, "Pilot", true, true, 0.5f, 0.5f, 0); + static CrewMember orbit4 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Valentina Kerman", ProtoCrewMember.Gender.Female, "Pilot", true, true, 0.55f, 0.4f, 0); + + internal static CrewMember[] menuKerbals = new[] { mun1, orbit1, orbit2, orbit3, orbit4 }; + + internal CrewMember crewMember; + } + + [KSPAddon(KSPAddon.Startup.MainMenu, true)] + internal class UIKerbalLoader : MonoBehaviour + { + void Awake() + { + ConfigNode[] MenuKerbals = UserSettings.ConfigNode.GetNodes("MenuKerbal"); + + for (int i = 0; i < MenuKerbals?.Length; i++) + { + if (int.TryParse(MenuKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.menuKerbals?.Length) + { + Load(MenuKerbals[i], index); + } + } + } + + void Load(ConfigNode node, int index) + { + CrewMember kerbal = UIKerbal.menuKerbals[index]; + HeadInfo stats = new HeadInfo(node.GetNode("Stats"), new ConfigNode()); + + UIKerbal.menuKerbals[index] = new CrewMember + ( + stats.rosterStatus ?? kerbal.type, + !string.IsNullOrEmpty(stats.name) ? stats.name : kerbal.name, + kerbal.gender = stats.gender ?? kerbal.gender, + kerbal.trait = stats.trait?.Length > 0 && !string.IsNullOrEmpty(stats.trait[0]) ? stats.trait[0] : kerbal.trait, + kerbal.veteran = stats.veteran ?? kerbal.veteran, + kerbal.isBadass = stats.isBadass ?? kerbal.isBadass, + kerbal.courage = stats.courage ?? kerbal.courage, + kerbal.stupidity = stats.stupidity ?? kerbal.stupidity, + kerbal.experienceLevel = stats.experienceLevel ?? kerbal.experienceLevel + ); + } + } + + internal class CrewMember : ProtoCrewMember + { + internal new string name = ""; + + internal CrewMember(KerbalType type, string name, Gender gender, string trait, bool veteran, bool isBadass, float courage, float stupidity, int experienceLevel) : base(type, name) + { + this.type = type; + this.name = name; + this.gender = gender; + this.trait = trait; + this.veteran = veteran; + this.isBadass = isBadass; + this.courage = courage; + this.stupidity = stupidity; + this.experienceLevel = experienceLevel; + } + + internal CrewMember(KerbalType type, string name) : base(type, name) + { + this.name = name; + this.type = type; + } + + CrewMember(KerbalType type) : base(type) { } + CrewMember(ProtoCrewMember copyOf) : base(copyOf) { } + CrewMember(Game.Modes mode, ConfigNode node, KerbalType crewType = KerbalType.Crew) : base(mode, node, crewType) { } + } + } +} From 5cbb305272bbe4d88e6161c1a9696b871141c7f3 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 17:08:03 +0100 Subject: [PATCH 11/27] extend --- .../Distribution/SigmaReplacementsHeads.dll | Bin 29696 -> 30208 bytes .../SigmaReplacementsHeads/Extensions.cs | 19 +++++++++ .../SigmaReplacementsHeads/UIKerbals.cs | 36 ++++++------------ 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index c0a95e8d4b9a07b8e038fc309d07037ed3798fbc..681e07ced0d118a1619e84c7f9aa38e402611887 100644 GIT binary patch delta 10521 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 K-V=w$+W!Z4ukZx` delta 10561 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 N^(Qia6?cp`{}0y!;d%f7 diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 4d3727c..1659a65 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -9,6 +9,25 @@ namespace Heads { internal static class Extensions { + internal static void Load(this CrewMember[] array, ConfigNode node, int index) + { + CrewMember kerbal = array[index]; + HeadInfo stats = new HeadInfo(node.GetNode("Stats"), new ConfigNode()); + + array[index] = new CrewMember + ( + stats.rosterStatus ?? kerbal.type, + !string.IsNullOrEmpty(stats.name) ? stats.name : kerbal.name, + kerbal.gender = stats.gender ?? kerbal.gender, + kerbal.trait = stats.trait?.Length > 0 && !string.IsNullOrEmpty(stats.trait[0]) ? stats.trait[0] : kerbal.trait, + kerbal.veteran = stats.veteran ?? kerbal.veteran, + kerbal.isBadass = stats.isBadass ?? kerbal.isBadass, + kerbal.courage = stats.courage ?? kerbal.courage, + kerbal.stupidity = stats.stupidity ?? kerbal.stupidity, + kerbal.experienceLevel = stats.experienceLevel ?? kerbal.experienceLevel + ); + } + internal static void SetColor(this Material material, Color? color) { if (material != null && color != null) diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs index 4668ebf..10fbb57 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -1,5 +1,6 @@ using UnityEngine; + namespace SigmaReplacements { namespace Heads @@ -13,6 +14,7 @@ internal class UIKerbal : MonoBehaviour static CrewMember orbit4 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Valentina Kerman", ProtoCrewMember.Gender.Female, "Pilot", true, true, 0.55f, 0.4f, 0); internal static CrewMember[] menuKerbals = new[] { mun1, orbit1, orbit2, orbit3, orbit4 }; + internal static CrewMember[] rndKerbals = new[] { mun1, orbit1, orbit2, orbit3, orbit4 }; internal CrewMember crewMember; } @@ -28,28 +30,19 @@ void Awake() { if (int.TryParse(MenuKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.menuKerbals?.Length) { - Load(MenuKerbals[i], index); + UIKerbal.menuKerbals.Load(MenuKerbals[i], index); } } - } - void Load(ConfigNode node, int index) - { - CrewMember kerbal = UIKerbal.menuKerbals[index]; - HeadInfo stats = new HeadInfo(node.GetNode("Stats"), new ConfigNode()); + ConfigNode[] RnDKerbals = UserSettings.ConfigNode.GetNodes("RnDKerbal"); - UIKerbal.menuKerbals[index] = new CrewMember - ( - stats.rosterStatus ?? kerbal.type, - !string.IsNullOrEmpty(stats.name) ? stats.name : kerbal.name, - kerbal.gender = stats.gender ?? kerbal.gender, - kerbal.trait = stats.trait?.Length > 0 && !string.IsNullOrEmpty(stats.trait[0]) ? stats.trait[0] : kerbal.trait, - kerbal.veteran = stats.veteran ?? kerbal.veteran, - kerbal.isBadass = stats.isBadass ?? kerbal.isBadass, - kerbal.courage = stats.courage ?? kerbal.courage, - kerbal.stupidity = stats.stupidity ?? kerbal.stupidity, - kerbal.experienceLevel = stats.experienceLevel ?? kerbal.experienceLevel - ); + for (int i = 0; i < MenuKerbals?.Length; i++) + { + if (int.TryParse(MenuKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.menuKerbals?.Length) + { + UIKerbal.rndKerbals.Load(RnDKerbals[i], index); + } + } } } @@ -70,14 +63,9 @@ internal CrewMember(KerbalType type, string name, Gender gender, string trait, b this.experienceLevel = experienceLevel; } - internal CrewMember(KerbalType type, string name) : base(type, name) - { - this.name = name; - this.type = type; - } - CrewMember(KerbalType type) : base(type) { } CrewMember(ProtoCrewMember copyOf) : base(copyOf) { } + CrewMember(KerbalType type, string name) : base(type, name) { } CrewMember(Game.Modes mode, ConfigNode node, KerbalType crewType = KerbalType.Crew) : base(mode, node, crewType) { } } } From ae331e15f8e88134665c09d9ffb37a66cce17acd Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 17:43:39 +0100 Subject: [PATCH 12/27] generalize --- .../Distribution/SigmaReplacementsHeads.dll | Bin 30208 -> 29696 bytes .../SigmaReplacementsHeads/Triggers.cs | 29 ++++++++++++------ .../SigmaReplacementsHeads/UIKerbals.cs | 4 +-- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 681e07ced0d118a1619e84c7f9aa38e402611887..ae016baba6ee92ee597aeb5db20386587290a579 100644 GIT binary patch delta 6038 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 Rb>*2c?V;5dMB5PKe*q747%2b% delta 6219 zcmbVQdvsORng8wcKKI_-Lyul*bS4XWCIY3|d6<<&Vk-f!$u?{z2F%W{g_ z{ci8{;$a-Vqo8v`*pKBq3c6^I3q9j4B#|zuX2@LSXARa< zk0r@Vry0KgFSZOFz9qCBvTuY=m7$}obsG~6n|STowX^B&%AT@jC*&0Itlv%x&ag-2 zk}6&Nc9Cr-40k|e$^|eUhYXRv+8dY&1?ZHJ`-u)#lBhNIm8!vK}Lx%VWBT0P}mce^VCga zlH8)8)TsGWO~UCkBj8w@>aH58250P8B*UBBFQeOyJZjRD?T~qWm>2E$WS1A2r{S|? zERS%Z`-;PQL}|WC_WJZckk@BL6`P33RdUDob$N>|J;DdU*Px{&hIkkH_Zm5ZY4TP9 zFY;Q!`<7ST*ig4@(F!?7m$HF0uBg1})c~JWipU!`eL@AVDdcCo2?KgXCzGY|!zZMj}2jg zF~YI%w!+;KqZn#Rm8r11!bfNb;!UpmAWqo8aIAKKFrIeX^dO$&jSOPA3rxfrR$$>% zWZM=7s+8mW*|rbWBHIq)NsgM2?YhJ(l!JJTay@#mlrR=BS{PBwke309)LCu1g;Ym| zOBYv!1&bI)n=SQ??h8H(dAbbk=PKNWnQS_U%anuIr{rXo8$>5gjt`yn^=#}b$T%kh zvPoDn^0~la#_Xwb&5r7a#YD_xT^63Rv+XeIgzPe({RMH1{RPogj>G`=6vi8VX){E4ey*^u!e>uBn^UZN79$bYRUL!B1_YxEtyM9kfkcmJJ40xPAXQ2ER}Gp@332g zLiw_#XDw}#MHG9FwldtuRU~b1CD=&lxheQx5d~^!EQ8Lv*U_a0vr(bgy^4JwcO_h< zZ4Tc@@qv;pcaE1w zi8@|&&Jcgh5CW6^7fgXVg)#Idf##eq+WYZN}Huub70h2;uo zD6CRAFA$XjX4(=TP`F6p;|hB!EKxXK;TVNeiGy&&xy;fBTe5F6@CD_d@kOEm9fP%I zp<}AHhM48QMt!ntTRPVIlZh|csl@ZX)F@vZTdWp#d|2Vz93XH);U5B0{*tKUtk#tS zj3kLIRxWWer=94JP_9!rLt&%BJ&^i{kht8Gn5{`1>q=Z4=uccjjOut$kv4^c6qYNT zp|DEfJcToDIqU(2ixfVtu&2Tjh2s^DQ8<-22+xXPRt7p_lw~2}kMV6FZ?V*mvofL> zf{8RQMK$pk3Wo?OKSY#HvnUJ9wW@Ns9^pCLw8fmWmlbP5SeFmvk{;65glm4u0(p|H z>AcC6EM2kI&TVcz#|=^Jh9}qm4cFz$=pkgSpzHPy_6onff4C`(fp2dLW89MPcJ>eX zGDAGQfei(c#miQnGJm{M18Kdav6*#0WEpr&u_m%ckp!=UZ4g21?qEwrG7fjJ&3xca z#hIFmG%S!W0VW*hZV+k6>>Fn_&Iax&W()wBKb}4V_msqqa!NC9=_v!tlr7#x24V?M zIo-E=E+~~zJmhO@dE)|u;;hzfwYs1p!F1yps~cXFEK1j?^^BE;OzuhLz&rdeSlMXn zV27+8DB}KC+NN2jtpYsS!9KAfIFn!ltZ%GB4BOQsj5ALVFM@JJ?Wr2$poP(e^O3b+AeH2%PF*v+YsH zyz6?*rS=%i=wK`Dv3NPoqD;TeuE0kf#-G}Ep<-No;4ghI+2gTf!gaRNo`7E`*vHO( zdm_>%N}GoRqTZ^+=ZeK|Qzg3eoJz0~O<>Y3 z11BLSH%y83JP8{Vi?5(bctWvesx@EJ%Zo1?gBoS>UfVz5t(p4Kj`VVo4|YbL&=(v}y@!yr8S>Ps3tvZ}=%z zY5rOD^moWn2Ku`P|IM*-o;WM2MA?kMU1}}|s&emDn6LB_qXO@#+NUa~zs46_7xF_A zBAV!;CkLZ z`fbz<^X)|1>|hvwa`%H_id`GBR1# zcf^f;oj*mJOh+`S+FP*642j*M$jA`;#U?jb92D=^y~M9Xy46RtAmW=N-lg?^afJR$ ziLdL8M8Erw#I@W39N}})Og!&vj`DJryPYF^P$af+7bJ(t0h{>ElDJu%7O(ktiVwvX z{+GoB(KGO>khArss1eUQCq+Jl-BoK6kt8`EK{ivwQQr||=|!saQib{Wy}wvHE!yoV z+C}kCdOf07&|u9b2`0^Fh+_Xz&1Fw1oUT{3O&WXU-O5La_8ms35J&I}{irrVg|0|w z;2zg1l%`T?DwTYZ^EzKE#e=3UgjnppuL*HV|Gjn@JFH^je#^w=D1M|}BH65cPV*=F z72=?zW(e_>evPtjnEEt$zRQ@VYM+KT%>rs<$Fr1vmeS8s`dLa}s=7Y{+24NDX~o(V zvD;mw3#~z4qMybnt%Wz}swr1MwAlZIUdILXw7y%ZW~q*+DcrBH1wS&m+%Vp^S9i4{ zuX%rM<`8&!rt1iEZ0~-c_fRLGuMK9+=0d{CHL2KeSy&=CR%a{ z_mBFXHI^vXI`JR+KBG?T54>fRX2uM1PTQ2n-ePiP>hG8oQOHw3>C=CO0|~ zwOVg&tGN^P&Ox(Q+h=Yy%d|60@9^7q((J?EZ5O$DNX2KwZupXzhYY8W{JBLe!EoYm z%p{g$E|EWHiPcz2yidvVvC%2V53t{vPkhaJPT_fpQKwue1MxMdS;%BZDgV23o_O5R z`Rre`^AwgVoUgE1;W=IU!;qMxaE!va3S$blD?F_5oWeZR;s637OH>H&K%`=P4(Pq6FGxwTCOuj^KK2Gt&!?$e5am@Uka?sUZMB?gW=CAo7 zyZvb3>-YAf&HH(Ix}JuhceH%?;4CvwWSJwye~V_!;8mV`L`a?Q$}A&B4V^Qm-<*CJ zQQcVE&^T(IVqRv&pL};NTe);$Lv3SyL%VZlX`p@NluwffxqYyJ|5orb+y~3C42yu| ziTv%_fO(vVCDH=aelz#Jf4g*i@}A8LKbZdHOP##AwZ&q;x2d+fIOy%I%@wbE$7}1w zyWZ$|lQKRGro$JGT?oZa^M8|x!#P0jZT&d z)0E}?*TS->43>zQ9-ggrhnB=VSsh9Pf<>hWTGGQ!a%gwh(lcDD$s$U9%%=jRqMPkH z6gRS}R`vf0iJdjJv_;k0N;5~sS~cl+kbcotH%I2*C{oceRyF>Fo`Xy&H5JG_`613j zQ*V(TiapB+yZAqaisIW9w|K;Bqf;t3PMQcc4GlL9v}}&wt@%|Xrk0^}D^;Y}P8JP3 z_j*Z-+LClDT;(#UD!6_7qM0K1dS)|6XyHi;A68h(S(klzX?5QgUH|jGT-TXgXWy>l zxfqyQT~V!V4LtPG>b;d~N}Oe1A6mAreZ*o%gvYFx3nzZelyXjMZiZI5-dpyA?d>_s Xi$r^H$=9Z~WLSG>`JY5().Where(r => r?.name == "Kerbals")) + Transform[] transforms = Resources.FindObjectsOfTypeAll(); + + int menu = 0; + int rnd = 0; + + for (int i = 0; i < transforms?.Length; i++) { - foreach (Transform child in transform) + Transform transform = transforms[i]; + + if (transform?.name == "Kerbals") { - if (child?.gameObject != null && child?.GetComponent () == null) - child.gameObject.AddComponent(); + foreach (Transform child in transform) + { + if (child?.gameObject != null && child?.GetComponent() == null) + child.gameObject.AddComponent(); - UIKerbal kerbal = child.GetComponent(); - kerbal.crewMember = UIKerbal.menuKerbals[i]; - i++; + UIKerbal kerbal = child.GetComponent(); + kerbal.crewMember = UIKerbal.menuKerbals[menu]; + menu++; - if (child?.gameObject != null && child?.GetComponent() == null) - child.gameObject.AddComponent(); + if (child?.gameObject != null && child?.GetComponent() == null) + child.gameObject.AddComponent(); + } } } } diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs index 10fbb57..b5f0b5b 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -36,9 +36,9 @@ void Awake() ConfigNode[] RnDKerbals = UserSettings.ConfigNode.GetNodes("RnDKerbal"); - for (int i = 0; i < MenuKerbals?.Length; i++) + for (int i = 0; i < RnDKerbals?.Length; i++) { - if (int.TryParse(MenuKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.menuKerbals?.Length) + if (int.TryParse(RnDKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.rndKerbals?.Length) { UIKerbal.rndKerbals.Load(RnDKerbals[i], index); } From ca0ae52f45ef0fd7110b06797bea8ca0510cd320 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 19:20:03 +0100 Subject: [PATCH 13/27] better load --- .../SigmaReplacementsHeads/Extensions.cs | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 1659a65..5a9816f 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -12,19 +12,21 @@ internal static class Extensions internal static void Load(this CrewMember[] array, ConfigNode node, int index) { CrewMember kerbal = array[index]; - HeadInfo stats = new HeadInfo(node.GetNode("Stats"), new ConfigNode()); + UnityEngine.Debug.Log("SigmaLog: oldkerbal = " + kerbal); + HeadInfo stats = new HeadInfo(node.GetNode("Stats") ?? new ConfigNode(), new ConfigNode()); + UnityEngine.Debug.Log("SigmaLog: stats = " + stats); array[index] = new CrewMember ( - stats.rosterStatus ?? kerbal.type, - !string.IsNullOrEmpty(stats.name) ? stats.name : kerbal.name, - kerbal.gender = stats.gender ?? kerbal.gender, - kerbal.trait = stats.trait?.Length > 0 && !string.IsNullOrEmpty(stats.trait[0]) ? stats.trait[0] : kerbal.trait, - kerbal.veteran = stats.veteran ?? kerbal.veteran, - kerbal.isBadass = stats.isBadass ?? kerbal.isBadass, - kerbal.courage = stats.courage ?? kerbal.courage, - kerbal.stupidity = stats.stupidity ?? kerbal.stupidity, - kerbal.experienceLevel = stats.experienceLevel ?? kerbal.experienceLevel + stats?.rosterStatus ?? kerbal.type, + !string.IsNullOrEmpty(stats?.name) ? stats.name : kerbal.name, + stats?.gender ?? kerbal.gender, + stats?.trait?.Length > 0 && !string.IsNullOrEmpty(stats.trait[0]) ? stats.trait[0] : kerbal.trait, + stats?.veteran ?? kerbal.veteran, + stats?.isBadass ?? kerbal.isBadass, + stats?.courage ?? kerbal.courage, + stats?.stupidity ?? kerbal.stupidity, + stats?.experienceLevel ?? kerbal.experienceLevel ); } From 2f07c8880507baa073c285facfad3a49c6c97bdd Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 19:20:12 +0100 Subject: [PATCH 14/27] remove unneccessary --- Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs b/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs index d6d4214..826ee62 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs @@ -1,5 +1,4 @@ using UnityEngine; -using System.Collections.Generic; namespace SigmaReplacements From 275981c30589fdcf3dc322ded9fea718ad64d667 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sat, 4 Nov 2017 19:21:13 +0100 Subject: [PATCH 15/27] all UIKerbals --- Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs index b5f0b5b..374c655 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -7,14 +7,24 @@ namespace Heads { internal class UIKerbal : MonoBehaviour { + // Main Menu static CrewMember mun1 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bob Kerman", ProtoCrewMember.Gender.Male, "Scientist", true, false, 0.3f, 0.1f, 0); static CrewMember orbit1 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bill Kerman", ProtoCrewMember.Gender.Male, "Engineer", true, false, 0.5f, 0.8f, 0); static CrewMember orbit2 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bob Kerman", ProtoCrewMember.Gender.Male, "Scientist", true, false, 0.3f, 0.1f, 0); static CrewMember orbit3 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Jebediah Kerman", ProtoCrewMember.Gender.Male, "Pilot", true, true, 0.5f, 0.5f, 0); static CrewMember orbit4 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Valentina Kerman", ProtoCrewMember.Gender.Female, "Pilot", true, true, 0.55f, 0.4f, 0); + // Instructors + static CrewMember gene = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Gene Kerman", ProtoCrewMember.Gender.Male, "Instructor", false, false, 0.6f, 0.45f, 0); + static CrewMember werner = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Instructor", false, false, 0.25f, 0.25f, 0); + // Strategy + static CrewMember mort = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Gene Kerman", ProtoCrewMember.Gender.Male, "StockBroker", false, false, 0.65f, 0.35f, 0); + static CrewMember linus = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Researcher", false, false, 0.35f, 0.3f, 0); + static CrewMember walt = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Marketer", false, false, 0.45f, 0.9f, 0); + static CrewMember gus = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Mechanic", false, false, 0.45f, 0.45f, 0); internal static CrewMember[] menuKerbals = new[] { mun1, orbit1, orbit2, orbit3, orbit4 }; - internal static CrewMember[] rndKerbals = new[] { mun1, orbit1, orbit2, orbit3, orbit4 }; + internal static CrewMember[] instructors = new[] { gene, werner }; + internal static CrewMember[] strategy = new[] { mort, linus, walt, gus }; internal CrewMember crewMember; } From 5b13fd00328de9bd06dd7ac14ef40210325686f2 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 00:31:39 +0100 Subject: [PATCH 16/27] all UIKerbals --- .../Distribution/SigmaReplacementsHeads.dll | Bin 29696 -> 33280 bytes .../SigmaReplacementsHeads/CustomHead.cs | 21 ++++- .../SigmaReplacementsHeads/Extensions.cs | 2 - .../SigmaReplacementsHeads/Triggers.cs | 81 ++++++++++++++++-- .../SigmaReplacementsHeads/UIKerbals.cs | 72 +++++++++++++--- 5 files changed, 156 insertions(+), 20 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index ae016baba6ee92ee597aeb5db20386587290a579..159a240012ece3834e0bbecb773f218bddde2d6d 100644 GIT binary patch literal 33280 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

lZbXOfp+B(|^@>}P4ZwYi@H>R~ghi%#` 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 literal 29696 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 Ozx(@dH~Rnf1O9)6WcGRh diff --git a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs index 328b990..fb0f524 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs @@ -18,6 +18,7 @@ internal class CustomHead : MonoBehaviour Color? tongue = null; Color? head = null; Color? hair = null; + Color? arm = null; // Textures Texture pupilLeftTex = null; @@ -29,6 +30,7 @@ internal class CustomHead : MonoBehaviour Texture tongueTex = null; Texture headTex = null; Texture hairTex = null; + Texture armTex = null; // Normals Texture pupilLeftNrm = null; @@ -40,12 +42,22 @@ internal class CustomHead : MonoBehaviour Texture tongueNrm = null; Texture headNrm = null; Texture hairNrm = null; + Texture armNrm = null; + void Start() + { + Apply(); + } + + internal void Apply() { ProtoCrewMember kerbal = GetComponent()?.part?.protoModuleCrew?.FirstOrDefault(); if (kerbal == null) kerbal = GetComponent()?.protoCrewMember; - if (kerbal == null) kerbal = GetComponent()?.crewMember; + if (kerbal == null) kerbal = GetComponent()?.crewMember; + if (kerbal == null) kerbal = GetComponent()?.crewMember; + if (kerbal == null) kerbal = GetComponent()?.crewMember; + if (kerbal == null) kerbal = GetComponent()?.crewMember; if (kerbal == null) return; LoadFor(kerbal); @@ -185,6 +197,13 @@ void ApplyTo(ProtoCrewMember kerbal) material.SetTexture(hairTex); material.SetNormal(hairNrm); } + + if (name == "arm") + { + material.SetColor(arm); + material.SetTexture(armTex); + material.SetNormal(armNrm); + } } } } diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 5a9816f..4ed148d 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -12,9 +12,7 @@ internal static class Extensions internal static void Load(this CrewMember[] array, ConfigNode node, int index) { CrewMember kerbal = array[index]; - UnityEngine.Debug.Log("SigmaLog: oldkerbal = " + kerbal); HeadInfo stats = new HeadInfo(node.GetNode("Stats") ?? new ConfigNode(), new ConfigNode()); - UnityEngine.Debug.Log("SigmaLog: stats = " + stats); array[index] = new CrewMember ( diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs index 1212f95..272632d 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -1,5 +1,8 @@ using UnityEngine; using System.Linq; +using KSP.UI; +using KSP.UI.Screens; + namespace SigmaReplacements { @@ -13,7 +16,6 @@ void Start() Transform[] transforms = Resources.FindObjectsOfTypeAll(); int menu = 0; - int rnd = 0; for (int i = 0; i < transforms?.Length; i++) { @@ -23,21 +25,87 @@ void Start() { foreach (Transform child in transform) { - if (child?.gameObject != null && child?.GetComponent() == null) - child.gameObject.AddComponent(); + if (child?.gameObject != null && child?.GetComponent() == null) + child.gameObject.AddComponent(); - UIKerbal kerbal = child.GetComponent(); - kerbal.crewMember = UIKerbal.menuKerbals[menu]; + UIKerbalMenu kerbal = child.GetComponent(); + kerbal.crewMember = UIKerbals.menuKerbals[menu]; menu++; if (child?.gameObject != null && child?.GetComponent() == null) child.gameObject.AddComponent(); } } + + if (transform?.name == "WernerVonKerman") + { + if (transform?.gameObject != null && transform?.GetComponent() == null) + transform.gameObject.AddComponent(); + + if (transform?.gameObject != null && transform?.GetComponent() == null) + transform.gameObject.AddComponent(); + } + } + } + } + + [KSPAddon(KSPAddon.Startup.SpaceCentre, false)] + class KSCTriggers : MonoBehaviour + { + void Start() + { + Administration admin = Resources.FindObjectsOfTypeAll().FirstOrDefault(); + + if (admin != null && admin.GetComponent() == null) + { + admin.gameObject.AddComponent(); + } + + + string[] names = new string[] { "Strategy_Mortimer", "Strategy_ScienceGuy", "Strategy_PRGuy", "Strategy_MechanicGuy" }; + + Transform[] transforms = Resources.FindObjectsOfTypeAll(); + + for (int i = 0; i < transforms?.Length; i++) + { + Transform transform = transforms[i]; + + if (names.Contains(transform?.name)) + { + int index = names.IndexOf(transform?.name); + + if (transform?.gameObject != null && transform?.GetComponent() == null) + transform.gameObject.AddComponent(); + + if (transform?.gameObject != null && transform?.GetComponent() == null) + transform.gameObject.AddComponent(); + } + + if (transform?.name == "instructor_Gene") + { + if (transform?.gameObject != null && transform?.GetComponent() == null) + transform.gameObject.AddComponent(); + + if (transform?.gameObject != null && transform?.GetComponent() == null) + transform.gameObject.AddComponent(); + } } } } + internal class AdminTrigger : MonoBehaviour + { + void Start() + { + UIKerbalStrategy[] strategies = GetComponentsInChildren(); + + for (int i = 0; i < strategies?.Length; i++) + { + if (strategies[i] != null) + strategies[i].Apply(); + } + } + } [KSPAddon(KSPAddon.Startup.Flight, false)] class FlightTriggers : MonoBehaviour @@ -50,9 +118,10 @@ void Start() void OnCrewOnEva(GameEvents.FromToAction action) { + GameEvents.onCrewOnEva.Remove(OnCrewOnEva); KerbalEVA kerbalEVA = action.to.GetComponent(); if (kerbalEVA.GetComponent() == null) - kerbalEVA.gameObject.AddComponent(); + kerbalEVA.gameObject.AddComponent(); } void Add() diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs index 374c655..c53c731 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -1,11 +1,12 @@ using UnityEngine; +using System.Linq; namespace SigmaReplacements { namespace Heads { - internal class UIKerbal : MonoBehaviour + internal class UIKerbals : MonoBehaviour { // Main Menu static CrewMember mun1 = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Bob Kerman", ProtoCrewMember.Gender.Male, "Scientist", true, false, 0.3f, 0.1f, 0); @@ -17,18 +18,55 @@ internal class UIKerbal : MonoBehaviour static CrewMember gene = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Gene Kerman", ProtoCrewMember.Gender.Male, "Instructor", false, false, 0.6f, 0.45f, 0); static CrewMember werner = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Instructor", false, false, 0.25f, 0.25f, 0); // Strategy - static CrewMember mort = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Gene Kerman", ProtoCrewMember.Gender.Male, "StockBroker", false, false, 0.65f, 0.35f, 0); - static CrewMember linus = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Researcher", false, false, 0.35f, 0.3f, 0); - static CrewMember walt = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Marketer", false, false, 0.45f, 0.9f, 0); - static CrewMember gus = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Wernher von Kerman", ProtoCrewMember.Gender.Male, "Mechanic", false, false, 0.45f, 0.45f, 0); + static CrewMember mort = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Mortimer Kerman", ProtoCrewMember.Gender.Male, "StockBroker", false, false, 0.65f, 0.35f, 0); + static CrewMember linus = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Linus Kerman", ProtoCrewMember.Gender.Male, "Researcher", false, false, 0.35f, 0.3f, 0); + static CrewMember walt = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Walt Kerman", ProtoCrewMember.Gender.Male, "Marketer", false, false, 0.45f, 0.9f, 0); + static CrewMember gus = new CrewMember(ProtoCrewMember.KerbalType.Crew, "Gus Kerman", ProtoCrewMember.Gender.Male, "Mechanic", false, false, 0.45f, 0.45f, 0); internal static CrewMember[] menuKerbals = new[] { mun1, orbit1, orbit2, orbit3, orbit4 }; internal static CrewMember[] instructors = new[] { gene, werner }; internal static CrewMember[] strategy = new[] { mort, linus, walt, gus }; + } + internal class UIKerbalMenu : MonoBehaviour + { internal CrewMember crewMember; } + internal class UIKerbalWerner : MonoBehaviour + { + internal CrewMember crewMember { get { return UIKerbals.instructors[1]; } } + } + + internal class UIKerbalGene : MonoBehaviour + { + internal CrewMember crewMember { get { return UIKerbals.instructors[0]; } } + } + + internal class UIKerbalStrategy : MonoBehaviour + { + static string[] names = new string[] { "Strategy_Mortimer(Clone)", "Strategy_ScienceGuy(Clone)", "Strategy_PRGuy(Clone)", "Strategy_MechanicGuy(Clone)" }; + + internal CrewMember crewMember + { + get + { + for (int i = 0; i < names.Length; i++) + { + if (gameObject?.name == names[i]) + return UIKerbals.strategy[i]; + } + return null; + } + } + + internal void Apply() + { + CustomHead head = GetComponent(); + if (head != null) head.Apply(); + } + } + [KSPAddon(KSPAddon.Startup.MainMenu, true)] internal class UIKerbalLoader : MonoBehaviour { @@ -38,19 +76,31 @@ void Awake() for (int i = 0; i < MenuKerbals?.Length; i++) { - if (int.TryParse(MenuKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.menuKerbals?.Length) + if (int.TryParse(MenuKerbals[i]?.GetValue("index"), out int index) && index < UIKerbals.menuKerbals?.Length) + { + UIKerbals.menuKerbals.Load(MenuKerbals[i], index); + } + } + + + ConfigNode[] Instructors = UserSettings.ConfigNode.GetNodes("Instructor"); + + for (int i = 0; i < Instructors?.Length; i++) + { + if (int.TryParse(Instructors[i]?.GetValue("index"), out int index) && index < UIKerbals.instructors?.Length) { - UIKerbal.menuKerbals.Load(MenuKerbals[i], index); + UIKerbals.instructors.Load(Instructors[i], index); } } - ConfigNode[] RnDKerbals = UserSettings.ConfigNode.GetNodes("RnDKerbal"); - for (int i = 0; i < RnDKerbals?.Length; i++) + ConfigNode[] StrategyKerbals = UserSettings.ConfigNode.GetNodes("StrategyKerbal"); + + for (int i = 0; i < StrategyKerbals?.Length; i++) { - if (int.TryParse(RnDKerbals[i]?.GetValue("index"), out int index) && index < UIKerbal.rndKerbals?.Length) + if (int.TryParse(StrategyKerbals[i]?.GetValue("index"), out int index) && index < UIKerbals.strategy?.Length) { - UIKerbal.rndKerbals.Load(RnDKerbals[i], index); + UIKerbals.strategy.Load(StrategyKerbals[i], index); } } } From 866bc04d35d31d0a17a90051a92139b5b1deded1 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 02:39:42 +0100 Subject: [PATCH 17/27] arm texture --- Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs | 6 +++++- Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs | 6 ++++++ Heads/[Source]/SigmaReplacementsHeads/Triggers.cs | 1 - Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs | 3 +-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs index fb0f524..7db4b2a 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs @@ -32,6 +32,7 @@ internal class CustomHead : MonoBehaviour Texture hairTex = null; Texture armTex = null; + // Normals Texture pupilLeftNrm = null; Texture pupilRightNrm = null; @@ -97,6 +98,7 @@ void LoadFor(ProtoCrewMember kerbal) tongue = tongue ?? info.tongue.Pick(kerbal, info.useGameSeed); head = head ?? info.head.Pick(kerbal, info.useGameSeed); hair = hair ?? info.hair.At(head, info.head) ?? info.hair.Pick(kerbal, info.useGameSeed); + arm = arm ?? info.arm.Pick(kerbal, info.useGameSeed); // Textures pupilLeftTex = pupilLeftTex ?? info.pupilLeftTex.Pick(kerbal, info.useGameSeed); @@ -108,6 +110,7 @@ void LoadFor(ProtoCrewMember kerbal) tongueTex = tongueTex ?? info.tongueTex.Pick(kerbal, info.useGameSeed); headTex = headTex ?? info.headTex.Pick(kerbal, info.useGameSeed); hairTex = hairTex ?? info.hairTex.At(headTex, info.headTex) ?? info.hairTex.Pick(kerbal, info.useGameSeed); + armTex = armTex ?? info.armTex.Pick(kerbal, info.useGameSeed); // Normals pupilLeftNrm = pupilLeftNrm ?? info.pupilLeftNrm.Pick(kerbal, info.useGameSeed); @@ -119,6 +122,7 @@ void LoadFor(ProtoCrewMember kerbal) tongueNrm = tongueNrm ?? info.tongueNrm.Pick(kerbal, info.useGameSeed); headNrm = headNrm ?? info.headNrm.Pick(kerbal, info.useGameSeed); hairNrm = hairNrm ?? info.hairNrm.At(headNrm, info.headNrm) ?? info.hairNrm.Pick(kerbal, info.useGameSeed); + armNrm = armNrm ?? info.armNrm.Pick(kerbal, info.useGameSeed); } } } @@ -198,7 +202,7 @@ void ApplyTo(ProtoCrewMember kerbal) material.SetNormal(hairNrm); } - if (name == "arm") + if (name == "hand_left01" || name == "hand_right01") { material.SetColor(arm); material.SetTexture(armTex); diff --git a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs index 34eb532..78a4174 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs @@ -53,6 +53,7 @@ internal class HeadInfo internal List tongue = new List(); internal List head = new List(); internal List hair = new List(); + internal List arm = new List(); // Textures Lists internal List pupilLeftTex = new List(); @@ -64,6 +65,7 @@ internal class HeadInfo internal List tongueTex = new List(); internal List headTex = new List(); internal List hairTex = new List(); + internal List armTex = new List(); // Normals Lists internal List pupilLeftNrm = new List(); @@ -75,6 +77,7 @@ internal class HeadInfo internal List tongueNrm = new List(); internal List headNrm = new List(); internal List hairNrm = new List(); + internal List armNrm = new List(); // Get @@ -161,6 +164,7 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) tongue = Parse(info.GetValues("tongue"), tongue); head = Parse(info.GetValues("head"), head); hair = Parse(info.GetValues("hair"), hair); + arm = Parse(info.GetValues("arm"), arm); // Parse HeadInfo Textures pupilLeftTex = Parse(info.GetValues("pupilLeftTex"), pupilLeftTex); @@ -172,6 +176,7 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) tongueTex = Parse(info.GetValues("tongueTex"), tongueTex); headTex = Parse(info.GetValues("headTex"), headTex); hairTex = Parse(info.GetValues("hairTex"), hairTex); + armTex = Parse(info.GetValues("armTex"), armTex); // Parse HeadInfo Normals pupilLeftNrm = Parse(info.GetValues("pupilLeftNrm"), pupilLeftNrm); @@ -183,6 +188,7 @@ internal HeadInfo(ConfigNode requirements, ConfigNode info) tongueNrm = Parse(info.GetValues("tongueNrm"), tongueNrm); headNrm = Parse(info.GetValues("headNrm"), headNrm); hairNrm = Parse(info.GetValues("hairNrm"), hairNrm); + armNrm = Parse(info.GetValues("armNrm"), armNrm); // Parse Folders ParseFolders(info.GetNode("Folders")); diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs index 272632d..a99150b 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -1,6 +1,5 @@ using UnityEngine; using System.Linq; -using KSP.UI; using KSP.UI.Screens; diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs index c53c731..e2f1312 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -1,5 +1,4 @@ using UnityEngine; -using System.Linq; namespace SigmaReplacements @@ -46,7 +45,7 @@ internal class UIKerbalGene : MonoBehaviour internal class UIKerbalStrategy : MonoBehaviour { static string[] names = new string[] { "Strategy_Mortimer(Clone)", "Strategy_ScienceGuy(Clone)", "Strategy_PRGuy(Clone)", "Strategy_MechanicGuy(Clone)" }; - + internal CrewMember crewMember { get From 1bee4229cda18bca6cc7202f3d067056cac5aa25 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 02:39:52 +0100 Subject: [PATCH 18/27] bumpmap --- .../Distribution/SigmaReplacementsHeads.dll | Bin 33280 -> 33280 bytes .../SigmaReplacementsHeads/Extensions.cs | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 159a240012ece3834e0bbecb773f218bddde2d6d..1b91aaaf40e463e7aac7a40f46476e83e2eeba40 100644 GIT binary patch delta 9829 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 R%cD<@?8w@5Qngn){|kj`G*JKm delta 9554 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 diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs index 4ed148d..5180064 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs @@ -54,8 +54,10 @@ internal static void SetTexture(this Material material, Texture newTex) internal static void SetNormal(this Material material, Texture newTex) { - if (material != null && newTex != null && material.HasProperty("_BumpMap")) + if (material != null && newTex != null) { + material.shader = Shader.Find("Bumped Diffuse"); + Texture oldTex = material.GetTexture("_BumpMap"); if (oldTex != null) From e0392be6cb0944d4da059ccd86f56835cced0c98 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 02:58:19 +0100 Subject: [PATCH 19/27] non-random bumpmaps --- .../Distribution/SigmaReplacementsHeads.dll | Bin 33280 -> 33792 bytes .../SigmaReplacementsHeads/CustomHead.cs | 20 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 1b91aaaf40e463e7aac7a40f46476e83e2eeba40..b023be78e09c32985b5ffb6dca9da702a64440bd 100644 GIT binary patch delta 1255 zcmY+Edq`7J9LK-sHt)IX&Z(P?sXaC`wWcB!Hq0c=Y_+LdOS6Y%FR?!&i;DTcY4)Or zv`(M|qW&R4{nv#k>W_*r>5u5Y1nEHtMFd3@*n{lc$3|W_yXW)!oZs*4+;i{gIV1F3 z5UyUx&S?9)1IG0Z*)EwB106gd>B0WN*sTU@*&tA-21WpjDdx6Y9`O!m(*UrLxrG9@ zgXGP>9^oMuZyoF+@sKWdm*kPt>zD5ZOCfW6n0y2<> z<4**%^_1}HHvC;M56E)J-UF1KNX`+wl-)>PA~+~}klZhv6&1g=(3Dh^D|PN=Z&Nc_ zmo1-W^GvC;f!($hXl5TPPs?Oe+~jDckkjtEo`wZlRe;h%e4_r?30n#s^zWFqI(i~>FG^LduL{6S16J6JB6E^ ztJFu)i`~*=vH&A|rNBAob2EVh_txm{o1l_q>HqGf=3>s5=4sJ^X?CnKD>~s-M=;D1 zLLGQos?(5JrWyES(2sdenuX@Ix@#4kbP*;E8kOC234&$18f!$Dlzu;z{bk_o#+_xMc34g=no*hxYNM^wA=G-KZWyoIcR?xSXIbv=Y+^5~M0P1M!hI zsTvW3QsiZl4C5yS~gx=o*EhVygpTNW<&qvx~c53)L}(B+HCg3&mMt~TS)lH zF~D0pur*v2{{7QeKYXOZfBMl0*Nfhm!Xjp3J7^pt>J;5--xYH^gtkF8-tJRe-OWU? ScKk{bu6mWU?yn?PEdB$Ay#RRt delta 1160 zcmY+ET}V_x7>3_Dt!K`*yOygi>rdovTBfT>g-V&EZMM0qu0L6lkyc1xl!cX*up5R- zg0u~&L{UPPbdz)-%r3HslCHc6iY_Eb=%!R8qaw69KOS;mIP-k(J2PkIo0)L85WXhd z=ysPjFV;aXpW#likQ|_m2P7>x(;s{1Cn>a@m^ zCh=obt~u9OX6b%3=(HqdN`4HhXO)4GX)%D#AZ*;LB_x31Ae-?f3d2?EXS_!Fgff$IDD=?;#Hbrp76hXYvokcviL44Qg0xG3SB=8%iU*(pDsBF!DMKDU(_qeAejx1V1{mp+X9w$pJpE}>m+b)@j{dK=Gu~w#(c1pzM5GMOs(`BC=-To&^n9Gx6!gC~& GBmM*Xkndgq diff --git a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs index 7db4b2a..742a2a7 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs @@ -113,16 +113,16 @@ void LoadFor(ProtoCrewMember kerbal) armTex = armTex ?? info.armTex.Pick(kerbal, info.useGameSeed); // Normals - pupilLeftNrm = pupilLeftNrm ?? info.pupilLeftNrm.Pick(kerbal, info.useGameSeed); - pupilRightNrm = pupilRightNrm ?? info.pupilRightNrm.At(pupilLeftNrm, info.pupilLeftNrm) ?? info.pupilRightNrm.Pick(kerbal, info.useGameSeed); - eyeballLeftNrm = eyeballLeftNrm ?? info.eyeballLeftNrm.Pick(kerbal, info.useGameSeed); - eyeballRightNrm = eyeballRightNrm ?? info.eyeballRightNrm.At(eyeballLeftNrm, info.eyeballLeftNrm) ?? info.eyeballRightNrm.Pick(kerbal, info.useGameSeed); - upTeeth01Nrm = upTeeth01Nrm ?? info.upTeeth01Nrm.Pick(kerbal, info.useGameSeed); - upTeeth02Nrm = upTeeth02Nrm ?? info.upTeeth02Nrm.At(upTeeth01Nrm, info.upTeeth01Nrm) ?? info.upTeeth02Nrm.Pick(kerbal, info.useGameSeed); - tongueNrm = tongueNrm ?? info.tongueNrm.Pick(kerbal, info.useGameSeed); - headNrm = headNrm ?? info.headNrm.Pick(kerbal, info.useGameSeed); - hairNrm = hairNrm ?? info.hairNrm.At(headNrm, info.headNrm) ?? info.hairNrm.Pick(kerbal, info.useGameSeed); - armNrm = armNrm ?? info.armNrm.Pick(kerbal, info.useGameSeed); + pupilLeftNrm = pupilLeftNrm ?? info.pupilLeftNrm.At(pupilLeftTex, info.pupilLeftTex) ?? info.pupilLeftNrm.Pick(kerbal, info.useGameSeed); + pupilRightNrm = pupilRightNrm ?? info.pupilRightNrm.At(pupilRightTex, info.pupilRightTex) ?? info.pupilRightNrm.Pick(kerbal, info.useGameSeed); + eyeballLeftNrm = eyeballLeftNrm ?? info.eyeballLeftNrm.At(eyeballLeftTex, info.eyeballLeftTex) ?? info.eyeballLeftNrm.Pick(kerbal, info.useGameSeed); + eyeballRightNrm = eyeballRightNrm ?? info.eyeballRightNrm.At(eyeballRightTex, info.eyeballRightTex) ?? info.eyeballRightNrm.Pick(kerbal, info.useGameSeed); + upTeeth01Nrm = upTeeth01Nrm ?? info.upTeeth01Nrm.At(upTeeth01Tex, info.upTeeth01Tex) ?? info.upTeeth01Nrm.Pick(kerbal, info.useGameSeed); + upTeeth02Nrm = upTeeth02Nrm ?? info.upTeeth02Nrm.At(upTeeth02Tex, info.upTeeth02Tex) ?? info.upTeeth02Nrm.Pick(kerbal, info.useGameSeed); + tongueNrm = tongueNrm ?? info.tongueNrm.At(tongueTex, info.tongueTex) ?? info.tongueNrm.Pick(kerbal, info.useGameSeed); + headNrm = headNrm ?? info.headNrm.At(headTex, info.headTex) ?? info.headNrm.Pick(kerbal, info.useGameSeed); + hairNrm = hairNrm ?? info.hairNrm.At(hairTex, info.hairTex) ?? info.hairNrm.Pick(kerbal, info.useGameSeed); + armNrm = armNrm ?? info.armNrm.At(armTex, info.armTex) ?? info.armNrm.Pick(kerbal, info.useGameSeed); } } } From 90f4d77c17064661575c96533060a79db91e6d45 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 03:24:50 +0100 Subject: [PATCH 20/27] debug spam --- .../Distribution/SigmaReplacementsHeads.dll | Bin 33792 -> 34816 bytes .../SigmaReplacementsHeads/CustomHead.cs | 8 ++++++++ .../SigmaReplacementsHeads/HeadInfo.cs | 13 +++++++++++-- .../SigmaReplacementsHeads/Triggers.cs | 12 ++++++++++++ .../SigmaReplacementsHeads/UIKerbals.cs | 4 ++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index b023be78e09c32985b5ffb6dca9da702a64440bd..00b211eabffebe0d5d0f6b9220c4522eb46f106c 100644 GIT binary patch delta 6771 zcma)B33Qa#b-wSPnSXXkqtQN68A%9@7$L-BBqSM-kTF6Fi^L*K91Fx|gakh_h6piY zvEyTd0Y47M3k1dS1|g2AY}c_NhJYQKHnDN3+qf>J*iC7IW1QNd;W*ImzS$(1oRi_q z_wK#lz4zU>{O^An`X15x_G)_{$y>4UW-CQLmnhHg6s1I4VX%dbmk;hcx*%ciL894g z=qGZS_vLzBryxLI^bAq9%+-ozt0;6_*#eUv->vdd5fpv$bx|lDmKQ}{=2>Lm&rEzZ zve2jKwY!=~$nS418U?o-N6UQ=5fdUo^U=_yjGQgB8;DDw5~Ue$gG*n zfeIuhGLCZ3r=mT}Q_kl?Pmu8?Thnw}rv)a!FEE2am8J#!T;XUW^_H5*f=ZDFLnw#$ zUkWi11;e%H1nx#aSoZW_ZX&WJV1|!FPq``NF;}vfCEs>+FA67JjLiC=64=SBd-P&0 zn55}}T&@RgUc4?dePAVWs=7M4E>2;Jr;tnBd7@s1+Uyj+bY{nmB3X&(-NSLKlV z(<>8S9c+8oAuqyK>Wl`#Z>CcQGBytMXZS?sQV?4)OmlcivoT;AU1NOUlovAd^Dlyp zJU7nZ8q%##8&{(y7i+ppW@SBvNq;q~P)l;jf6rQoeQ<~GyTFsa-N|_H9b;^I&os1H zd1s(WF3HY`neh-u&5vcz!$MxnKH|-Gq1M%4y6y+yVXJV-r*p<>XnvU^vCeIO(;$%l z`q#hsB?b z#!qKYfQr8sjjxScvy7xfxj%nKXh{E6iIGb0ihE`l9m!jhQZv0iuy$m!7BaLXq(}jT zQ-t*j=z~ru3R~M@jcjt2P}5AtR@k~qP?6SyGu#}QgmbT#B_3P zAhMUY9lO7pB;Oz9(|(mCKO2=b@?&<`4t|U&CFnF6O5ef$ykXe?N|Fo~`da@l-pe%Z zrHp%FiG3WNSbeQM^uFCLT}3`V28)V(RTsF3a9{Ic z5iD`U#W;xrK9Y_lCa-v8AM#xD$U|rx$?{F488`PA(u>CWs-BFeyC;^8B~CYdDO9@fQkbw5vJZJMuZPfJUf)Ezr1&7)V(D1o zbi-#`r3=rt39~Idr9KVwT7m}iT3_lLaUh;n~ zxFpm>KXnPbdc!AmrbdL@7_MN)h9smwI&P_fjPO;Jk3C0mg5H%0J$xApiZr*qIDzyo zzBYGdffz+uyYUwWzthhm8Q$r}71d@KNvW)78YQXnM|W&MCApKP0^24PX^T?ju1RH3 z&MK3+?7j@#E2uyfwFz;9M%hue*z*T6o)~KVdD*xO%s7owA&Ptj9%^EqC@)6pG3CCD zWAG@9dz_1U$T{UjaQRMoE%5E~A6LK6jJjDSn*uLkaK=YbOHibbe%ZwD4BezIGy$BR zjxlLb6Q8$%2KnR386ib@hZ69`wB05{@vsbVOuLD{ve>tHR5S^{%2bENx6eyd(>x1X z6nli^jEah!PgAj5=Hpz&K1+fz|L*y9xIs`7^mciu;%-qm@Lv_XO`(;#hrTAp2Eo{= z@BxL}Ol(!m823YH4T<%_@o9LvCeKtDQLGCiWCIr3X?A8Tc zQuv<2-zk*T9RgtzOfR)C-ca&ZJIgz*jJI4{fIc^)OJR}1v&w#6;cpaPRCrzCHHEXR z9JNB>LWSK56BT9y#|j#!lp=*S3M+w==$x$&V=B^L6JC1Q^$=t-KO_%NP0xHBBMaCM z0B<^Zl!vX~1I}@NPrf&`DD*t!pST$f{TOhr?KNS-91K9dr0_k3zf&lQ?Iyvv)WUc} z$y@C#@3b=Ba-9JB+>9=TMGDU<`+0@GQFzgHA_S-FO1Y+RmX*U+C|szpTVbNYY=z?# z7AdSzSP7g&Tf{qh8l}_U>pC5Fz9w|FpltsD_A>eq*g+S8hZK6nMctD|&1mNMvD--6 zLfU^zYjv5pDyLQ#iEDCowGZ+`%5oC&SMt}@zMQXgGr4fO5j~vo3%ejQy@W@aXou}5 zwy&h8rU)^WH6uc=6e%lwZXluv=Pc1SXh(#brpC0>B7x?|v}Z*kb;Puv3lHrKYt-Ws zltRapwuAP#SvwU}IcbOev`C?ToN(xYme@{V9@#GGNd$!}*#zfIAVYjByeYnQ5cF69vX3~=p?JJYt>Z7kKLt%22?ziSp zcU4&XzO%?Wg09B2Db_sNiAxfvnW5ifEuafA?S5;3CgPsU+(^CG8l=5S+d+@ncUs4g zc{+1DFr$xIOX%Dz*0xcuSz1f!$}HmkS$)bno|5XLBBt)fq3+J9K55Fc^j9zM5DqxP6~-C9E@pxqZH9kyD!79+E4GiVNOtIQ=j z$Jl1lCiSBhYuBxH^sf=^mTiKqp8Wi}!04s8sy9$4uBAlbWon?k^W^Vqv$Xye)tp!MX0u_bCF z>9=~D{JXmRly2?3c+vWl_9wbWe_s1famKw$$S>>e72UFVR%KbY)-o=)YunWo*C+yOaD`vZ%l85Tk zL;qlzERKsSmMviKq@9$YW$T+Yme*@$tx(@dM=ja-nWjk*sx+t z^%DGmw%S%gUg`w;=s{pU9RLRDFmM9B1+1ixfYa#`uwKc{^cm!P=%WytW#qO`r!_Rr zz6@At|AE3~g5@*7arRG?Y|^;1>Dn5)%f1Xa+x`P!tNo0&0rpQ6noKO`EA(5~f11Mk z6!t0XS9nTc(IwT8&aQri`P4>lkW1uZw|hB+Vj*e6Prd<&9|hA-B>lRHd!nalSPJ> zDo$A>owBT@cVU0mGF4d2lSLl*97N@TzbsOP9T!%4y2(2bYRdEma^_PV)zfk^XekEV zK@HS}wq04sSxpZ@TSLp`fwr1Z>U6j*hp7>`76BYa6FQa6kCpu<>!%g4cEQ_E8>kz} zy3tbZbb3JP%*;eQcUeNs%EJIsZXImh!RYj5n0Px zsv#PSqSX|4VE%@C`!Tm&D1{4%bUJncroRKlwf`0Vg;xApL8BxkXemh*CI*hFfYoPp=w%5t5E4TI!d37i0D>i z`7YXsQIM7MwadP)w4{yePip_vH|_41C%u(*{mh?l4ZPHKUg#Fm60)=9=Jgi_nvG{P zt5u|W<_g=uXWc$?arD1}@bFN!z<NfT!=8*jK9mKg0YkDF6Tf delta 5521 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 ParseFolder(string path) // Order DataBase internal static void OrderDB() { + Debug.Log("HeadInfo.OrderDB", "Total HeadInfo count = " + List?.Count); + DataBase.AddRange(List.Where(h => !string.IsNullOrEmpty(h?.name) && !string.IsNullOrEmpty(h?.collection))); DataBase.AddRange(List.Where(h => !string.IsNullOrEmpty(h?.name) && string.IsNullOrEmpty(h?.collection))); DataBase.AddRange(List.Where(h => string.IsNullOrEmpty(h?.name) && !string.IsNullOrEmpty(h?.collection))); DataBase.AddRange(List.Where(h => h != null && string.IsNullOrEmpty(h?.name) && string.IsNullOrEmpty(h?.collection))); + + Debug.Log("HeadInfo.OrderDB", "Valid HeadInfo count = " + DataBase?.Count); } } } } + diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs index a99150b..2f9d8e1 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -12,6 +12,8 @@ class MenuTriggers : MonoBehaviour { void Start() { + Debug.Log("MenuTriggers", "Start"); + Transform[] transforms = Resources.FindObjectsOfTypeAll(); int menu = 0; @@ -53,6 +55,8 @@ class KSCTriggers : MonoBehaviour { void Start() { + Debug.Log("KSCTriggers", "Start"); + Administration admin = Resources.FindObjectsOfTypeAll().FirstOrDefault(); if (admin != null && admin.GetComponent() == null) @@ -96,6 +100,8 @@ internal class AdminTrigger : MonoBehaviour { void Start() { + Debug.Log("AdminTrigger", "Start"); + UIKerbalStrategy[] strategies = GetComponentsInChildren(); for (int i = 0; i < strategies?.Length; i++) @@ -111,12 +117,16 @@ class FlightTriggers : MonoBehaviour { void Start() { + Debug.Log("FlightTriggers", "Start"); + GameEvents.onCrewOnEva.Add(OnCrewOnEva); TimingManager.LateUpdateAdd(TimingManager.TimingStage.Normal, Add); } void OnCrewOnEva(GameEvents.FromToAction action) { + Debug.Log("FlightTriggers", "OnCrewOnEva"); + GameEvents.onCrewOnEva.Remove(OnCrewOnEva); KerbalEVA kerbalEVA = action.to.GetComponent(); if (kerbalEVA.GetComponent() == null) @@ -125,6 +135,8 @@ void OnCrewOnEva(GameEvents.FromToAction action) void Add() { + Debug.Log("FlightTriggers", "Add"); + TimingManager.LateUpdateRemove(TimingManager.TimingStage.Normal, Add); KerbalEVA[] kerbalEVAs = Resources.FindObjectsOfTypeAll(); diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs index e2f1312..aaa0530 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs @@ -71,6 +71,8 @@ internal class UIKerbalLoader : MonoBehaviour { void Awake() { + Debug.Log("UIKerbalLoader", "Awake"); + ConfigNode[] MenuKerbals = UserSettings.ConfigNode.GetNodes("MenuKerbal"); for (int i = 0; i < MenuKerbals?.Length; i++) @@ -111,6 +113,8 @@ internal class CrewMember : ProtoCrewMember internal CrewMember(KerbalType type, string name, Gender gender, string trait, bool veteran, bool isBadass, float courage, float stupidity, int experienceLevel) : base(type, name) { + Debug.Log("CrewMember", "new CrewMember from stats"); + this.type = type; this.name = name; this.gender = gender; From 0d3e3619d4c261cb22aacbaddb913625ecf1dfa1 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 03:33:50 +0100 Subject: [PATCH 21/27] avoid nullrefs --- .../Distribution/SigmaReplacementsHeads.dll | Bin 34816 -> 34816 bytes .../SigmaReplacementsHeads/Extensions.cs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index 00b211eabffebe0d5d0f6b9220c4522eb46f106c..ea5d3ba74a2c2cdaf1e667880440f8ba2b52d53d 100644 GIT binary patch delta 717 zcmY+?O=uHA7zW^X#-=lgwl-KwNYavm5P!B(v`Cc@Y^~{E(xi!4165Eeco77_pwj%1 zpuu`b91w~TC7?x!UKT;oLk%9JAm&g!Rw^Dmh(<^$XsPb5n=P5c3=i-3&A`kgb2OQw zxh!3cqo}WTXqyBLm!z3)r7&%%!@vMebb-p7%m%HXM=ce$ij!P zVaU#Xm=65!+qu1mk02AQYn_eatFFKN5Fdv$sb&I#d~f#SdbmYp-c~WIEQm8c2Q8fx zXMJ|Md`ew9$EMVZ6mIMw@FT11G4XOgzKIV$N8-`xtvv!LX}YQ0AVB~xG^OD}fH!6n z_@ZaG5aAOIeL<}0*-Ir0qBXj8La3oK1be?0rZJ#AVh97et|H1OaY@&LqA>31>LgJf zL0Nt{d_rnNde@Wl9!^n zN^md7muL^`Aw>G~(1j4Jhw?>wNeZGM2x1QgLB0)wvU}& zcArjU^tlf5Lth#tnjpmQN Date: Sun, 5 Nov 2017 17:01:48 +0100 Subject: [PATCH 22/27] avoid timingmanager --- .../Distribution/SigmaReplacementsHeads.dll | Bin 34816 -> 35328 bytes .../SigmaReplacementsHeads/Triggers.cs | 41 +++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll index ea5d3ba74a2c2cdaf1e667880440f8ba2b52d53d..d003d92abe0e881eccd9847d77ab89e949f94648 100644 GIT binary patch delta 6640 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 EA2htErvLx| delta 6127 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 H%rpK6y!?#9 diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs index 2f9d8e1..2582b8b 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs +++ b/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs @@ -59,7 +59,7 @@ void Start() Administration admin = Resources.FindObjectsOfTypeAll().FirstOrDefault(); - if (admin != null && admin.GetComponent() == null) + if (admin?.gameObject != null && admin.GetComponent() == null) { admin.gameObject.AddComponent(); } @@ -112,48 +112,49 @@ void Start() } } - [KSPAddon(KSPAddon.Startup.Flight, false)] + [KSPAddon(KSPAddon.Startup.MainMenu, true)] class FlightTriggers : MonoBehaviour { void Start() { + DontDestroyOnLoad(this); + Debug.Log("FlightTriggers", "Start"); + GameEvents.onVesselLoaded.Add(OnVesselLoaded); + GameEvents.onVesselCreate.Add(OnVesselLoaded); GameEvents.onCrewOnEva.Add(OnCrewOnEva); - TimingManager.LateUpdateAdd(TimingManager.TimingStage.Normal, Add); - } - - void OnCrewOnEva(GameEvents.FromToAction action) - { - Debug.Log("FlightTriggers", "OnCrewOnEva"); - - GameEvents.onCrewOnEva.Remove(OnCrewOnEva); - KerbalEVA kerbalEVA = action.to.GetComponent(); - if (kerbalEVA.GetComponent() == null) - kerbalEVA.gameObject.AddComponent(); } - void Add() + void OnVesselLoaded(Vessel vessel) { - Debug.Log("FlightTriggers", "Add"); + Debug.Log("FlightTriggers.OnVesselLoaded", "Vessel = " + vessel); - TimingManager.LateUpdateRemove(TimingManager.TimingStage.Normal, Add); - KerbalEVA[] kerbalEVAs = Resources.FindObjectsOfTypeAll(); + KerbalEVA[] kerbalEVAs = vessel.GetComponentsInChildren(true); - for (int i = 0; i < kerbalEVAs.Length; i++) + for (int i = 0; i < kerbalEVAs?.Length; i++) { - if (kerbalEVAs[i].GetComponent() == null) + if (kerbalEVAs[i]?.GetComponent() == null) kerbalEVAs[i].gameObject.AddComponent(); } kerbalExpressionSystem[] kerbalIVAs = Resources.FindObjectsOfTypeAll(); - for (int i = 0; i < kerbalIVAs.Length; i++) + for (int i = 0; i < kerbalIVAs?.Length; i++) { if (kerbalIVAs[i]?.GetComponent() == null) kerbalIVAs[i].gameObject.AddComponent(); } } + + void OnCrewOnEva(GameEvents.FromToAction action) + { + Debug.Log("FlightTriggers.OnCrewOnEva", "Part = " + action.to); + + KerbalEVA kerbalEVA = action.to.GetComponent(); + if (kerbalEVA.GetComponent() == null) + kerbalEVA.gameObject.AddComponent(); + } } } } From b0a040187a31ec7b86173fec9c1c378f56ec1c5b Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 17:19:20 +0100 Subject: [PATCH 23/27] readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6f32795..e4769e7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Sigma Replacements -**Hanles replacement of various KSP assets** +**Handles replacement of various KSP assets** KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/-0/ @@ -10,6 +10,6 @@ Download Latest Release: https://github.com/Sigma88/Sigma-KerbalReplacements/rel Dev versions: -- *Heads* https://github.com/Sigma88/Sigma-Replacements/tree/Heads -- *Suits* https://github.com/Sigma88/Sigma-Replacements/tree/Suits -- *Textures* https://github.com/Sigma88/Sigma-Replacements/tree/Textures +- Heads - https://github.com/Sigma88/Sigma-Replacements/tree/Heads +- Suits - https://github.com/Sigma88/Sigma-Replacements/tree/Suits +- Textures - https://github.com/Sigma88/Sigma-Replacements/tree/Textures From 81608febeaecda1a5ceff6445d864ba8b426c68d Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 18:57:25 +0100 Subject: [PATCH 24/27] change folder structure --- Heads/README.md | 2 +- .../SigmaReplacementsHeads.sln | 25 ------------------ .../Distribution/SigmaReplacementsHeads.dll | Bin 35328 -> 35328 bytes .../SigmaReplacements/Heads}/CustomHead.cs | 0 .../SigmaReplacements/Heads}/DebugLogger.cs | 0 .../SigmaReplacements/Heads}/Extensions.cs | 0 .../SigmaReplacements/Heads}/HeadInfo.cs | 0 .../Heads}/Properties/AssemblyInfo.cs | 0 .../Heads}/SettingsLoader.cs | 0 .../Heads}/SigmaReplacementsHeads.csproj | 12 +++------ .../SigmaReplacements/Heads}/Triggers.cs | 0 .../SigmaReplacements/Heads}/UIKerbals.cs | 0 .../SigmaReplacements/Heads}/UserSettings.cs | 0 .../SigmaReplacements/Heads}/Version.cs | 0 14 files changed, 5 insertions(+), 34 deletions(-) delete mode 100644 Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln rename {Heads/[Source] => [Source]}/Distribution/SigmaReplacementsHeads.dll (65%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/CustomHead.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/DebugLogger.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/Extensions.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/HeadInfo.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/Properties/AssemblyInfo.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/SettingsLoader.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/SigmaReplacementsHeads.csproj (83%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/Triggers.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/UIKerbals.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/UserSettings.cs (100%) rename {Heads/[Source]/SigmaReplacementsHeads => [Source]/SigmaReplacements/Heads}/Version.cs (100%) diff --git a/Heads/README.md b/Heads/README.md index 8dd9451..db7ea3a 100644 --- a/Heads/README.md +++ b/Heads/README.md @@ -6,6 +6,6 @@ KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/-0/ -Download Latest Release: https://github.com/Sigma88/Sigma-KerbalReplacements/releases +Download Latest Release: https://github.com/Sigma88/Sigma-Replacements/releases Dev version: https://github.com/Sigma88/Sigma-Replacements/tree/Heads diff --git a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln b/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln deleted file mode 100644 index 4c82774..0000000 --- a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SigmaReplacementsHeads", "SigmaReplacementsHeads.csproj", "{B3769F47-5A16-43C9-995F-1B3B15BE97CC}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E50D5E74-B8EE-48C9-9D22-5FCF86BB4E44} - EndGlobalSection -EndGlobal diff --git a/Heads/[Source]/Distribution/SigmaReplacementsHeads.dll b/[Source]/Distribution/SigmaReplacementsHeads.dll similarity index 65% rename from Heads/[Source]/Distribution/SigmaReplacementsHeads.dll rename to [Source]/Distribution/SigmaReplacementsHeads.dll index d003d92abe0e881eccd9847d77ab89e949f94648..0c62e186242a279219fd3c6b90cc63be60bd4bc3 100644 GIT binary patch delta 5210 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 diff --git a/Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs b/[Source]/SigmaReplacements/Heads/CustomHead.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/CustomHead.cs rename to [Source]/SigmaReplacements/Heads/CustomHead.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/DebugLogger.cs b/[Source]/SigmaReplacements/Heads/DebugLogger.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/DebugLogger.cs rename to [Source]/SigmaReplacements/Heads/DebugLogger.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/Extensions.cs b/[Source]/SigmaReplacements/Heads/Extensions.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/Extensions.cs rename to [Source]/SigmaReplacements/Heads/Extensions.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs b/[Source]/SigmaReplacements/Heads/HeadInfo.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/HeadInfo.cs rename to [Source]/SigmaReplacements/Heads/HeadInfo.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/Properties/AssemblyInfo.cs b/[Source]/SigmaReplacements/Heads/Properties/AssemblyInfo.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/Properties/AssemblyInfo.cs rename to [Source]/SigmaReplacements/Heads/Properties/AssemblyInfo.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs b/[Source]/SigmaReplacements/Heads/SettingsLoader.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/SettingsLoader.cs rename to [Source]/SigmaReplacements/Heads/SettingsLoader.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj b/[Source]/SigmaReplacements/Heads/SigmaReplacementsHeads.csproj similarity index 83% rename from Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj rename to [Source]/SigmaReplacements/Heads/SigmaReplacementsHeads.csproj index b563497..c25f19f 100644 --- a/Heads/[Source]/SigmaReplacementsHeads/SigmaReplacementsHeads.csproj +++ b/[Source]/SigmaReplacements/Heads/SigmaReplacementsHeads.csproj @@ -4,7 +4,7 @@ Debug AnyCPU - {B3769F47-5A16-43C9-995F-1B3B15BE97CC} + {D6D14E8B-1ED9-43D1-A9D2-4F3A4A6A6F4D} Library Properties SigmaReplacements.Heads @@ -17,7 +17,7 @@ true full false - ..\Distribution\ + ..\..\Distribution\ DEBUG;TRACE prompt 4 @@ -45,15 +45,11 @@ False - ..\..\..\[References]\KerbalSpaceProgram\Assembly-CSharp.dll + ..\..\..\..\[References]\KerbalSpaceProgram\Assembly-CSharp.dll False - ..\..\..\[References]\KerbalSpaceProgram\UnityEngine.dll - - - False - ..\..\..\[References]\KerbalSpaceProgram\UnityEngine.UI.dll + ..\..\..\..\[References]\KerbalSpaceProgram\UnityEngine.dll diff --git a/Heads/[Source]/SigmaReplacementsHeads/Triggers.cs b/[Source]/SigmaReplacements/Heads/Triggers.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/Triggers.cs rename to [Source]/SigmaReplacements/Heads/Triggers.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs b/[Source]/SigmaReplacements/Heads/UIKerbals.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/UIKerbals.cs rename to [Source]/SigmaReplacements/Heads/UIKerbals.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/UserSettings.cs b/[Source]/SigmaReplacements/Heads/UserSettings.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/UserSettings.cs rename to [Source]/SigmaReplacements/Heads/UserSettings.cs diff --git a/Heads/[Source]/SigmaReplacementsHeads/Version.cs b/[Source]/SigmaReplacements/Heads/Version.cs similarity index 100% rename from Heads/[Source]/SigmaReplacementsHeads/Version.cs rename to [Source]/SigmaReplacements/Heads/Version.cs From 032884bfe457e6be1fcf6f7b2b6cceacc2f527c6 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 18:57:56 +0100 Subject: [PATCH 25/27] solution --- .../SigmaReplacements/SigmaReplacements.sln | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 [Source]/SigmaReplacements/SigmaReplacements.sln diff --git a/[Source]/SigmaReplacements/SigmaReplacements.sln b/[Source]/SigmaReplacements/SigmaReplacements.sln new file mode 100644 index 0000000..51a1979 --- /dev/null +++ b/[Source]/SigmaReplacements/SigmaReplacements.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26730.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SigmaReplacementsHeads", "Heads\SigmaReplacementsHeads.csproj", "{D6D14E8B-1ED9-43D1-A9D2-4F3A4A6A6F4D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SigmaReplacementsSuits", "Suits\SigmaReplacementsSuits.csproj", "{B3769F47-5A16-43C9-995F-1B3B15BE97CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SigmaReplacementsTextures", "Textures\SigmaReplacementsTextures.csproj", "{85E7DC1E-15EA-4C98-B6D3-52CB27BB9526}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D6D14E8B-1ED9-43D1-A9D2-4F3A4A6A6F4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6D14E8B-1ED9-43D1-A9D2-4F3A4A6A6F4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6D14E8B-1ED9-43D1-A9D2-4F3A4A6A6F4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6D14E8B-1ED9-43D1-A9D2-4F3A4A6A6F4D}.Release|Any CPU.Build.0 = Release|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3769F47-5A16-43C9-995F-1B3B15BE97CC}.Release|Any CPU.Build.0 = Release|Any CPU + {85E7DC1E-15EA-4C98-B6D3-52CB27BB9526}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85E7DC1E-15EA-4C98-B6D3-52CB27BB9526}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85E7DC1E-15EA-4C98-B6D3-52CB27BB9526}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85E7DC1E-15EA-4C98-B6D3-52CB27BB9526}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E50D5E74-B8EE-48C9-9D22-5FCF86BB4E44} + EndGlobalSection +EndGlobal From 3c8365eaa9a9f4af7e05c9b7ae18285582c21e50 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 19:24:07 +0100 Subject: [PATCH 26/27] forum thread --- .../Replacements/Heads/Plugins/SigmaReplacementsHeads.version | 2 +- Heads/License.txt | 2 +- Heads/README.md | 2 +- README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version index 4bccda2..eb4eea0 100644 --- a/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version +++ b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version @@ -1,7 +1,7 @@ { "NAME": "Sigma Replacements: Heads", "URL": "https://raw.githubusercontent.com/Sigma88/Sigma-Replacements/master/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.version", - "DOWNLOAD": "http://forum.kerbalspaceprogram.com/index.php?/topic/-0", + "DOWNLOAD": "http://forum.kerbalspaceprogram.com/index.php?/topic/167233-0", "CHANGE_LOG_URL": "https://raw.githubusercontent.com/Sigma88/Sigma-Replacements/master/Heads/Changelog.txt", "GITHUB": { diff --git a/Heads/License.txt b/Heads/License.txt index 68a8a80..247dae2 100644 --- a/Heads/License.txt +++ b/Heads/License.txt @@ -5,4 +5,4 @@ All Rights Reserved For more info visit the KSP Forum Thread: -http://forum.kerbalspaceprogram.com/index.php?/topic/-0 +http://forum.kerbalspaceprogram.com/index.php?/topic/167233-0 diff --git a/Heads/README.md b/Heads/README.md index db7ea3a..2703431 100644 --- a/Heads/README.md +++ b/Heads/README.md @@ -4,7 +4,7 @@ **Customizeable Crew Heads** -KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/-0/ +KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/167233-0/ Download Latest Release: https://github.com/Sigma88/Sigma-Replacements/releases diff --git a/README.md b/README.md index e4769e7..c06170e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ **Handles replacement of various KSP assets** -KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/-0/ +KSP Forum Thread: http://forum.kerbalspaceprogram.com/index.php?/topic/167233-0/ Download Latest Release: https://github.com/Sigma88/Sigma-KerbalReplacements/releases/latest From ac7585770ad230ee191314fcae91516e8d26973d Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 5 Nov 2017 19:28:48 +0100 Subject: [PATCH 27/27] recompile --- .../Heads/Plugins/SigmaReplacementsHeads.dll | Bin 29696 -> 35328 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll b/Heads/GameData/Sigma/Replacements/Heads/Plugins/SigmaReplacementsHeads.dll index da3b5148e664320d65b6e37fa05a8b4033de1169..0c62e186242a279219fd3c6b90cc63be60bd4bc3 100644 GIT binary patch literal 35328 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