99 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | 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; | ||
|  | 		} | ||
|  | 	} | ||
|  | } |