|
|
|
|
|
|
|
using TMPro;
|
|
|
|
using Fusion;
|
|
|
|
using UnityEngine;
|
|
|
|
using Cinemachine;
|
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
|
|
|
|
public class NetworkPlayer : NetworkBehaviour
|
|
|
|
{
|
|
|
|
//===================================================
|
|
|
|
// FIELDS
|
|
|
|
//===================================================
|
|
|
|
// public static NetworkPlayer Local { get; set; }
|
|
|
|
// [Networked(OnChanged = nameof(OnUserNameChanged))]
|
|
|
|
// [OnChangedRender(nameof(OnUserNameChanged))]
|
|
|
|
[Networked]
|
|
|
|
[DisplayAsString]
|
|
|
|
public string UserName { get; private set; }
|
|
|
|
// public NetworkString<_16> UserName { get; private set; }
|
|
|
|
[SerializeField] TopDownPlayer _player = null;
|
|
|
|
[SerializeField] TopDownPlayerInput _input = null;
|
|
|
|
[SerializeField] AnimationController _animator = null;
|
|
|
|
[Space]
|
|
|
|
[SerializeField] CinemachineVirtualCamera _virtualCamPrefab = null;
|
|
|
|
[SerializeField] TMP_Text _userText = null;
|
|
|
|
|
|
|
|
//===================================================
|
|
|
|
// METHODS
|
|
|
|
//===================================================
|
|
|
|
public override void Spawned()
|
|
|
|
{
|
|
|
|
if (Object.HasInputAuthority)
|
|
|
|
{
|
|
|
|
Instantiate(_virtualCamPrefab).m_Follow = transform;
|
|
|
|
|
|
|
|
if(GameManager.Instance)
|
|
|
|
RPC_SetUserName(GameManager.Instance.UserName);
|
|
|
|
else
|
|
|
|
_userText.gameObject.SetActive(false);
|
|
|
|
|
|
|
|
if(AudioManager.Instance)
|
|
|
|
AudioManager.Instance.PlaySFX(SFX.Spawn);
|
|
|
|
|
|
|
|
GameLog.ShowMessage($"Spawned Local Player_{Object.Id}");
|
|
|
|
}//if end
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(Runner.GameMode == GameMode.Client)
|
|
|
|
{
|
|
|
|
Destroy(_player);
|
|
|
|
Destroy(_input);
|
|
|
|
Destroy(_animator);
|
|
|
|
}//if end
|
|
|
|
transform.name = Object.HasInputAuthority ? "Local" : "Remote" + $"{UserName}_{Object.Id}";
|
|
|
|
GameLog.ShowMessage($"Spawned Remote Player_{Object.Id}");
|
|
|
|
}//else end
|
|
|
|
|
|
|
|
}//Spawned() end
|
|
|
|
|
|
|
|
[Rpc(RpcSources.InputAuthority, RpcTargets.StateAuthority)]
|
|
|
|
public void RPC_SetUserName(string userName, RpcInfo info = default) => this.UserName = userName;
|
|
|
|
|
|
|
|
public override void Render()
|
|
|
|
{
|
|
|
|
if(_userText.text.Equals(UserName.ToString()) is false)
|
|
|
|
{
|
|
|
|
_userText.text = UserName.ToString();
|
|
|
|
}//if end
|
|
|
|
}//Render() end
|
|
|
|
|
|
|
|
}//class end
|