2017-10-03 04:15:13 -05:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
public class CharacterAnimator : Photon.PunBehaviour
|
|
|
|
|
{
|
|
|
|
|
private Animator animator;
|
|
|
|
|
private int[] paramHashes;
|
|
|
|
|
private StateController controller;
|
|
|
|
|
|
|
|
|
|
public enum Params
|
|
|
|
|
{
|
2017-10-09 18:55:07 -05:00
|
|
|
|
Idle, MoveSpeed, PassingMessage, Interrupted, Wave, Acknowledging, Handshake, Interacting, Bow
|
2017-10-03 04:15:13 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual void Awake()
|
|
|
|
|
{
|
|
|
|
|
animator = GetComponent<Animator>();
|
|
|
|
|
controller = GetComponent<StateController>();
|
|
|
|
|
|
|
|
|
|
// Map param-enums to param-hashes with paramHashes Array
|
|
|
|
|
string[] enumNames = Enum.GetNames(typeof(Params));
|
|
|
|
|
paramHashes = new int[enumNames.Length];
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < paramHashes.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
paramHashes[i] = Animator.StringToHash(enumNames[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-03 13:36:57 -05:00
|
|
|
|
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
|
|
|
|
|
{
|
|
|
|
|
if (stream.isWriting)
|
|
|
|
|
{
|
|
|
|
|
stream.SendNext(controller.navMeshAgent.velocity.magnitude);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
animator.SetFloat(paramHashes[(int)Params.MoveSpeed], (float)stream.ReceiveNext());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-03 04:15:13 -05:00
|
|
|
|
protected virtual void Update()
|
|
|
|
|
{
|
2017-10-05 03:13:27 -05:00
|
|
|
|
if (photonView.isMine)
|
|
|
|
|
animator.SetFloat(paramHashes[(int)Params.MoveSpeed], controller.navMeshAgent.velocity.magnitude);
|
2017-10-03 04:15:13 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool GetTrigger(Params param)
|
|
|
|
|
{
|
|
|
|
|
return animator.GetBool(paramHashes[(int)param]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetTrigger(Params param)
|
|
|
|
|
{
|
|
|
|
|
photonView.RPC("SetTriggerRPC", PhotonTargets.All, paramHashes[(int)param], true);
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-09 18:55:07 -05:00
|
|
|
|
public bool GetBool(Params param)
|
|
|
|
|
{
|
|
|
|
|
return animator.GetBool(paramHashes[(int)param]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetBool(Params param, bool value)
|
|
|
|
|
{
|
|
|
|
|
photonView.RPC("SetBoolRPC", PhotonTargets.All, paramHashes[(int)param], value);
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-03 04:15:13 -05:00
|
|
|
|
public void ResetTrigger(Params param)
|
|
|
|
|
{
|
|
|
|
|
photonView.RPC("SetTriggerRPC", PhotonTargets.All, paramHashes[(int)param], false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[PunRPC]
|
|
|
|
|
void SetBoolRPC(int hash, bool value)
|
|
|
|
|
{
|
|
|
|
|
animator.SetBool(hash, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[PunRPC]
|
|
|
|
|
void SetTriggerRPC(int hash, bool value)
|
|
|
|
|
{
|
|
|
|
|
if (value)
|
|
|
|
|
animator.SetTrigger(hash);
|
|
|
|
|
else
|
|
|
|
|
animator.ResetTrigger(hash);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string GetParamName(Params param)
|
|
|
|
|
{
|
|
|
|
|
return Enum.GetName(typeof(Params), param);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|