private static Entity ReadEntityLump(IntPtr ptr, LumpEntry def) { IntPtr lumpPtr = ptr + def.Offset; return(new Entity { Name = Marshal.PtrToStringAnsi(lumpPtr, def.Length) }); }
private static T[] ReadBasicLump <T>(IntPtr ptr, LumpEntry def) { IntPtr lumpPtr = ptr + def.Offset; int elementSize = Marshal.SizeOf <T>(); int elementCount = def.Length / elementSize; T[] lump = new T[elementCount]; for (int i = 0; i < elementCount; i++) { lump[i] = Marshal.PtrToStructure <T>(lumpPtr + i * elementSize); } return(lump); }
private static Visdata ReadVisDataLump(IntPtr ptr, LumpEntry def) { Visdata visData = new Visdata(); if (def.Length > 0) { IntPtr lumpPtr = ptr + def.Offset; visData.NumberVectors = Marshal.ReadInt32(lumpPtr); visData.VectorSize = Marshal.ReadInt32(lumpPtr + sizeof(int)); visData.Vectors = new byte[visData.NumberVectors * visData.VectorSize]; Marshal.Copy(lumpPtr + 2 * sizeof(int), visData.Vectors, 0, visData.Vectors.Length); } return(visData); }