diff --git a/QSB/Animation/AnimationSync.cs b/QSB/Animation/AnimationSync.cs index 4d45ff33..10f8f43b 100644 --- a/QSB/Animation/AnimationSync.cs +++ b/QSB/Animation/AnimationSync.cs @@ -21,12 +21,19 @@ namespace QSB.Animation private PlayerCharacterController _playerController; private CrouchSync _crouchSync; + private RuntimeAnimatorController RiebeckController; + private RuntimeAnimatorController ChertController; + private RuntimeAnimatorController GabbroController; + private RuntimeAnimatorController FeldsparController; + private void Awake() { _anim = gameObject.AddComponent(); _netAnim = gameObject.AddComponent(); _netAnim.enabled = false; _netAnim.animator = _anim; + + QSBSceneManager.OnSceneLoaded += OnSceneLoaded; } private void OnDestroy() @@ -41,6 +48,20 @@ namespace QSB.Animation _playerController.OnBecomeUngrounded -= OnBecomeUngrounded; GlobalMessenger.RemoveListener(EventNames.SuitUp, OnSuitUp); GlobalMessenger.RemoveListener(EventNames.RemoveSuit, OnSuitDown); + + QSBSceneManager.OnSceneLoaded -= OnSceneLoaded; + } + + private void OnSceneLoaded(OWScene scene, bool inUniverse) + { + var reibeckRoot = GameObject.Find("Traveller_HEA_Riebeck_ANIM_Talking"); + RiebeckController = reibeckRoot.GetComponent().runtimeAnimatorController; + var chertRoot = GameObject.Find("Traveller_HEA_Chert_ANIM_Chatter_Chipper"); + ChertController = chertRoot.GetComponent().runtimeAnimatorController; + var gabbroRoot = GameObject.Find("Traveller_HEA_Gabbro_ANIM_IdleFlute"); + GabbroController = gabbroRoot.GetComponent().runtimeAnimatorController; + var feldsparRoot = GameObject.Find("Traveller_HEA_Feldspar_ANIM_Talking"); + FeldsparController = feldsparRoot.GetComponent().runtimeAnimatorController; } private void InitCommon(Transform body) @@ -173,5 +194,26 @@ namespace QSB.Animation } SuitDown(); } + + public void SetAnimationType(AnimationType type) + { + switch (type) + { + case AnimationType.PlayerSuited: + _bodyAnim.runtimeAnimatorController = _suitedAnimController; + _anim.runtimeAnimatorController = _suitedAnimController; + break; + case AnimationType.PlayerUnsuited: + _bodyAnim.runtimeAnimatorController = _unsuitedAnimController; + _anim.runtimeAnimatorController = _unsuitedAnimController; + break; + case AnimationType.Chert: + _bodyAnim.runtimeAnimatorController = ChertController; + _bodyAnim.SetTrigger("Playing"); + _anim.runtimeAnimatorController = ChertController; + _anim.SetTrigger("Playing"); + break; + } + } } } diff --git a/QSB/Animation/AnimationType.cs b/QSB/Animation/AnimationType.cs new file mode 100644 index 00000000..7dee280e --- /dev/null +++ b/QSB/Animation/AnimationType.cs @@ -0,0 +1,9 @@ +namespace QSB.Animation +{ + public enum AnimationType + { + PlayerSuited, + PlayerUnsuited, + Chert + } +} diff --git a/QSB/Animation/AnimatorMirror.cs b/QSB/Animation/AnimatorMirror.cs index c40b2211..036d6d99 100644 --- a/QSB/Animation/AnimatorMirror.cs +++ b/QSB/Animation/AnimatorMirror.cs @@ -21,10 +21,12 @@ namespace QSB.Animation _to = to; if (_from.runtimeAnimatorController == null) { + DebugLog.DebugWrite($"Warning - \"From\" ({from.name}) controller is null.", MessageType.Warning); _from.runtimeAnimatorController = _to.runtimeAnimatorController; } else if (_to.runtimeAnimatorController == null) { + DebugLog.DebugWrite($"Warning - \"To\" ({to.name}) controller is null.", MessageType.Warning); _to.runtimeAnimatorController = _from.runtimeAnimatorController; } foreach (var param in _from.parameters.Where(p => p.type == AnimatorControllerParameterType.Float)) diff --git a/QSB/Instruments/InstrumentsManager.cs b/QSB/Instruments/InstrumentsManager.cs index 773c2266..b30e5bb0 100644 --- a/QSB/Instruments/InstrumentsManager.cs +++ b/QSB/Instruments/InstrumentsManager.cs @@ -1,4 +1,5 @@ -using QSB.EventsCore; +using QSB.Animation; +using QSB.EventsCore; using QSB.Instruments.QSBCamera; using QSB.Player; using UnityEngine; @@ -8,28 +9,11 @@ namespace QSB.Instruments public class InstrumentsManager : MonoBehaviour { public static InstrumentsManager Instance; - private RuntimeAnimatorController RiebeckController; - private RuntimeAnimatorController ChertController; - private RuntimeAnimatorController GabbroController; - private RuntimeAnimatorController FeldsparController; private void Awake() { Instance = this; gameObject.AddComponent(); - QSBSceneManager.OnSceneLoaded += OnSceneLoaded; - } - - private void OnSceneLoaded(OWScene scene, bool inUniverse) - { - var reibeckRoot = GameObject.Find("Traveller_HEA_Riebeck_ANIM_Talking"); - RiebeckController = reibeckRoot.GetComponent().runtimeAnimatorController; - var chertRoot = GameObject.Find("Traveller_HEA_Chert_ANIM_Chatter_Chipper"); - ChertController = chertRoot.GetComponent().runtimeAnimatorController; - var gabbroRoot = GameObject.Find("Traveller_HEA_Gabbro_ANIM_IdleFlute"); - GabbroController = gabbroRoot.GetComponent().runtimeAnimatorController; - var feldsparRoot = GameObject.Find("Traveller_HEA_Feldspar_ANIM_Talking"); - FeldsparController = feldsparRoot.GetComponent().runtimeAnimatorController; } private void Update() @@ -40,9 +24,7 @@ namespace QSB.Instruments { CameraManager.Instance.SwitchTo3rdPerson(); SwitchToInstrument(InstrumentType.RIEBECK); - var animator = Locator.GetPlayerTransform().Find("Traveller_HEA_Player_v2").GetComponent(); - animator.runtimeAnimatorController = ChertController; - animator.SetTrigger("Playing"); + QSBPlayerManager.GetSyncObject(QSBPlayerManager.LocalPlayerId).SetAnimationType(AnimationType.Chert); } else { diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index 34a4ecc4..b1015bf6 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -123,6 +123,7 @@ +