private void LoadAnim(ResU.VisibilityAnim vis) { VisibilityAnimU = vis; FrameCount = vis.FrameCount; Text = vis.Name; if (vis.BaseDataList == null) { vis.BaseDataList = new bool[0]; } if (vis.Names == null) { vis.Names = new string[0]; } BaseValues = vis.BaseDataList; foreach (var name in vis.Names) { BoneNames.Add(name); } for (int curve = 0; curve < vis.Curves.Count; curve++) { Values.Add(CurveHelper.CreateBooleanTrackWiiU(vis.Curves[curve])); } }
private void LoadAnim(VisibilityAnim vis) { VisibilityAnim = vis; FrameCount = vis.FrameCount; Text = vis.Name; if (vis.BaseDataList == null) { vis.BaseDataList = new bool[0]; } if (vis.Names == null) { vis.Names = new string[0]; } BaseValues = vis.BaseDataList; foreach (var name in vis.Names) { BoneNames.Add(name); } for (int curve = 0; curve < vis.Curves.Count; curve++) { var track = CurveHelper.CreateBooleanTrack(vis.Curves[curve]); track.Text = BoneNames[(int)track.AnimDataOffset]; Values.Add(track); } }
public SklData0(SklHeader header, BinaryReader reader) : base(header, reader) { int un = reader.ReadInt16(); int boneCount = reader.ReadInt16(); int boneIndexCount = reader.ReadInt32(); this.Bones = new SklBoneData0[boneCount]; this.bonesStart = reader.ReadInt32(); this.animationStart = reader.ReadInt32(); this.boneIndicesStart = reader.ReadInt32(); this.boneIndicesEnd = reader.ReadInt32(); this.halfayBetweenBoneindicesAndStrings = reader.ReadInt32(); this.boneNamesStart = reader.ReadInt32(); var gap = reader.ReadBytes(20); for (int i = 0; i < boneCount; i++) { Bones[i] = new SklBoneData0(reader); } this.BoneExtra = new SklBoneExtra[boneCount]; for (int i = 0; i < boneCount; i++) { this.BoneExtra[i] = new SklBoneExtra(reader); } reader.BaseStream.Seek(boneNamesStart, SeekOrigin.Begin); for (int i = 0; i < boneCount; i++) { string name = ""; string c = ""; do { c = new string(reader.ReadChars(4)); name += c; }while (c.IndexOf('\0') == -1); BoneNames.Add(name.Substring(0, name.IndexOf('\0'))); } foreach (var item in this.Bones) { item.Name = BoneNames[item.Id]; } }
internal void Read(EndianBinaryReader reader) { int osageNameCount = reader.ReadInt32(); int osageBoneCount = reader.ReadInt32(); reader.SeekCurrent(4); long osageBonesOffset = reader.ReadOffset(); long osageNamesOffset = reader.ReadOffset(); long nodesOffset = reader.ReadOffset(); int boneNameCount = reader.ReadInt32(); long boneNamesOffset = reader.ReadOffset(); long entriesOffset = reader.ReadOffset(); reader.ReadAtOffset(osageBonesOffset, () => { OsageBones.Capacity = osageBoneCount; for (int i = 0; i < osageBoneCount; i++) { var osageBone = new ExOsageBone(); osageBone.Read(reader); OsageBones.Add(osageBone); } }); reader.ReadAtOffset(osageNamesOffset, () => { OsageNames.Capacity = osageNameCount; for (int i = 0; i < osageNameCount; i++) { OsageNames.Add(reader.ReadStringOffset(StringBinaryFormat.NullTerminated)); } }); reader.ReadAtOffset(nodesOffset, () => { while (true) { string nodeSignature = reader.ReadStringOffset(StringBinaryFormat.NullTerminated); long nodeOffset = reader.ReadOffset(); if (nodeOffset == 0) { break; } reader.ReadAtOffset(nodeOffset, () => { if (!ExNode.NodeFactory.TryGetValue(nodeSignature, out var nodeConstructor)) { return; } var node = nodeConstructor(); node.Read(reader); Nodes.Add(node); }); } }); reader.ReadAtOffset(boneNamesOffset, () => { BoneNames.Capacity = boneNameCount; for (int i = 0; i < boneNameCount; i++) { BoneNames.Add(reader.ReadStringOffset(StringBinaryFormat.NullTerminated)); } }); reader.ReadAtOffset(entriesOffset, () => { while (true) { var entry = new ExEntry(); entry.Read(reader); if (entry.Field00 == 0) { break; } Entries.Add(entry); } }); }
internal void Read(EndianBinaryReader reader) { int osageNameCount = reader.ReadInt32(); int osageBoneCount = reader.ReadInt32(); reader.SeekCurrent(4); long osageBonesOffset = reader.ReadOffset(); long osageNamesOffset = reader.ReadOffset(); long exBlocksOffset = reader.ReadOffset(); int boneNameCount = reader.ReadInt32(); long boneNamesOffset = reader.ReadOffset(); long exEntriesOffset = reader.ReadOffset(); reader.ReadAtOffset(osageBonesOffset, () => { OsageBones.Capacity = osageBoneCount; for (int i = 0; i < osageBoneCount; i++) { var osageBone = new ExOsageBoneEntry(); osageBone.Read(reader); OsageBones.Add(osageBone); } }); reader.ReadAtOffset(osageNamesOffset, () => { OsageNames.Capacity = osageNameCount; for (int i = 0; i < osageNameCount; i++) { OsageNames.Add(reader.ReadStringOffset(StringBinaryFormat.NullTerminated)); } }); reader.ReadAtOffset(exBlocksOffset, () => { while (true) { string exBlockSignature = reader.ReadStringOffset(StringBinaryFormat.NullTerminated); long exBlockDataOffset = reader.ReadOffset(); if (exBlockDataOffset == 0) { break; } ExBlock exBlock = null; reader.ReadAtOffset(exBlockDataOffset, () => { switch (exBlockSignature) { case "OSG": exBlock = new ExBlockOsage(); break; case "EXP": exBlock = new ExBlockExpression(); break; case "MOT": exBlock = new ExBlockMotion(); break; case "CNS": exBlock = new ExBlockConstraint(); break; default: Debug.WriteLine($"WARNING: Unknown ex-block type {exBlockSignature}"); break; } if (exBlock != null) { exBlock.Read(reader); ExBlocks.Add(exBlock); } }); } }); reader.ReadAtOffset(boneNamesOffset, () => { BoneNames.Capacity = boneNameCount; for (int i = 0; i < boneNameCount; i++) { BoneNames.Add(reader.ReadStringOffset(StringBinaryFormat.NullTerminated)); } }); reader.ReadAtOffset(exEntriesOffset, () => { while (true) { var exEntry = new ExEntry(); exEntry.Read(reader); if (exEntry.Field00 == 0) { break; } Entries.Add(exEntry); } }); }