/// <summary> /// Mod_LoadAliasGroup /// </summary> /// <returns>Offset of next data block in source byte array</returns> static int LoadAliasGroup(ByteArraySegment pin, ref maliasframedesc_t frame) { int offset = pin.StartIndex; daliasgroup_t pingroup = Sys.BytesToStructure<daliasgroup_t>(pin.Data, offset); int numframes = Common.LittleLong(pingroup.numframes); frame.Init(); frame.firstpose = _PoseNum; frame.numposes = numframes; for (int i = 0; i < 3; i++) { // these are byte values, so we don't have to worry about endianness frame.bboxmin.v[i] = pingroup.bboxmin.v[i]; frame.bboxmin.v[i] = pingroup.bboxmax.v[i]; } offset += daliasgroup_t.SizeInBytes; daliasinterval_t pin_intervals = Sys.BytesToStructure<daliasinterval_t>(pin.Data, offset); // (daliasinterval_t*)(pingroup + 1); frame.interval = Common.LittleFloat(pin_intervals.interval); offset += numframes * daliasinterval_t.SizeInBytes; for (int i = 0; i < numframes; i++) { trivertx_t[] tris = new trivertx_t[_Header.numverts]; int offset1 = offset + daliasframe_t.SizeInBytes; for (int j = 0; j < _Header.numverts; j++, offset1 += trivertx_t.SizeInBytes) { tris[j] = Sys.BytesToStructure<trivertx_t>(pin.Data, offset1); } _PoseVerts[_PoseNum] = tris; _PoseNum++; offset += daliasframe_t.SizeInBytes + _Header.numverts * trivertx_t.SizeInBytes; } return offset; }
/// <summary> /// Mod_LoadAliasFrame /// </summary> /// <returns>Offset of next data block in source byte array</returns> static int LoadAliasFrame(ByteArraySegment pin, ref maliasframedesc_t frame) { daliasframe_t pdaliasframe = Sys.BytesToStructure<daliasframe_t>(pin.Data, pin.StartIndex); frame.name = Common.GetString(pdaliasframe.name); frame.firstpose = _PoseNum; frame.numposes = 1; frame.bboxmin.Init(); frame.bboxmax.Init(); for (int i = 0; i < 3; i++) { // these are byte values, so we don't have to worry about // endianness frame.bboxmin.v[i] = pdaliasframe.bboxmin.v[i]; frame.bboxmax.v[i] = pdaliasframe.bboxmax.v[i]; } trivertx_t[] verts = new trivertx_t[_Header.numverts]; int offset = pin.StartIndex + daliasframe_t.SizeInBytes; //pinframe = (trivertx_t*)(pdaliasframe + 1); for (int i = 0; i < verts.Length; i++, offset += trivertx_t.SizeInBytes) { verts[i] = Sys.BytesToStructure<trivertx_t>(pin.Data, offset); } _PoseVerts[_PoseNum] = verts; _PoseNum++; return offset; }