From a506dc492e706b5c93cc17fa57805ff765665fc9 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Fri, 16 Aug 2019 21:20:14 -0700 Subject: [PATCH] Add ModuleRestockHeatEffects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • Add ModuleRestockHeatEffects, which replaces ModuleHeatEffects and incorporates its own color changing module without the bugs of the stock one, as well as having an option to disable the built in blackbody glow. • Minor changes to ModuleRestockISRUAnimation --- .../Patches/Resource/restock-isrus.cfg | 31 ++++ .../GameData/ReStock/Plugins/Restock.dll | Bin 25600 -> 28160 bytes Source/Restock/ModuleRestockHeatEffects.cs | 152 ++++++++++++++++++ Source/Restock/ModuleRestockISRUAnimation.cs | 41 ++--- Source/Restock/Restock.csproj | 1 + 5 files changed, 206 insertions(+), 19 deletions(-) create mode 100644 Source/Restock/ModuleRestockHeatEffects.cs diff --git a/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg b/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg index 4da6a133..e47a212d 100644 --- a/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg +++ b/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg @@ -19,4 +19,35 @@ name = ModuleRestockISRUAnimation deployAnimationName = heater } + + MODULE + { + name = ModuleRestockHeatEffects + enableHeatEmissive = true + useCoreTemp = true + shaderProperty = _EmissiveColor + excludedRenderer = ISRU-125_heater + lerpMax = 2700 + redCurve + { + key = 0 0 2 2 + key = 1 1 0 0 + } + greenCurve + { + key = 0 0 1 1 + key = 1 1 1 1 + } + blueCurve + { + key = 0 0 1 1 + key = 1 1 1 1 + } + alphaCurve + { + key = 0 1 0 0 + key = 1 1 0 0 + } + disableBlackbody = true + } } \ No newline at end of file diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index 70255aeea0343031cd0e271029a1e1aabfe9d304..3b94b8b0f08be980238b94c4778871afa26f8b6b 100644 GIT binary patch literal 28160 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¤w4miH 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 renderers = new List(); + + private readonly string _shaderBlackbody = "_TemperatureColor"; + + private ModuleCoreHeat _coreHeatModule = null; + + private int _shaderPropertyID; + + private int _shaderBlackbodyID; + + private double _lerpRange; + + private Color _emissiveColor = new Color(); + private MaterialPropertyBlock _propertyBlock = new MaterialPropertyBlock(); + + public void Start() + { + Debug.Log("Start()"); + if (base.vessel == null) return; + + if (enableHeatEmissive) + { + if (useCoreTemp) + { + _coreHeatModule = base.part.FindModuleImplementing(); + if (_coreHeatModule == null) + { + this.LogError("Part has no Core Heat module, skipping"); + useCoreTemp = false; + } + } + + if (double.IsNaN(lerpMax)) + { + if (useCoreTemp) + { + lerpMax = _coreHeatModule.CoreShutdownTemp; + } + else + { + lerpMax = useSkinTemp ? part.skinMaxTemp : part.maxTemp; + } + } + + _lerpRange = lerpMax - lerpMin - draperPoint; + + _shaderPropertyID = Shader.PropertyToID(shaderProperty); + } + + if (disableBlackbody) + { + _shaderBlackbodyID = Shader.PropertyToID(_shaderBlackbody); + } + } + + public override void OnLoad(ConfigNode node) + { + if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return; + + Debug.Log("OnLoad()"); + Debug.Log(node.ToString()); + + renderers = base.part.FindModelComponents(); + + if (node.HasValue("excludedRenderer")) + { + var excludedRenderers = new List(); + + excludedRenderers.AddRange(node.GetValues("excludedRenderer")); + + for (int i = renderers.Count - 1; i >= 0; i--) + { + if (renderers[i] == null || excludedRenderers.Contains(renderers[i].name)) + { + renderers.RemoveAt(i); + } + } + } + } + + public void LateUpdate() + { + if (!HighLogic.LoadedSceneIsFlight) return; + + if (enableHeatEmissive) + { + var temp = 0.0; + if (useCoreTemp) + { + temp = _coreHeatModule.CoreTemperature; + } + else + { + temp = useSkinTemp ? base.part.skinTemperature : base.part.temperature; + } + + var temp2 = (float) ((temp - draperPoint) / _lerpRange); + temp2 = Mathf.Clamp01(temp2); + + _emissiveColor.r = redCurve.Evaluate(temp2); + _emissiveColor.g = greenCurve.Evaluate(temp2); + _emissiveColor.b = blueCurve.Evaluate(temp2); + _emissiveColor.a = alphaCurve.Evaluate(temp2); + + _propertyBlock.SetColor(_shaderPropertyID, _emissiveColor); + } + + if (disableBlackbody) + { + _propertyBlock.SetColor(_shaderBlackbodyID, Color.black); + + } + + foreach (var r in renderers) + { + r.SetPropertyBlock(_propertyBlock); + } + } + } +} \ No newline at end of file diff --git a/Source/Restock/ModuleRestockISRUAnimation.cs b/Source/Restock/ModuleRestockISRUAnimation.cs index 729978e4..520235dc 100644 --- a/Source/Restock/ModuleRestockISRUAnimation.cs +++ b/Source/Restock/ModuleRestockISRUAnimation.cs @@ -4,38 +4,40 @@ using UnityEngine; namespace Restock { - public class ModuleRestockISRUAnimation: PartModule + public class ModuleRestockISRUAnimation : PartModule { - [KSPField] public string activeAnimationName = ""; - [KSPField] public string deployAnimationName = ""; + [KSPField] public float deploySpeed = 1.0f; + + [KSPField] public float retractSpeed = 1.0f; + public bool isDeployed = false; - - public Animation DeployAnimation - { - get; - private set; - } + + public Animation DeployAnimation { get; private set; } private List _modules; private bool _deployAnimationPresent = false; - + public void Start() { - if (base.vessel == null) return; _modules = base.part.FindModulesImplementing(); _deployAnimationPresent = (deployAnimationName != string.Empty); DeployAnimation = ((_deployAnimationPresent) ? base.part.FindModelAnimators(deployAnimationName)[0] : null); - foreach (var a in base.part.FindModelAnimators()) a.Stop(); - + foreach (var a in base.part.FindModelAnimators()) a.Stop(); } public override void OnLoad(ConfigNode node) { + if (!HighLogic.LoadedSceneIsFlight || base.vessel == null) + { + isDeployed = false; + return; + } + if (isDeployed) { PlayDeployAnimation(1000); @@ -45,17 +47,16 @@ namespace Restock PlayDeployAnimation(-1000); } } - + public void Update() { - if (!HighLogic.LoadedSceneIsFlight || base.vessel == null) return; + if (!HighLogic.LoadedSceneIsFlight) return; try { if (!CheatOptions.InfiniteElectricity) { var ecHash = PartResourceLibrary.ElectricityHashcode; base.vessel.GetConnectedResourceTotals(ecHash, out var ecAmount, out _, true); - Debug.Log(ecAmount); if (ecAmount < 0.1) { if (isDeployed) RetractModule(); @@ -68,6 +69,7 @@ namespace Restock { if (m.ModuleIsActive()) enabledCount++; } + if (isDeployed && enabledCount == 0) RetractModule(); else if (!isDeployed && enabledCount != 0) DeployModule(); } @@ -80,16 +82,16 @@ namespace Restock public void DeployModule() { isDeployed = true; - PlayDeployAnimation(1); + PlayDeployAnimation(1 * deploySpeed); } public void RetractModule() { isDeployed = false; - PlayDeployAnimation(-1); + PlayDeployAnimation(-1 * retractSpeed); } - private void PlayDeployAnimation(int speed) + private void PlayDeployAnimation(float speed) { if (_deployAnimationPresent) { @@ -102,6 +104,7 @@ namespace Restock { deployAnimationState.time = 0.0f; } + deployAnimationState.speed = speed; DeployAnimation.Play(deployAnimationName); } diff --git a/Source/Restock/Restock.csproj b/Source/Restock/Restock.csproj index 489f1437..5d3e8ee7 100644 --- a/Source/Restock/Restock.csproj +++ b/Source/Restock/Restock.csproj @@ -47,6 +47,7 @@ +