Exemple #1
0
        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]));
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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];
            }
        }
Exemple #4
0
        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);
                }
            });
        }
Exemple #5
0
        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);
                }
            });
        }