From 03d2e665435986cb0c29acb06dafe8033158b1c9 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Tue, 5 Jan 2021 16:01:26 -0800 Subject: [PATCH] simplify opacity cutoff and wear by using material properties --- .../Plugins/ConformalDecals.dll | Bin 84480 -> 83968 bytes .../MaterialPropertyCollection.cs | 14 ---- .../ConformalDecals/ModuleConformalDecal.cs | 79 ++++++++---------- 3 files changed, 34 insertions(+), 59 deletions(-) diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll index 9987c5378342e3efe88ca563f66079cd511b189d..0e7bf7dc2760b9516a80ea2c1981ffe394ab8987 100644 GIT binary patch delta 35595 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 delta 35920 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 JyN3P{e*;_lRQ3P> diff --git a/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs b/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs index 6d2e10f..fcd0e44 100644 --- a/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs +++ b/Source/ConformalDecals/MaterialProperties/MaterialPropertyCollection.cs @@ -280,20 +280,6 @@ namespace ConformalDecals.MaterialProperties { UpdateTile(tile); } - public void SetOpacity(float opacity) { - DecalMaterial.SetFloat(DecalPropertyIDs._DecalOpacity, opacity); - PreviewMaterial.SetFloat(DecalPropertyIDs._DecalOpacity, opacity); - } - - public void SetCutoff(float cutoff) { - DecalMaterial.SetFloat(DecalPropertyIDs._Cutoff, cutoff); - PreviewMaterial.SetFloat(DecalPropertyIDs._Cutoff, cutoff); - } - - public void SetWear(float wear) { - DecalMaterial.SetFloat(DecalPropertyIDs._EdgeWearStrength, wear); - } - public void UpdateMaterials() { foreach (var material in Materials) { UpdateMaterial(material); diff --git a/Source/ConformalDecals/ModuleConformalDecal.cs b/Source/ConformalDecals/ModuleConformalDecal.cs index 05fa3ff..2161837 100644 --- a/Source/ConformalDecals/ModuleConformalDecal.cs +++ b/Source/ConformalDecals/ModuleConformalDecal.cs @@ -71,14 +71,17 @@ namespace ConformalDecals { [KSPField(guiName = "#LOC_ConformalDecals_gui-opacity", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "P0"), UI_FloatRange()] public float opacity = 1.0f; + private MaterialFloatProperty _opacityProperty; [KSPField(guiName = "#LOC_ConformalDecals_gui-cutoff", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "P0"), UI_FloatRange()] public float cutoff = 0.5f; + private MaterialFloatProperty _cutoffProperty; [KSPField(guiName = "#LOC_ConformalDecals_gui-wear", guiActive = false, guiActiveEditor = true, isPersistant = true, guiFormat = "F0"), UI_FloatRange()] public float wear = 100; + private MaterialFloatProperty _wearProperty; [KSPField(guiName = "#LOC_ConformalDecals_gui-multiproject", guiActive = false, guiActiveEditor = true, isPersistant = true), UI_Toggle()] @@ -131,6 +134,10 @@ namespace ConformalDecals { else { materialProperties = ScriptableObject.Instantiate(materialProperties); } + + _opacityProperty = materialProperties.AddOrGetProperty("_DecalOpacity"); + _cutoffProperty = materialProperties.AddOrGetProperty("_Cutoff"); + _wearProperty = materialProperties.AddOrGetProperty("_EdgeWearStrength"); } /// @@ -227,30 +234,20 @@ namespace ConformalDecals { // scale or depth values have been changed, so update scale // and update projection matrices if attached UpdateProjection(); - UpdateTargets(); foreach (var counterpart in part.symmetryCounterparts) { var decal = counterpart.GetComponent(); decal.UpdateProjection(); - decal.UpdateTargets(); } } /// Called when the decal's material is modified through a tweakable protected void OnMaterialTweakEvent(BaseField field, object obj) { - materialProperties.SetOpacity(opacity); - materialProperties.SetCutoff(cutoff); - if (useBaseNormal) { - materialProperties.SetWear(wear); - } + UpdateMaterials(); foreach (var counterpart in part.symmetryCounterparts) { var decal = counterpart.GetComponent(); - decal.materialProperties.SetOpacity(opacity); - decal.materialProperties.SetCutoff(cutoff); - if (useBaseNormal) { - decal.materialProperties.SetWear(wear); - } + decal.UpdateMaterials(); } } @@ -258,7 +255,7 @@ namespace ConformalDecals { protected void OnVariantApplied(Part eventPart, PartVariant variant) { if (_isAttached && eventPart != null && (!projectMultiple || eventPart == part.parent)) { _targets.Remove(eventPart); - UpdateTargets(); + UpdateProjection(); } } @@ -282,7 +279,6 @@ namespace ConformalDecals { protected void OnPartTransformed(Part eventPart) { if (this.part == eventPart) { UpdateProjection(); - UpdateTargets(); } else if (_isAttached && projectMultiple) { UpdatePartTarget(eventPart, _boundsRenderer.bounds); @@ -354,7 +350,6 @@ namespace ConformalDecals { UpdateMaterials(); UpdateProjection(); - UpdateTargets(); } /// Called when decal is detached from its parent part @@ -542,7 +537,6 @@ namespace ConformalDecals { UpdateTextures(); UpdateMaterials(); UpdateProjection(); - UpdateTargets(); } /// Update decal textures @@ -550,12 +544,11 @@ namespace ConformalDecals { /// Update decal materials protected virtual void UpdateMaterials() { + _opacityProperty.value = opacity; + _cutoffProperty.value = cutoff; + _wearProperty.value = wear; + materialProperties.UpdateMaterials(); - materialProperties.SetOpacity(opacity); - materialProperties.SetCutoff(cutoff); - if (useBaseNormal) { - materialProperties.SetWear(wear); - } _decalMaterial = materialProperties.DecalMaterial; _previewMaterial = materialProperties.PreviewMaterial; @@ -606,6 +599,26 @@ namespace ConformalDecals { _orthoMatrix[1, 3] = 0.5f; decalProjectorTransform.localScale = new Vector3(size.x, size.y, depth); + + var projectionBounds = _boundsRenderer.bounds; + + // disable all targets + foreach (var target in _targets.Values) { + target.enabled = false; + } + + // collect list of potential targets + IEnumerable targetParts; + if (projectMultiple) { + targetParts = HighLogic.LoadedSceneIsFlight ? part.vessel.parts : EditorLogic.fetch.ship.parts; + } + else { + targetParts = new[] {part.parent}; + } + + foreach (var targetPart in targetParts) { + UpdatePartTarget(targetPart, projectionBounds); + } } else { // rescale preview model @@ -618,30 +631,6 @@ namespace ConformalDecals { } } - /// Called when updating decal targets - protected void UpdateTargets() { - if (!_isAttached) return; - var projectionBounds = _boundsRenderer.bounds; - - // disable all targets - foreach (var target in _targets.Values) { - target.enabled = false; - } - - // collect list of potential targets - IEnumerable targetParts; - if (projectMultiple) { - targetParts = HighLogic.LoadedSceneIsFlight ? part.vessel.parts : EditorLogic.fetch.ship.parts; - } - else { - targetParts = new[] {part.parent}; - } - - foreach (var targetPart in targetParts) { - UpdatePartTarget(targetPart, projectionBounds); - } - } - protected void UpdatePartTarget(Part targetPart, Bounds projectionBounds) { if (targetPart.GetComponent() != null) return; // skip other decals