From 6c20675a99d6d2acf9b24e5749823b5969c08916 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Tue, 2 Jun 2020 22:45:48 -0700 Subject: [PATCH] Get flag module working --- .../ConformalDecals/Parts/decal-blank.cfg | 6 +- .../ConformalDecals/Parts/decal-flag.cfg | 53 +++++++++++++++++ .../Plugins/ConformalDecals.dll | Bin 29696 -> 30208 bytes .../ModuleConformalDecalBase.cs | 56 +++++++----------- .../ModuleConformalDecalFlag.cs | 37 +++++++++--- .../ModuleConformalDecalGeneric.cs | 15 ++++- 6 files changed, 120 insertions(+), 47 deletions(-) create mode 100644 Distribution/GameData/ConformalDecals/Parts/decal-flag.cfg diff --git a/Distribution/GameData/ConformalDecals/Parts/decal-blank.cfg b/Distribution/GameData/ConformalDecals/Parts/decal-blank.cfg index ca47e70..4125aa1 100644 --- a/Distribution/GameData/ConformalDecals/Parts/decal-blank.cfg +++ b/Distribution/GameData/ConformalDecals/Parts/decal-blank.cfg @@ -43,7 +43,7 @@ PART MODULE { - name = ModuleConformalDecal + name = ModuleConformalDecalGeneric decalFront = Decal-Front decalBack = Decal-Back @@ -61,7 +61,7 @@ PART MODULE { IDENTIFIER { - name = ModuleConformalDecal + name = ModuleConformalDecalGeneric } DATA { decalShader = ConformalDecals/Feature/Bumped @@ -87,7 +87,7 @@ PART MODULE { IDENTIFIER { - name = ModuleConformalDecal + name = ModuleConformalDecalGeneric } DATA { decalShader = ConformalDecals/Paint/Diffuse diff --git a/Distribution/GameData/ConformalDecals/Parts/decal-flag.cfg b/Distribution/GameData/ConformalDecals/Parts/decal-flag.cfg new file mode 100644 index 0000000..aff1d20 --- /dev/null +++ b/Distribution/GameData/ConformalDecals/Parts/decal-flag.cfg @@ -0,0 +1,53 @@ +// ReStock+ 1.2.0 +// 0.625m Radial Attachment Node +PART +{ + name = decal-flag + module = Part + author = Andrew Cassidy + MODEL + { + model = ConformalDecals/Assets/decal-blank + scale = 1.0, 1.0, 1.0 + } + scale = 1 + rescaleFactor = 1 + + // Attachment + attachRules = 1,1,0,0,1 + node_attach = 0.0, 0.0, 0.1, 0.0, 0.0, -1.0 + + // Tech + TechRequired = specializedConstruction + entryCost = 600 + + // Info + cost = 75 + category = Structural + title = Blank Flag + manufacturer = #autoLOC_501648 // Maxo Construction Toys + description = foo + tags = foo + bulkheadProfiles = srf + + // Parameters + mass = 0.015 + dragModelType = default + maximum_drag = 0.1 + minimum_drag = 0.05 + angularDrag = 1.0 + crashTolerance = 10 + maxTemp = 2000 + breakingForce = 350 + breakingTorque = 150 + + MODULE + { + name = ModuleConformalDecalFlag + + decalFront = Decal-Front + decalBack = Decal-Back + + useBaseNormal = true + } +} diff --git a/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/Distribution/GameData/ConformalDecals/Plugins/ConformalDecals.dll index 10325b1a0f80c99395a566c056691b67bc6b63b0..34ff6f89a3b7771b61429cf08b340d45f1ebe5a3 100644 GIT binary patch delta 12814 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 delta 12623 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 - materialProperties.Initialize(); - } - else { - // materialProperties already exists, so make a copy - materialProperties = ScriptableObject.Instantiate(materialProperties); - } - - // set shader - materialProperties.SetShader(decalShader); - - // get back material if necessary - if (updateBackScale) { - this.Log("Getting material and base scale for back material"); - var backRenderer = decalBackTransform.GetComponent(); - if (backRenderer == null) { - this.LogError($"Specified decalBack transform {decalBack} has no renderer attached! Setting updateBackScale to false."); - updateBackScale = false; - } - else if ((backMaterial = backRenderer.material) == null) { - this.LogError($"Specified decalBack transform {decalBack} has a renderer but no material! Setting updateBackScale to false."); - updateBackScale = false; - } - else { - _backTextureBaseScale = backMaterial.GetTextureScale(PropertyIDs._MainTex); - } - } // find front transform decalFrontTransform = part.FindModelTransform(decalFront); @@ -148,6 +112,26 @@ namespace ConformalDecals { decalProjectorTransform = part.FindModelTransform(decalProjector); if (decalProjectorTransform == null) throw new FormatException($"Could not find decalProjector transform: '{decalProjector}'."); } + + // get back material if necessary + if (updateBackScale) { + this.Log("Getting material and base scale for back material"); + var backRenderer = decalBackTransform.GetComponent(); + if (backRenderer == null) { + this.LogError($"Specified decalBack transform {decalBack} has no renderer attached! Setting updateBackScale to false."); + updateBackScale = false; + } + else { + backMaterial = backRenderer.material; + if (backMaterial == null) { + this.LogError($"Specified decalBack transform {decalBack} has a renderer but no material! Setting updateBackScale to false."); + updateBackScale = false; + } + else { + _backTextureBaseScale = backMaterial.GetTextureScale(PropertyIDs._MainTex); + } + } + } // update EVERYTHING if currently attached if (_isAttached) { diff --git a/Source/ConformalDecals/ModuleConformalDecalFlag.cs b/Source/ConformalDecals/ModuleConformalDecalFlag.cs index f00bc62..1585c4e 100644 --- a/Source/ConformalDecals/ModuleConformalDecalFlag.cs +++ b/Source/ConformalDecals/ModuleConformalDecalFlag.cs @@ -5,15 +5,24 @@ using UnityEngine; namespace ConformalDecals { public class ModuleConformalDecalFlag : ModuleConformalDecalBase { - - [KSPField] - private MaterialTextureProperty _flagTextureProperty; + [KSPField] public MaterialTextureProperty flagTextureProperty; public override void OnLoad(ConfigNode node) { - base.OnLoad(node); - _flagTextureProperty = new MaterialTextureProperty("_MainTex", Texture2D.whiteTexture); - materialProperties.AddProperty(_flagTextureProperty); + if (materialProperties == null) { + // materialProperties is null, so make a new one + materialProperties = ScriptableObject.CreateInstance(); + materialProperties.Initialize(); + } + else { + // materialProperties already exists, so make a copy + materialProperties = ScriptableObject.Instantiate(materialProperties); + } + + // set shader + materialProperties.SetShader(decalShader); + + base.OnLoad(node); } public override void OnStart(StartState state) { @@ -24,7 +33,21 @@ namespace ConformalDecals { } private void UpdateFlag(string flagUrl) { - _flagTextureProperty.texture = GameDatabase.Instance.GetTexture(flagUrl, false); + this.Log($"Loading flag texture '{flagUrl}'."); + var flagTexture = GameDatabase.Instance.GetTexture(flagUrl, false); + if (flagTexture == null) { + this.LogWarning($"Unable to find flag texture '{flagUrl}'."); + return; + } + + if (flagTextureProperty == null) { + this.Log("Initializing flag property"); + flagTextureProperty = new MaterialTextureProperty("_Decal", flagTexture, isMain: true); + materialProperties.AddProperty(flagTextureProperty); + } + else { + flagTextureProperty.texture = flagTexture; + } materialProperties.UpdateMaterials(); } diff --git a/Source/ConformalDecals/ModuleConformalDecalGeneric.cs b/Source/ConformalDecals/ModuleConformalDecalGeneric.cs index 4b523fa..7a2fa76 100644 --- a/Source/ConformalDecals/ModuleConformalDecalGeneric.cs +++ b/Source/ConformalDecals/ModuleConformalDecalGeneric.cs @@ -5,8 +5,19 @@ using UnityEngine; namespace ConformalDecals { public class ModuleConformalDecalGeneric : ModuleConformalDecalBase { public override void OnLoad(ConfigNode node) { - base.OnLoad(node); + if (materialProperties == null) { + // materialProperties is null, so make a new one + materialProperties = ScriptableObject.CreateInstance(); + materialProperties.Initialize(); + } + else { + // materialProperties already exists, so make a copy + materialProperties = ScriptableObject.Instantiate(materialProperties); + } + + // set shader + materialProperties.SetShader(decalShader); // add texture nodes foreach (var textureNode in node.GetNodes("TEXTURE")) { materialProperties.AddProperty(new MaterialTextureProperty(textureNode)); @@ -21,6 +32,8 @@ namespace ConformalDecals { foreach (var colorNode in node.GetNodes("COLOR")) { materialProperties.AddProperty(new MaterialColorProperty(colorNode)); } + + base.OnLoad(node); } } } \ No newline at end of file