void Parse(Stream s) { var br = new BinaryReader(s); this.version = br.ReadUInt32(); this.flags = br.ReadUInt32(); this.duration = br.ReadSingle(); this.initialOffsetQ = new Quaternion(RecommendedApiVersion, OnResourceChanged, s); this.initialOffsetT = new Vector3(RecommendedApiVersion, OnResourceChanged, s); if (version >= 5) { this.referenceNamespaceHash = br.ReadUInt32(); } if (version >= 10) { this.surfaceNamespaceHash = br.ReadUInt32(); this.surfaceJointNameHash = br.ReadUInt32(); } if (version >= 11) { this.surfacechildNamespaceHash = br.ReadUInt32(); } if (version >= 7) { this.clip_name = br.ReadString32(); } this.rigNameSpace = br.ReadString32(); if (version >= 4) { explicitNamespaces = new ExplicitNameSpaceList(OnResourceChanged, s); } this.slot_assignments = new IkConfiguration(OnResourceChanged, s); uint clipEventLength = br.ReadUInt32(); var events = new List <ClipEvent>(); for (int i = 0; i < clipEventLength; i++) { ClipEventType clipType = (ClipEventType)br.ReadUInt32(); uint size = br.ReadUInt32(); ClipEvent evt = ClipEvent.Create(clipType, this.OnResourceChanged, size); evt.Parse(s); events.Add(evt); } this.clip_events = new ClipEventList(this.OnResourceChanged, events); uint codecDataLength = br.ReadUInt32(); if (codecDataLength > 0) { this.codecData = new S3CLIP(RecommendedApiVersion, OnResourceChanged, s); } }
protected override Stream UnParse() { var ms = new MemoryStream(); var bw = new BinaryWriter(ms); if (this.version == 0) { this.version = 14; } bw.Write(this.version); bw.Write(this.flags); bw.Write(this.duration); if (this.initialOffsetQ == null) { this.initialOffsetQ = new Quaternion(RecommendedApiVersion, OnResourceChanged); } this.initialOffsetQ.UnParse(ms); if (this.initialOffsetT == null) { this.initialOffsetT = new Vector3(RecommendedApiVersion, OnResourceChanged); } this.initialOffsetT.UnParse(ms); if (version >= 5) { bw.Write(this.referenceNamespaceHash); } if (version >= 10) { bw.Write(this.surfaceNamespaceHash); bw.Write(this.surfaceJointNameHash); } if (version >= 11) { bw.Write(this.surfacechildNamespaceHash); } if (version >= 7) { if (this.clip_name == null) { this.clip_name = ""; } bw.WriteString32(this.clip_name); } if (this.rigNameSpace == null) { this.rigNameSpace = ""; } bw.WriteString32(this.rigNameSpace); if (version >= 4) { if (this.explicitNamespaces == null) { this.explicitNamespaces = new ExplicitNameSpaceList(OnResourceChanged); } this.explicitNamespaces.UnParse(ms); } if (this.slot_assignments == null) { this.slot_assignments = new IkConfiguration(OnResourceChanged); } this.slot_assignments.UnParse(ms); if (this.clip_events == null) { this.clip_events = new ClipEventList(OnResourceChanged); } bw.Write(this.clip_events.Count); foreach (var clip_event in clip_events) { bw.Write((uint)clip_event.TypeId); bw.Write(clip_event.Size); clip_event.UnParse(ms); } long codecStart = ms.Position; bw.Write(0); if (this.codecData == null) { this.codecData = new S3CLIP(RecommendedApiVersion, OnResourceChanged); } this.codecData.UnParse(ms); long codecEnd = ms.Position; ms.Position = codecStart; bw.Write((uint)(codecEnd - codecStart - 4)); ms.Position = 0L; return(ms); }