using System; using System.Runtime.InteropServices; using UnityEngine; public static class QExtensions { public static TStruct[] ToStructArray(this IntPtr ptr, int count) { if (ptr == IntPtr.Zero) return null; TStruct[] result = new TStruct[count]; int size = Marshal.SizeOf(); IntPtr current = ptr; for (int i = 0; i < count; ++i) { result[i] = Marshal.PtrToStructure(current); current = IntPtr.Add(current, size); } return result; } public static int[] ToIntArray(this IntPtr ptr, int count) { if (ptr == IntPtr.Zero) return null; int[] result = new int[count]; Marshal.Copy(ptr, result, 0, count); return result; } public static Vector2 ToVector2(this QVec2 vec) { return new Vector2(vec.x, vec.y); } public static Vector3 ToVector3(this QVec3 vec) { return new Vector3(vec.x, vec.y, vec.z); } public static Vector3 ToVector3(this QTriVertex triVertex) { byte[] v = triVertex.v; return new Vector3(v[0], v[1], v[2]); } public static Vector3 ToUnity(this Vector3 vec) { return new Vector3(vec.x, vec.z, vec.y); } public static Quaternion ToUnityRotation(this QVec3 angles) { return Quaternion.Euler(angles.x, 90 - angles.y, -angles.z); } }