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 Vector3 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] / 255f, v[1] / 255f, v[2] / 255f); } }