Files
BABA_YAGA/Assets/Scripts/Network/PlayerDataManager.cs
2026-04-30 15:08:19 +07:00

53 lines
1.4 KiB
C#

using System;
using Fusion;
using UnityEngine;
// struct quản lý thông tin
public struct _PlayerMetaData : INetworkStruct
{
public NetworkString<_16> Name;
public _Role Role;
public NetworkBool IsReady;
}
public class PlayerDataManager : NetworkBehaviour
{
public static PlayerDataManager Instance { get; private set; }
[Networked]
public NetworkDictionary<PlayerRef, _PlayerMetaData> Players => default;
public event Action<PlayerRef, string> OnChatMessageReceived;
public override void Spawned()
{
Instance = this;
}
[Rpc(RpcSources.All, RpcTargets.StateAuthority)]
public void RPC_UpdatePlayerMetaData(PlayerRef playerRef, _PlayerMetaData metaData)
{
Players.Set(playerRef, metaData);
}
[Rpc(RpcSources.All, RpcTargets.StateAuthority)]
public void RPC_SetReady(PlayerRef playerRef, bool ready)
{
if (Players.TryGet(playerRef, out var data))
{
data.IsReady = ready;
Players.Set(playerRef, data);
}
}
[Rpc(RpcSources.All, RpcTargets.All)]
public void RPC_SendChatMessage(PlayerRef sender, string message)
{
OnChatMessageReceived?.Invoke(sender, message);
}
public bool TryGetPlayerMetaData(PlayerRef playerRef, out _PlayerMetaData metaData)
{
return Players.TryGet(playerRef, out metaData);
}
}