From 760609fae20387ea0525587677f3de1f92751791 Mon Sep 17 00:00:00 2001 From: Andrew Cassidy Date: Thu, 24 Feb 2022 23:33:07 -0800 Subject: [PATCH] Refactor flag decal Not exhaustively tested but shouldnt be different from before --- .../Plugins/ConformalDecals.dll | Bin 86016 -> 86016 bytes Source/ConformalDecals/ModuleConformalFlag.cs | 99 +++++++++++------- 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll index d1d46b70e44e8c44bda50798154da45b3e09ed13..c9fa74671c576c1bd05377985ecb52aa44e7d30f 100644 GIT binary patch delta 24838 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 L%YB>pS^a+i5Ta+` delta 24874 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 diff --git a/Source/ConformalDecals/ModuleConformalFlag.cs b/Source/ConformalDecals/ModuleConformalFlag.cs index 4ce228b..fd7eac6 100644 --- a/Source/ConformalDecals/ModuleConformalFlag.cs +++ b/Source/ConformalDecals/ModuleConformalFlag.cs @@ -1,4 +1,3 @@ -using ConformalDecals.Util; using UnityEngine; namespace ConformalDecals { @@ -9,6 +8,7 @@ namespace ConformalDecals { [KSPField(isPersistant = true)] public bool useCustomFlag; + // The URL of the flag for the current mission or agency public string MissionFlagUrl { get { if (HighLogic.LoadedSceneIsEditor) { @@ -19,6 +19,7 @@ namespace ConformalDecals { return string.IsNullOrEmpty(part.flagURL) ? HighLogic.CurrentGame.flagURL : part.flagURL; } + // If we are not in game, use the default flag (for icon rendering) return DefaultFlag; } } @@ -26,84 +27,104 @@ namespace ConformalDecals { public override void OnLoad(ConfigNode node) { base.OnLoad(node); - if (useCustomFlag) { - SetFlag(flagUrl); - } - else { - SetFlag(MissionFlagUrl); - } + // Since OnLoad is called for all modules, we only need to update this module + // Updating symmetry counterparts would be redundent + UpdateFlag(); } public override void OnStart(StartState state) { base.OnStart(state); - if (HighLogic.LoadedSceneIsGame) { - GameEvents.onMissionFlagSelect.Add(OnEditorFlagSelected); - } - if (HighLogic.LoadedSceneIsEditor) { + // Register flag change event + GameEvents.onMissionFlagSelect.Add(OnEditorFlagSelected); + + // Register reset button event Events[nameof(ResetFlag)].guiActiveEditor = useCustomFlag; } - if (useCustomFlag) { - SetFlag(flagUrl); - } - else { - SetFlag(MissionFlagUrl); - } + // Since OnStart is called for all modules, we only need to update this module + // Updating symmetry counterparts would be redundent + UpdateFlag(); } public override void OnDestroy() { - GameEvents.onMissionFlagSelect.Remove(SetFlag); + if (HighLogic.LoadedSceneIsEditor) { + // Unregister flag change event + GameEvents.onMissionFlagSelect.Remove(OnEditorFlagSelected); + } + base.OnDestroy(); } [KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "#LOC_ConformalDecals_gui-select-flag")] public void SelectFlag() { + // Button for selecting a flag + // This is a bit of a hack to bring up the stock flag selection menu + // When its done, it calls OnCustomFlagSelected() var flagBrowser = (Instantiate((Object) (new FlagBrowserGUIButton(null, null, null, null)).FlagBrowserPrefab) as GameObject).GetComponent(); flagBrowser.OnFlagSelected = OnCustomFlagSelected; } [KSPEvent(guiActive = false, guiActiveEditor = true, guiName = "#LOC_ConformalDecals_gui-reset-flag")] public void ResetFlag() { - SetFlag(MissionFlagUrl); - SetFlagSymmetryCounterparts(MissionFlagUrl); - + + // we are no longer using a custom flag, so instead use the mission or agency flag useCustomFlag = false; + flagUrl = "Mission"; + UpdateFlag(true); + + // disable the reset button, since it no longer makes sense Events[nameof(ResetFlag)].guiActiveEditor = false; } private void OnCustomFlagSelected(FlagBrowser.FlagEntry newFlagEntry) { - SetFlag(newFlagEntry.textureInfo.name); - SetFlagSymmetryCounterparts(newFlagEntry.textureInfo.name); - + // Callback for when a flag is selected in the menu spawned by SelectFlag() + + // we are now using a custom flag with the URL of the new flag entry useCustomFlag = true; + flagUrl = newFlagEntry.textureInfo.name; + UpdateFlag(true); + + // make sure the reset button is now available Events[nameof(ResetFlag)].guiActiveEditor = true; } private void OnEditorFlagSelected(string newFlagUrl) { if (!useCustomFlag) { - SetFlag(newFlagUrl); - SetFlagSymmetryCounterparts(newFlagUrl); + flagUrl = newFlagUrl; + // Since this callback is called for all modules, we only need to update this module + // Updating symmetry counterparts would be redundent + UpdateFlag(); } } - private void SetFlag(string newFlagUrl) { - this.Log($"Loading flag texture '{newFlagUrl}'."); - - flagUrl = newFlagUrl; - materialProperties.AddOrGetTextureProperty("_Decal", true).TextureUrl = newFlagUrl; - + // Update the displayed flag texture for this decal or optionally any symmetry counterparts + private void UpdateFlag(bool recursive = false) { + // get the decal material property for the decal texture + var textureProperty = materialProperties.AddOrGetTextureProperty("_Decal", true); + + if(useCustomFlag) { + // set the texture to the custom flag + textureProperty.TextureUrl = flagUrl; + } + else { + // set the texture to the mission flag + textureProperty.TextureUrl = MissionFlagUrl; + } + UpdateMaterials(); UpdateScale(); - } - private void SetFlagSymmetryCounterparts(string newFlagUrl) { - foreach (var counterpart in part.symmetryCounterparts) { - var decal = counterpart.GetComponent(); - - decal.SetFlag(newFlagUrl); - decal.useCustomFlag = useCustomFlag; + if (recursive) { + // for each symmetry counterpart, copy this part's properties and update it in turn + foreach (var counterpart in part.symmetryCounterparts) { + var decal = counterpart.GetComponent(); + + decal.useCustomFlag = useCustomFlag; + decal.flagUrl = flagUrl; + decal.UpdateFlag(); + } } } }