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); } } }
public override void Open(HSDReader Reader) { for (int i = 0; i < Size; i++) { Elements[i] = Reader.ReadObject <T>(Reader.Position()); } }
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(); } }
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); } }
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); } } }
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); } }