diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index 5e86d299..e323f09e 100644 Binary files a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll and b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll differ diff --git a/Source/Restock/ModuleRestockModifyFairingMaterials.cs b/Source/Restock/ModuleRestockModifyFairingMaterials.cs new file mode 100644 index 00000000..e2e448c4 --- /dev/null +++ b/Source/Restock/ModuleRestockModifyFairingMaterials.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace Restock +{ + public class ModuleRestockModifyFairingMaterials : PartModule + { + [SerializeField] + private string serializedNode; + + public override void OnLoad(ConfigNode node) + { + base.OnLoad(node); + + if (serializedNode == null) + serializedNode = node.ToString(); + } + + public override void OnStart(StartState state) + { + base.OnStart(state); + + StartCoroutine(WaitAndUpdateMaterials()); + } + + private IEnumerator WaitAndUpdateMaterials() + { + yield return null; + + if (string.IsNullOrEmpty(serializedNode)) + { + Debug.LogError("Serialized node is null or empty!"); + yield break; + } + + ConfigNode node = ConfigNode.Parse(serializedNode).nodes[0]; + + ModuleProceduralFairing fairingModule = part.FindModuleImplementing(); + + if (fairingModule == null) + { + Debug.LogError("No fairing module found on part!"); + yield break; + } + + UpdateMaterial(fairingModule.FairingMaterial, node); + UpdateMaterial(fairingModule.FairingConeMaterial, node); + UpdateMaterial(fairingModule.FairingFlightMaterial, node); + UpdateMaterial(fairingModule.FairingFlightConeMaterial, node); + + foreach (ProceduralFairings.FairingPanel fairingPanel in fairingModule.Panels) + { + MeshRenderer renderer = fairingPanel.go.GetComponent(); + UpdateMaterial(renderer.material, node); + } + } + + private void UpdateMaterial(Material material, ConfigNode node) + { + foreach (ConfigNode node2 in node.nodes) + { + if (node2.name == "COLOR_PROPERTY") + { + string name = node2.GetValue("name"); + Color color = ConfigNode.ParseColor(node2.GetValue("color")); + + material.SetColor(name, color); + } + else if (node2.name == "FLOAT_PROPERTY") + { + string name = node2.GetValue("name"); + float value = float.Parse(node2.GetValue("value")); + + material.SetFloat(name, value); + } + } + } + } +} diff --git a/Source/Restock/Restock.csproj b/Source/Restock/Restock.csproj index a74979d0..5f036689 100644 --- a/Source/Restock/Restock.csproj +++ b/Source/Restock/Restock.csproj @@ -41,6 +41,7 @@ +