RUDPFramework/Assets/Scripts/Player.cs

61 lines
1.7 KiB
C#

using Network.Defines;
using UnityEngine;
public class Player : MonoBehaviour
{
//[SerializeField] private float _moveSpeed = 10f;
public string PlayerId { get; private set; } = "1001";
[SerializeField] private MeshRenderer _meshRenderer;
[SerializeField] private Material[] _materials;
[SerializeField] private Camera _camera;
[SerializeField] private MovementComponent _movement;
[SerializeField] private PlayerUI _playerUI;
[SerializeField] private bool _isControlled;
public void LocalInit(string playerId, int speed, long serverTick)
{
this.PlayerId = playerId;
this._isControlled = true;
int idx = Random.Range(0, _materials.Length);
_meshRenderer.material = _materials[idx];
_playerUI.Init(this);
_movement.Init(true, this, speed, serverTick);
}
public void RemoteInit(string playerId, UnityEngine.Vector3 pos)
{
this.PlayerId = playerId;
this._isControlled = false;
int idx = Random.Range(0, _materials.Length);
_meshRenderer.material = _materials[idx];
Destroy(_camera.gameObject);
this.transform.position = pos;
_playerUI.Init(this);
_movement.Init(false, this);
}
private void OnApplicationQuit()
{
if (!string.IsNullOrEmpty(this.PlayerId) && _isControlled)
{
NetworkManager.Instance.SendLogoutRequest(this.PlayerId);
}
}
public void SyncPosition(PlayerState movement)
{
if (this._movement == null) return;
_movement.OnServerState(movement);
}
public void SyncTick(long serverTick)
{
_movement.SetServerTick(serverTick);
}
}