- Max Particle significantly reduced - preload ability assets & most shaders - fix coroutine error on channeled abilities - billboard random flickers fixed - spin to win animation and rotation sync fixed
162 lines
4.4 KiB
C#
162 lines
4.4 KiB
C#
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<Animator>();
|
|
agent = GetComponentInParent<NavMeshAgent>();
|
|
photonView = GetComponentInParent<PhotonView>();
|
|
parentController = GetComponentInParent<CharacterAnimatorParent>();
|
|
characterSpin = photonView.GetComponentInChildren<SimpleRotationFX>();
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
if (!photonView.IsMine)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
parentController = GetComponentInParent<CharacterAnimatorParent>();
|
|
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<CharacterAnimatorParent>();
|
|
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;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public enum AbilityAnimationType
|
|
{
|
|
Throw,
|
|
Spell,
|
|
Melee,
|
|
Spin
|
|
} |