From 8d8795c57dfeb8b02ea675beed7ccc93127ef603 Mon Sep 17 00:00:00 2001 From: blowfish Date: Wed, 27 Feb 2019 22:46:39 -0800 Subject: [PATCH 1/3] Unify material modifiers Allows float and color properties to be set on actual parts now, not just fairings --- .../GameData/ReStock/Plugins/Restock.dll | Bin 13824 -> 15872 bytes .../ColorPropertyMaterialModifier.cs | 22 +++++++ .../FloatPropertyMaterialModifier.cs | 22 +++++++ .../MaterialModifiers/IMaterialModifier.cs | 10 +++ .../MaterialModifierParser.cs | 62 ++++++++++++++++++ .../TexturePropertyMaterialModifier.cs | 22 +++++++ .../ModuleRestockModifyFairingMaterials.cs | 40 +++++------ .../Restock/ModuleRestockModifyMaterials.cs | 23 +++---- Source/Restock/Restock.csproj | 5 ++ 9 files changed, 171 insertions(+), 35 deletions(-) create mode 100644 Source/Restock/MaterialModifiers/ColorPropertyMaterialModifier.cs create mode 100644 Source/Restock/MaterialModifiers/FloatPropertyMaterialModifier.cs create mode 100644 Source/Restock/MaterialModifiers/IMaterialModifier.cs create mode 100644 Source/Restock/MaterialModifiers/MaterialModifierParser.cs create mode 100644 Source/Restock/MaterialModifiers/TexturePropertyMaterialModifier.cs diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index 822ad7b5f6efc9a4383db667ae492e2c48c1f1e7..05e139eda039263c5aefaec2b920c224030399f6 100644 GIT binary patch literal 15872 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 Cl(yXf literal 13824 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 - UpdateMaterial(renderer.material, node); - } - } - - private void UpdateMaterial(Material material, ConfigNode node) - { foreach (ConfigNode node2 in node.nodes) { - if (node2.name == "COLOR_PROPERTY") + IMaterialModifier modifier; + try { - string name = node2.GetValue("name"); - Color color = ConfigNode.ParseColor(node2.GetValue("color")); - - material.SetColor(name, color); + modifier = parser.Parse(node2); } - else if (node2.name == "FLOAT_PROPERTY") + catch (Exception ex) { - string name = node2.GetValue("name"); - float value = float.Parse(node2.GetValue("value")); + Debug.LogException(new Exception($"[{nameof(ModuleRestockModifyFairingMaterials)}] cannot parse node as material modifier: \n{node2.ToString()}\n", ex)); + continue; + } - material.SetFloat(name, value); + modifier.Modify(fairingModule.FairingMaterial); + modifier.Modify(fairingModule.FairingConeMaterial); + modifier.Modify(fairingModule.FairingFlightMaterial); + modifier.Modify(fairingModule.FairingFlightConeMaterial); + + foreach (ProceduralFairings.FairingPanel fairingPanel in fairingModule.Panels) + { + MeshRenderer renderer = fairingPanel.go.GetComponent(); + modifier.Modify(renderer.material); } } } diff --git a/Source/Restock/ModuleRestockModifyMaterials.cs b/Source/Restock/ModuleRestockModifyMaterials.cs index c91aa9cd..dffdf3d0 100644 --- a/Source/Restock/ModuleRestockModifyMaterials.cs +++ b/Source/Restock/ModuleRestockModifyMaterials.cs @@ -1,5 +1,6 @@ using System; using UnityEngine; +using Restock.MaterialModifiers; namespace Restock { @@ -40,28 +41,24 @@ namespace Restock } - foreach (ConfigNode node3 in node2.GetNodes("TEXTURE_PROPERTY")) + MaterialModifierParser parser = new MaterialModifierParser(); + + foreach (ConfigNode node3 in node2.nodes) { - string name = node3.GetValue("name"); - string textureUrl = node3.GetValue("textureUrl"); - bool normalMapToggle = false; - - if (node3.GetValue("isNormalMap") is string normalMapToggleString) + IMaterialModifier modifier; + try { - normalMapToggle = bool.Parse(normalMapToggleString); + modifier = parser.Parse(node3); } - - GameDatabase.TextureInfo textureInfo = GameDatabase.Instance.GetTextureInfo(textureUrl); - - if (textureInfo == null) + catch (Exception ex) { - Debug.LogError($"Cannot find texture: {textureUrl}"); + Debug.LogException(new Exception($"[{nameof(ModuleRestockModifyMaterials)}] cannot parse node as material modifier: \n{node3.ToString()}\n", ex)); continue; } foreach (Renderer renderer in renderers) { - renderer.material.SetTexture(name, normalMapToggle ? textureInfo.normalMap : textureInfo.texture); + modifier.Modify(renderer.material); } } } diff --git a/Source/Restock/Restock.csproj b/Source/Restock/Restock.csproj index edf1073e..d831f31a 100644 --- a/Source/Restock/Restock.csproj +++ b/Source/Restock/Restock.csproj @@ -41,6 +41,11 @@ + + + + + From ddb79541f5a3ca1779a163c62fed0edc5855ceef Mon Sep 17 00:00:00 2001 From: blowfish Date: Thu, 28 Feb 2019 23:54:33 -0800 Subject: [PATCH 2/3] Material modifers can be scoped by transform Each MATERIAL node can take transform or baseTransform values which look for renderers on that transform or that transform and children respectively. If none are specified it will use every renderer in the model. --- .../GameData/ReStock/Plugins/Restock.dll | Bin 15872 -> 16896 bytes .../Restock/ModuleRestockModifyMaterials.cs | 82 +++++++++++++++--- 2 files changed, 72 insertions(+), 10 deletions(-) diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index 05e139eda039263c5aefaec2b920c224030399f6..e8b766fc941358d9d02108dedd550bfe3cfd0a56 100644 GIT binary patch delta 7573 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 I>m6?VH`UfHF#rGn delta 6365 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 DK__aq diff --git a/Source/Restock/ModuleRestockModifyMaterials.cs b/Source/Restock/ModuleRestockModifyMaterials.cs index dffdf3d0..c10c5163 100644 --- a/Source/Restock/ModuleRestockModifyMaterials.cs +++ b/Source/Restock/ModuleRestockModifyMaterials.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using UnityEngine; using Restock.MaterialModifiers; @@ -12,18 +14,10 @@ namespace Restock if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return; - Transform modelTransform = part.partTransform.Find("model"); - - Renderer[] renderers = modelTransform.GetComponentsInChildren(); - - if (modelTransform == null) - { - Debug.LogError("Couldn't find model transform"); - return; - } - foreach (ConfigNode node2 in node.GetNodes("MATERIAL")) { + IEnumerable renderers = GetRenderers(node2); + if (node2.GetValue("shader") is string newShaderName) { if (Shader.Find(newShaderName) is Shader newShader) @@ -66,5 +60,73 @@ namespace Restock isEnabled = false; moduleIsEnabled = false; } + + private IEnumerable GetRenderers(ConfigNode node) + { + IEnumerable renderers = Enumerable.Empty(); + bool useAllRenderers = true; + + foreach (ConfigNode.Value value in node.values) + { + if (value.name == "transform") + { + Transform[] modelTransforms = part.FindModelTransforms(value.name); + + if (modelTransforms.Length == 0) + { + Debug.LogError($"Couldn't find transform named '{value.name}' on part"); + continue; + } + + List transformRenderers = new List(modelTransforms.Length); + foreach (Transform transform in modelTransforms) + { + Renderer renderer = transform.GetComponent(); + + if (renderer == null) + Debug.LogError($"No renderer found on transform '{transform.name}'"); + else + transformRenderers.Add(renderer); + } + + renderers.Concat(transformRenderers); + useAllRenderers = false; + } + else if (value.name == "baseTransform") + { + Transform[] modelTransforms = part.FindModelTransforms(value.name); + + if (modelTransforms.Length == 0) + { + Debug.LogError($"Couldn't find transform named '{value.name}' on part"); + continue; + } + + foreach (Transform transform in modelTransforms) + { + Renderer[] transformRenderers = transform.GetComponentsInChildren(); + + if (transformRenderers.Length == 0) + Debug.LogError($"No renderers found on transform '{transform.name}' or its children"); + else + renderers.Concat(transform.GetComponentsInChildren()); + } + + useAllRenderers = false; + } + } + + if (useAllRenderers) + { + Transform modelTransform = part.partTransform.Find("model"); + + if (modelTransform == null) + Debug.LogError("Couldn't find model transform"); + else + renderers = modelTransform.GetComponentsInChildren(); + } + + return renderers; + } } } From a453ed89eb780e2229ba14486e129792fdecae30 Mon Sep 17 00:00:00 2001 From: blowfish Date: Fri, 1 Mar 2019 00:06:59 -0800 Subject: [PATCH 3/3] Unify logging And add helpful tags to everything --- .../ModuleRestockModifyFairingMaterials.cs | 6 +++--- Source/Restock/ModuleRestockModifyMaterials.cs | 14 +++++++------- Source/Restock/PartModuleExtensions.cs | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 Source/Restock/PartModuleExtensions.cs diff --git a/Source/Restock/ModuleRestockModifyFairingMaterials.cs b/Source/Restock/ModuleRestockModifyFairingMaterials.cs index 4d7f257a..908dab6a 100644 --- a/Source/Restock/ModuleRestockModifyFairingMaterials.cs +++ b/Source/Restock/ModuleRestockModifyFairingMaterials.cs @@ -31,7 +31,7 @@ namespace Restock if (string.IsNullOrEmpty(serializedNode)) { - Debug.LogError("Serialized node is null or empty!"); + this.LogError("Serialized node is null or empty!"); yield break; } @@ -41,7 +41,7 @@ namespace Restock if (fairingModule == null) { - Debug.LogError("No fairing module found on part!"); + this.LogError("No fairing module found on part!"); yield break; } @@ -56,7 +56,7 @@ namespace Restock } catch (Exception ex) { - Debug.LogException(new Exception($"[{nameof(ModuleRestockModifyFairingMaterials)}] cannot parse node as material modifier: \n{node2.ToString()}\n", ex)); + this.LogException($"cannot parse node as material modifier: \n{node2.ToString()}\n", ex); continue; } diff --git a/Source/Restock/ModuleRestockModifyMaterials.cs b/Source/Restock/ModuleRestockModifyMaterials.cs index c10c5163..85b827ae 100644 --- a/Source/Restock/ModuleRestockModifyMaterials.cs +++ b/Source/Restock/ModuleRestockModifyMaterials.cs @@ -29,7 +29,7 @@ namespace Restock } else { - Debug.LogError($"Can't find shader {newShaderName}"); + this.LogError($"Can't find shader {newShaderName}"); continue; } @@ -46,7 +46,7 @@ namespace Restock } catch (Exception ex) { - Debug.LogException(new Exception($"[{nameof(ModuleRestockModifyMaterials)}] cannot parse node as material modifier: \n{node3.ToString()}\n", ex)); + this.LogException($"cannot parse node as material modifier: \n{node3.ToString()}\n", ex); continue; } @@ -74,7 +74,7 @@ namespace Restock if (modelTransforms.Length == 0) { - Debug.LogError($"Couldn't find transform named '{value.name}' on part"); + this.LogError($"Couldn't find transform named '{value.name}' on part"); continue; } @@ -84,7 +84,7 @@ namespace Restock Renderer renderer = transform.GetComponent(); if (renderer == null) - Debug.LogError($"No renderer found on transform '{transform.name}'"); + this.LogError($"No renderer found on transform '{transform.name}'"); else transformRenderers.Add(renderer); } @@ -98,7 +98,7 @@ namespace Restock if (modelTransforms.Length == 0) { - Debug.LogError($"Couldn't find transform named '{value.name}' on part"); + this.LogError($"Couldn't find transform named '{value.name}' on part"); continue; } @@ -107,7 +107,7 @@ namespace Restock Renderer[] transformRenderers = transform.GetComponentsInChildren(); if (transformRenderers.Length == 0) - Debug.LogError($"No renderers found on transform '{transform.name}' or its children"); + this.LogError($"No renderers found on transform '{transform.name}' or its children"); else renderers.Concat(transform.GetComponentsInChildren()); } @@ -121,7 +121,7 @@ namespace Restock Transform modelTransform = part.partTransform.Find("model"); if (modelTransform == null) - Debug.LogError("Couldn't find model transform"); + this.LogError("Couldn't find model transform"); else renderers = modelTransform.GetComponentsInChildren(); } diff --git a/Source/Restock/PartModuleExtensions.cs b/Source/Restock/PartModuleExtensions.cs new file mode 100644 index 00000000..51834e53 --- /dev/null +++ b/Source/Restock/PartModuleExtensions.cs @@ -0,0 +1,16 @@ +using System; +using UnityEngine; + +namespace Restock +{ + public static class PartModuleExtensions + { + public static void Log(this PartModule module, string message) => Debug.Log(FormatMessage(module, message)); + public static void LogWarning(this PartModule module, string message) => Debug.LogWarning(FormatMessage(module, message)); + public static void LogError(this PartModule module, string message) => Debug.LogError(FormatMessage(module, message)); + public static void LogException(this PartModule module, string message, Exception exception) => Debug.LogException(new Exception(FormatMessage(module, message), exception)); + + private static string FormatMessage(PartModule module, string message) => $"[{GetPartName(module.part)} {module.GetType()}] {message}"; + private static string GetPartName(Part part) => part.partInfo?.name ?? part.name; + } +}