From f5b81532bbfe898e270191629a1de80d686464c2 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Fri, 30 Aug 2019 21:02:20 -0700 Subject: [PATCH] Finish overhauling animation module to support waiting states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • ISRU Animation module now will optionally wait for the current looping animation to complete before changing states, making transitions look more seamless • Better looping animation handling, instead of manually refreshing animations • Better documentation • Remove some debug code in HeatEffects --- .../Patches/Resource/restock-isrus.cfg | 1 + .../GameData/ReStock/Plugins/Restock.dll | Bin 30208 -> 31232 bytes Source/Restock/ModuleRestockHeatEffects.cs | 4 - Source/Restock/ModuleRestockISRUAnimation.cs | 261 ++++++++++++------ 4 files changed, 183 insertions(+), 83 deletions(-) diff --git a/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg b/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg index a99c23f9..eaa1a4e1 100644 --- a/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg +++ b/Distribution/Restock/GameData/ReStock/Patches/Resource/restock-isrus.cfg @@ -75,6 +75,7 @@ activeAnimationName = Run retractAnimationName = Retract needsEC = true + waitForComplete = true } MODULE diff --git a/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll b/Distribution/Restock/GameData/ReStock/Plugins/Restock.dll index c02d214e345f064e8ac23c4361d069070a3e6ac4..b965bcd5a6729b511c72416837d3c211a2c36441 100644 GIT binary patch literal 31232 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 A-v9sr diff --git a/Source/Restock/ModuleRestockHeatEffects.cs b/Source/Restock/ModuleRestockHeatEffects.cs index 883a43cd..61349689 100644 --- a/Source/Restock/ModuleRestockHeatEffects.cs +++ b/Source/Restock/ModuleRestockHeatEffects.cs @@ -59,7 +59,6 @@ namespace Restock public void Start() { - Debug.Log("Start()"); if (base.vessel == null) return; if (enableHeatEmissive) @@ -101,9 +100,6 @@ namespace Restock { if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) return; - Debug.Log("OnLoad()"); - Debug.Log(node.ToString()); - renderers = base.part.FindModelComponents(); if (node.HasValue("excludedRenderer")) diff --git a/Source/Restock/ModuleRestockISRUAnimation.cs b/Source/Restock/ModuleRestockISRUAnimation.cs index bcd2a188..b8fd27a7 100644 --- a/Source/Restock/ModuleRestockISRUAnimation.cs +++ b/Source/Restock/ModuleRestockISRUAnimation.cs @@ -15,7 +15,7 @@ namespace Restock // name of the active animation to use [KSPField] public string activeAnimationName = ""; - + // name of the inactive animation to use [KSPField] public string inactiveAnimationName = ""; @@ -28,16 +28,20 @@ namespace Restock // does this module need electric charge to be enabled? [KSPField] public bool needsEC = false; - public bool IsDeployed - { - get { return (CurrentState == State.Active || CurrentState == State.Deploying); } - } - + // should the module wait until a current looping animation completes before changing state? + [KSPField] public bool waitForComplete = false; + + public bool IsDeployed => (CurrentState == State.InactiveWaiting || + CurrentState == State.Active || + CurrentState == State.Deploying); + private enum State { Inactive, + InactiveWaiting, Deploying, Active, + ActiveWaiting, Retracting } @@ -47,12 +51,12 @@ namespace Restock private Animation InactiveAnimation { get; set; } private State CurrentState { get; set; } - + private bool _deployAnimationPresent = false; private bool _retractAnimationPresent = false; private bool _activeAnimationPresent = false; private bool _inactiveAnimationPresent = false; - + private List _modules; public void Start() @@ -63,78 +67,85 @@ namespace Restock _retractAnimationPresent = (retractAnimationName != string.Empty); _activeAnimationPresent = (activeAnimationName != string.Empty); _inactiveAnimationPresent = (inactiveAnimationName != string.Empty); - - DeployAnimation = ((_deployAnimationPresent) ? base.part.FindModelAnimators(deployAnimationName)[0] : null); - RetractAnimation = ((_retractAnimationPresent) ? base.part.FindModelAnimators(retractAnimationName)[0] : null); - ActiveAnimation = ((_activeAnimationPresent) ? base.part.FindModelAnimators(activeAnimationName)[0] : null); - InactiveAnimation = ((_inactiveAnimationPresent) ? base.part.FindModelAnimators(inactiveAnimationName)[0] : null); - - CurrentState = State.Inactive; - + + DeployAnimation = ((_deployAnimationPresent) ? + base.part.FindModelAnimators(deployAnimationName)[0] : null); + RetractAnimation = ((_retractAnimationPresent) ? + base.part.FindModelAnimators(retractAnimationName)[0] : null); + ActiveAnimation = ((_activeAnimationPresent) ? + base.part.FindModelAnimators(activeAnimationName)[0] : null); + InactiveAnimation = ((_inactiveAnimationPresent)? + base.part.FindModelAnimators(inactiveAnimationName)[0] : null); + foreach (var a in base.part.FindModelAnimators()) a.Stop(); - } - public override void OnLoad(ConfigNode node) - { - if (!HighLogic.LoadedSceneIsFlight || base.vessel == null) - { - CurrentState = State.Inactive; - return; - } - - if (IsDeployed) + if (!HighLogic.LoadedSceneIsFlight) return; + + if (ConvertersEnabled()) { - DeployEnd(); + DeployStart(1000f); } else { - RetractEnd(); + RetractStart(1000f); } } + public override void OnLoad(ConfigNode node) + { + } + public void Update() { if (!HighLogic.LoadedSceneIsFlight) return; - + try { - if (needsEC && !CheatOptions.InfiniteElectricity) - { - var ecHash = PartResourceLibrary.ElectricityHashcode; - base.vessel.GetConnectedResourceTotals(ecHash, out var ecAmount, out _, true); - if (ecAmount < 0.1) - { - if (IsDeployed) RetractStart(); - return; - } - } - - int enabledCount = 0; - foreach (var m in _modules) - { - if (m.ModuleIsActive()) enabledCount++; - } - switch (CurrentState) { - case State.Active: - if (enabledCount == 0) + // System is inactive, and playing the inactive animation if present + case State.Inactive: + if (ConvertersEnabled()) { - DeployStart(); + if (waitForComplete) + { + DeployWait(); + } + else + { + DeployStart(); + } } - else if (_activeAnimationPresent && !ActiveAnimation.IsPlaying(activeAnimationName)) + + break; + + // System is inactive, but waiting for the animation to end before deploying + case State.InactiveWaiting: + if (!waitForComplete || !_inactiveAnimationPresent) + { + this.LogError( + "Invalid state! waitForComplete not enabled or inactive animation not present."); + CurrentState = State.Inactive; + } + else if (!ConvertersEnabled()) + { + RetractEnd(); + } + else if (!InactiveAnimation.IsPlaying(inactiveAnimationName)) { - PlayAnimation(ActiveAnimation, activeAnimationName); + DeployStart(); } + break; - + + // System is deploying case State.Deploying: if (!_deployAnimationPresent) { - this.LogError("Invalid state!"); + this.LogError("Invalid state! Deploying without an animation present."); CurrentState = State.Active; } - if (enabledCount == 0) + else if (!ConvertersEnabled()) { RetractStart(); } @@ -142,26 +153,51 @@ namespace Restock { DeployEnd(); } + break; - - case State.Inactive: - if (enabledCount != 0) + + // System is active, and playing the active animation if present + case State.Active: + if (!ConvertersEnabled()) { - DeployStart(); + if (waitForComplete) + { + RetractWait(); + } + else + { + RetractStart(); + } + } + + break; + + // System is active, but waiting for the animation to finish before retracting + case State.ActiveWaiting: + if (!waitForComplete || !_activeAnimationPresent) + { + this.LogError("Invalid state! waitForComplete not enabled or active animation not present."); + CurrentState = State.Active; } - else if (_inactiveAnimationPresent && !InactiveAnimation.IsPlaying(inactiveAnimationName)) + else if (ConvertersEnabled()) { - PlayAnimation(InactiveAnimation, inactiveAnimationName); + DeployEnd(); } + else if (!ActiveAnimation.IsPlaying(activeAnimationName)) + { + RetractStart(); + } + break; - + + // System is retracting case State.Retracting: if (!_retractAnimationPresent && !_deployAnimationPresent) { - this.LogError("Invalid state!"); + this.LogError("Invalid state! Retracting without an animation present."); CurrentState = State.Inactive; } - if (enabledCount != 0) + else if (ConvertersEnabled()) { DeployStart(); } @@ -169,8 +205,9 @@ namespace Restock { RetractEnd(); } + break; - + default: throw new ArgumentOutOfRangeException(); } @@ -181,12 +218,28 @@ namespace Restock } } - private void DeployStart() + private void DeployWait() + { + if (_inactiveAnimationPresent){ + CurrentState = State.InactiveWaiting; + PlayAnimation(InactiveAnimation, inactiveAnimationName, loop: false); + } + else + { + DeployStart(); + } + } + + private void DeployStart(float speed = 1f) { if (_deployAnimationPresent) { + if (_retractAnimationPresent && RetractAnimation.IsPlaying(retractAnimationName)) + { + RetractAnimation.Stop(retractAnimationName); + } CurrentState = State.Deploying; - PlayAnimation(DeployAnimation, deployAnimationName, deploySpeed); + PlayAnimation(DeployAnimation, deployAnimationName, speed * deploySpeed); } else { @@ -197,22 +250,41 @@ namespace Restock private void DeployEnd() { CurrentState = State.Active; + if (_activeAnimationPresent) { - PlayAnimation(ActiveAnimation, activeAnimationName); + PlayAnimation(ActiveAnimation, activeAnimationName, loop: true); } } - private void RetractStart() + private void RetractWait() + { + if (_activeAnimationPresent) + { + CurrentState = State.ActiveWaiting; + PlayAnimation(ActiveAnimation, activeAnimationName, loop: false); + } + else + { + RetractStart(); + } + } + + private void RetractStart(float speed = 1f) { if (_retractAnimationPresent) { + if (_deployAnimationPresent && DeployAnimation.IsPlaying(deployAnimationName)) + { + DeployAnimation.Stop(deployAnimationName); + } CurrentState = State.Retracting; - PlayAnimation(RetractAnimation, retractAnimationName, retractSpeed); - } else if (_deployAnimationPresent) + PlayAnimation(RetractAnimation, retractAnimationName, speed * retractSpeed); + } + else if (_deployAnimationPresent) { CurrentState = State.Retracting; - PlayAnimation(DeployAnimation, deployAnimationName, retractSpeed * -1); + PlayAnimation(DeployAnimation, deployAnimationName, speed * retractSpeed * -1); } else { @@ -223,26 +295,57 @@ namespace Restock private void RetractEnd() { CurrentState = State.Inactive; + if (_inactiveAnimationPresent) { - PlayAnimation(InactiveAnimation, inactiveAnimationName); + PlayAnimation(InactiveAnimation, inactiveAnimationName, loop: true); } } - private void PlayAnimation(Animation anim, string name, float speed = 1f) + private bool ConvertersEnabled() { - var animState = anim[name]; - if (speed < 0 && animState.time < Mathf.Epsilon) + if (needsEC && !CheatOptions.InfiniteElectricity) + { + var ecHash = PartResourceLibrary.ElectricityHashcode; + base.vessel.GetConnectedResourceTotals(ecHash, out var ecAmount, out _, true); + if (ecAmount < 0.1) + { + return false; + } + } + + foreach (var m in _modules) { - animState.time = animState.length; + if (m.ModuleIsActive()) + { + return true; + } } - else if (speed > 0 && animState.time > animState.length - Mathf.Epsilon) + + return false; + } + + private static void PlayAnimation(Animation anim, string name, float speed = 1f, bool loop = false) + { + var animState = anim[name]; + + if (animState.wrapMode != WrapMode.Loop) { - animState.time = 0.0f; + if (speed < 0 && animState.time < Mathf.Epsilon) + { + animState.time = animState.length; + } + else if (speed > 0 && animState.time > animState.length - Mathf.Epsilon) + { + animState.time = 0.0f; + } } animState.speed = speed; - anim.Play(name); + animState.wrapMode = loop ? WrapMode.Loop : WrapMode.Once; + + //if (!anim.IsPlaying(name)) + anim.Play(name); } } } \ No newline at end of file