99 lines
2.4 KiB
C#
Raw Normal View History

2025-09-24 11:24:38 +05:00
namespace Fusion.Addons.KCC
{
using System.Runtime.CompilerServices;
using UnityEngine;
public static unsafe partial class KCCNetworkUtility
{
// CONSTANTS
public const int WORD_COUNT_BOOL = 1;
public const int WORD_COUNT_INT = 1;
public const int WORD_COUNT_FLOAT = 1;
public const int WORD_COUNT_VECTOR3 = 3;
// PUBLIC METHODS
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool ReadBool(int* ptr)
{
return *ptr != 0 ? true : false;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void WriteBool(int* ptr, bool value)
{
*ptr = value == true ? 1 : 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int ReadInt(int* ptr)
{
return *ptr;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void WriteInt(int* ptr, int value)
{
*ptr = value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float ReadFloat(int* ptr)
{
return *(float*)ptr;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void WriteFloat(int* ptr, float value)
{
*(float*)ptr = value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vector3 ReadVector3(int* ptr)
{
Vector3 value;
value.x = *(float*)(ptr);
value.y = *(float*)(ptr + 1);
value.z = *(float*)(ptr + 2);
return value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void WriteVector3(int* ptr, Vector3 value)
{
*(float*)(ptr) = value.x;
*(float*)(ptr + 1) = value.y;
*(float*)(ptr + 2) = value.z;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static KCCNetworkID ReadNetworkID(int* ptr)
{
uint* uintPtr = (uint*)ptr;
KCCNetworkID networkID = new KCCNetworkID();
networkID.Value0 = *(uintPtr + 0);
networkID.Value1 = *(uintPtr + 1);
return networkID;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static KCCNetworkID ReadNetworkID(NetworkBehaviourBuffer buffer, int offset)
{
KCCNetworkID networkID = new KCCNetworkID();
networkID.Value0 = buffer.ReinterpretState<uint>(offset + 0);
networkID.Value1 = buffer.ReinterpretState<uint>(offset + 1);
return networkID;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void WriteNetworkID(int* ptr, KCCNetworkID networkID)
{
uint* uintPtr = (uint*)ptr;
*(uintPtr + 0) = networkID.Value0;
*(uintPtr + 1) = networkID.Value1;
}
}
}