This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
project-undercover/Project Undercover/Assets/Scripts/CharacterStateMachine/CharacterAnimator.cs

94 lines
2.4 KiB
C#
Raw Normal View History

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()
{
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);
}
}