コード例 #1
0
ファイル: Model.cs プロジェクト: Memorix101/SharpQuake
        /// <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;
        }
コード例 #2
0
ファイル: Model.cs プロジェクト: Memorix101/SharpQuake
        /// <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;
        }