Example #1
0
        public override void Open(HSDReader Reader)
        {
            uint NameOffset           = Reader.ReadUInt32();
            uint NextOff              = Reader.ReadUInt32();
            uint VertexAttributeArray = Reader.ReadUInt32();

            Flags = (POBJ_FLAG)Reader.ReadUInt16();
            int  DisplayListSize   = Reader.ReadUInt16() * 32;
            uint DisplayListOffset = Reader.ReadUInt32();
            uint WeightListOffset  = Reader.ReadUInt32();

            if (NextOff > 0)
            {
                Next = Reader.ReadObject <HSD_POBJ>(NextOff);
            }

            // Display List
            if (DisplayListOffset > 0)
            {
                DisplayListBuffer = Reader.ReadBuffer(DisplayListOffset, DisplayListSize);
            }

            if (VertexAttributeArray > 0)
            {
                VertexAttributes = Reader.ReadObject <HSD_AttributeGroup>(VertexAttributeArray);
            }

            //Skinning
            if (WeightListOffset > 0)
            {
                if (Flags.HasFlag(POBJ_FLAG.ENVELOPE))
                {
                    // offsets to array of bone-weight combinations
                    BindGroups = Reader.ReadObject <HSD_PointerArray <HSD_JOBJWeight> >(WeightListOffset);
                }
                else
                if (Flags.HasFlag(POBJ_FLAG.SHAPEANIM))
                {
                    throw new Exception("Shape Anim not supported");//??
                }
                else
                if (Flags.HasFlag(POBJ_FLAG.SKIN))
                {
                    // Single bind to given bone
                    SingleBind = Reader.ReadObject <HSD_JOBJ>(WeightListOffset);
                }
            }
        }
Example #2
0
 public override void Open(HSDReader Reader)
 {
     for (int i = 0; i < Size; i++)
     {
         Elements[i] = Reader.ReadObject <T>(Reader.Position());
     }
 }
Example #3
0
        public override void Open(HSDReader Reader)
        {
            uint  Offset = Reader.ReadUInt32();
            float Weight = Reader.ReadSingle();

            JOBJs   = new List <HSD_JOBJ>();
            Weights = new List <float>();
            while (Offset != 0)
            {
                JOBJs.Add(Reader.ReadObject <HSD_JOBJ>(Offset));
                Weights.Add(Weight);
                Offset = Reader.ReadUInt32();
                Weight = Reader.ReadSingle();
            }
        }
Example #4
0
        public override void Open(HSDReader Reader)
        {
            var rootNodeOffset = Reader.ReadUInt32();
            var offset         = Reader.ReadUInt32();
            var count          = Reader.ReadInt32();

            RootNode = Reader.ReadObject <HSD_JOBJ>(rootNodeOffset);

            Reader.Seek(offset);
            for (int i = 0; i < count; i++)
            {
                SBM_GrMapModelTable table = new SBM_GrMapModelTable();
                table.Open(Reader);
                Tables.Add(table);
            }
        }
Example #5
0
        public override void Open(HSDReader Reader)
        {
            Type = Reader.ReadInt32();
            if (Type == -1)
            {
                MatAnimJoint = Reader.ReadObject <HSD_MatAnimJoint>(Reader.ReadUInt32());
            }
            else
            {
                Reader.ReadInt32(); // nothing
            }
            FrameCount = Reader.ReadSingle();
            uint TrackCountOffset = Reader.ReadUInt32();
            uint TrackOffset      = Reader.ReadUInt32();

            Reader.Seek(TrackCountOffset);
            List <byte> TrackCounts = new List <byte>();
            byte        TrackCount;

            while ((TrackCount = Reader.ReadByte()) != 0xFF)
            {
                TrackCounts.Add(TrackCount);
            }

            int track = 0;

            for (int i = 0; i < TrackCounts.Count; i++)
            {
                HSD_AnimNode Node = new HSD_AnimNode();
                Nodes.Add(Node);
                for (int j = 0; j < TrackCounts[i]; j++)
                {
                    Reader.Seek((uint)(TrackOffset + 0xC * track++));
                    HSD_Track t = new HSD_Track();
                    t.Open(Reader);
                    Node.Tracks.Add(t);
                }
            }
        }
Example #6
0
        public override void Open(HSDReader Reader)
        {
            uint        Offset  = Reader.ReadUInt32();
            List <uint> Offsets = new List <uint>();

            while (Offset != 0)
            {
                if (SetSize != -1 && Offsets.Count >= SetSize)
                {
                    break;
                }
                Offsets.Add(Offset);
                Offset = Reader.ReadUInt32();
            }
            int i = 0;

            Elements = new T[Offsets.Count];
            foreach (uint Off in Offsets)
            {
                Elements[i++] = Reader.ReadObject <T>(Off);
            }
        }