r2mods/ilspy_dump/ror2_csproj/RoR2.Networking/NetworkLoadout.cs

139 lines
2.9 KiB
C#

using System;
using UnityEngine;
using UnityEngine.Networking;
namespace RoR2.Networking;
public class NetworkLoadout : NetworkBehaviour
{
private static readonly Loadout temp;
private readonly Loadout loadout = new Loadout();
private static int kCmdCmdSendLoadout;
public event Action onLoadoutUpdated;
public void CopyLoadout(Loadout dest)
{
loadout.Copy(dest);
}
public void SetLoadout(Loadout src)
{
src.Copy(loadout);
if (NetworkServer.active)
{
SetDirtyBit(1u);
}
else if (base.isLocalPlayer)
{
SendLoadoutClient();
}
OnLoadoutUpdated();
}
[Command]
private void CmdSendLoadout(byte[] bytes)
{
NetworkReader reader = new NetworkReader(bytes);
temp.Deserialize(reader);
SetLoadout(temp);
}
[Client]
private void SendLoadoutClient()
{
if (!NetworkClient.active)
{
Debug.LogWarning("[Client] function 'System.Void RoR2.Networking.NetworkLoadout::SendLoadoutClient()' called on server");
return;
}
NetworkWriter networkWriter = new NetworkWriter();
loadout.Serialize(networkWriter);
CallCmdSendLoadout(networkWriter.ToArray());
}
private void OnLoadoutUpdated()
{
this.onLoadoutUpdated?.Invoke();
}
public override bool OnSerialize(NetworkWriter writer, bool initialState)
{
uint num = base.syncVarDirtyBits;
if (initialState)
{
num = 1u;
}
writer.WritePackedUInt32(num);
if ((num & (true ? 1u : 0u)) != 0)
{
loadout.Serialize(writer);
}
return num != 0;
}
public override void OnDeserialize(NetworkReader reader, bool initialState)
{
if ((reader.ReadPackedUInt32() & (true ? 1u : 0u)) != 0)
{
temp.Deserialize(reader);
if (!base.isLocalPlayer)
{
temp.Copy(loadout);
OnLoadoutUpdated();
}
}
}
static NetworkLoadout()
{
temp = new Loadout();
kCmdCmdSendLoadout = 1217513894;
NetworkBehaviour.RegisterCommandDelegate(typeof(NetworkLoadout), kCmdCmdSendLoadout, InvokeCmdCmdSendLoadout);
NetworkCRC.RegisterBehaviour("NetworkLoadout", 0);
}
private void UNetVersion()
{
}
protected static void InvokeCmdCmdSendLoadout(NetworkBehaviour obj, NetworkReader reader)
{
if (!NetworkServer.active)
{
Debug.LogError("Command CmdSendLoadout called on client.");
}
else
{
((NetworkLoadout)obj).CmdSendLoadout(reader.ReadBytesAndSize());
}
}
public void CallCmdSendLoadout(byte[] bytes)
{
if (!NetworkClient.active)
{
Debug.LogError("Command function CmdSendLoadout called on server.");
return;
}
if (base.isServer)
{
CmdSendLoadout(bytes);
return;
}
NetworkWriter networkWriter = new NetworkWriter();
networkWriter.Write((short)0);
networkWriter.Write((short)5);
networkWriter.WritePackedUInt32((uint)kCmdCmdSendLoadout);
networkWriter.Write(GetComponent<NetworkIdentity>().netId);
networkWriter.WriteBytesFull(bytes);
SendCommandInternal(networkWriter, 0, "CmdSendLoadout");
}
public override void PreStartClient()
{
}
}