using Photon.Pun; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class CharacterAnimatorController : MonoBehaviour { Animator anim; NavMeshAgent agent; PhotonView photonView; CharacterAnimatorParent parentController; SimpleRotationFX characterSpin; bool isCasting; bool wasSpinning = false; private void Awake() { anim = GetComponent(); agent = GetComponentInParent(); photonView = GetComponentInParent(); parentController = GetComponentInParent(); characterSpin = photonView.GetComponentInChildren(); } // Start is called before the first frame update void Start() { if (!photonView.IsMine) { return; } } private void OnEnable() { parentController = GetComponentInParent(); Debug.Log("OnEnable: parentController is " + (parentController != null ? "not null" : "null")); if (photonView.IsMine) { CastBarHandler.Instance.OnCastingStateChanged.AddListener(UpdateIsCastingState); Debug.Log("Adding Listener for character: " + this.gameObject.name); } } private void OnDisable() { if (photonView.IsMine) CastBarHandler.Instance.OnCastingStateChanged.RemoveListener(UpdateIsCastingState); } // Update is called once per frame void Update() { if (!photonView.IsMine) { if (characterSpin != null) characterSpin.enabled = anim.GetBool("spinning"); return; } anim.SetFloat("movementSpeed", agent.velocity.magnitude); } private void UpdateIsCastingState(bool isCasting) { this.isCasting = isCasting; if (isCasting) { anim.SetFloat("throwingTime", (1 / CastBarHandler.Instance.currentCastTime)); SetTriggerBasedOnAbility(CastBarHandler.Instance.currentAbility.animationType, CastBarHandler.Instance.currentAbility.animationType == AbilityAnimationType.Spin); if (parentController == null) { parentController = GetComponentInParent(); Debug.Log("OnEnable: parentController is " + (parentController != null ? "not null" : "null")); } Debug.Log("NULL: " + parentController); parentController.SetRemoteTriggerBasedOnAbility((int)CastBarHandler.Instance.currentAbility.animationType); } else if (wasSpinning) { SetTriggerBasedOnAbility(AbilityAnimationType.Spin, false); } } public void OnDeath() { SetDeadTrigger(); parentController.SetRemoteDead(); } public void OnRevived() { SetRevivedTrigger(); parentController.SetRemoteRevived(); } public void SetDeadTrigger() { anim.SetTrigger("dead"); } public void SetRevivedTrigger() { anim.SetTrigger("revived"); } public void OnAnimationEvent() { if (!photonView.IsMine) return; Debug.Log("$$melee Animation event"); //if (!isCasting) return; Debug.Log("$$melee Animation event casting true"); if (CastBarHandler.Instance.currentAbility.animationType == AbilityAnimationType.Melee) { CastBarHandler.Instance.ExecuteQueuedCastOnAnimationEvent(); parentController.castingStateController.ResetCastingOnMeleeAnimationEvent(); } } public void SetTriggerBasedOnAbility(AbilityAnimationType animationType, bool spinning = false) { switch (animationType) { case AbilityAnimationType.Throw: anim.SetTrigger("throw"); break; case AbilityAnimationType.Spell: anim.SetTrigger("cast"); break; case AbilityAnimationType.Melee: anim.SetTrigger("melee"); break; case AbilityAnimationType.Spin: wasSpinning = spinning; anim.SetBool("spinning", spinning); if (characterSpin != null) characterSpin.enabled = spinning; break; case AbilityAnimationType.Summon: anim.SetTrigger("summon"); break; default: break; } } } public enum AbilityAnimationType { Throw, Spell, Melee, Spin, Summon, Jump }