Пример #1
0
        public CANM(EndianBinaryReader er)
        {
            Signature = er.ReadString(Encoding.ASCII, 4);
            if (Signature != "CANM") throw new SignatureNotCorrectException(Signature, "CANM", er.BaseStream.Position);
            Revision = er.ReadUInt32();
            NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            TargetAnimationGroupNameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            LoopMode = er.ReadUInt32();
            FrameSize = er.ReadSingle();
            NrMemberAnimations = er.ReadUInt32();
            MemberAnimationDictOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            NrUserDataEntries = er.ReadUInt32();
            UserDataOffset = er.ReadUInt32();

            long curpos = er.BaseStream.Position;
            er.BaseStream.Position = NameOffset;
            Name = er.ReadStringNT(Encoding.ASCII);
            er.BaseStream.Position = TargetAnimationGroupNameOffset;
            TargetAnimationGroupName = er.ReadStringNT(Encoding.ASCII);
            er.BaseStream.Position = MemberAnimationDictOffset;
            MemberAnimationDictionary = new DICT(er);

            MemberAnimations = new MemberAnimationData[NrMemberAnimations];
            for (int i = 0; i < NrMemberAnimations; i++)
            {
                er.BaseStream.Position = MemberAnimationDictionary[i].DataOffset;
                MemberAnimations[i] = new MemberAnimationData(er);
            }

            er.BaseStream.Position = curpos;
        }
Пример #2
0
 public txt1(EndianBinaryReader er)
     : base(er)
 {
     long baseoffset = er.BaseStream.Position - 0x4C;
     NrCharacters = er.ReadUInt16();
     NrCharacters2 = er.ReadUInt16();
     MaterialId = er.ReadUInt16();
     FontId = er.ReadUInt16();
     PositionType = er.ReadByte();
     TextAlignment = er.ReadByte();
     TextFlags = er.ReadByte();
     Padding = er.ReadByte();
     StringOffset = er.ReadUInt32();
     TopColor = er.ReadColor8();
     BottomColor = er.ReadColor8();
     FontSize = er.ReadVector2();
     CharSize = er.ReadSingle();
     LineSize = er.ReadSingle();
     er.BaseStream.Position = baseoffset + StringOffset;
     Text = er.ReadStringNT(Encoding.Unicode);
     er.BaseStream.Position = baseoffset + SectionSize;
 }
Пример #3
0
        public TXOB(EndianBinaryReader er)
        {
            Type = er.ReadUInt32();
            Signature = er.ReadString(Encoding.ASCII, 4);
            if (Signature != "TXOB") throw new SignatureNotCorrectException(Signature, "TXOB", er.BaseStream.Position);
            Revision = er.ReadUInt32();
            NameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            Unknown2 = er.ReadUInt32();
            Unknown3 = er.ReadUInt32();

            long curpos = er.BaseStream.Position;
            er.BaseStream.Position = NameOffset;
            Name = er.ReadStringNT(Encoding.ASCII);
            er.BaseStream.Position = curpos;
        }
Пример #4
0
        public ReferenceTexture(EndianBinaryReader er)
            : base(er)
        {
            LinkedTextureNameOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
            LinkedTextureOffset = er.ReadUInt32();
            if (LinkedTextureOffset != 0) LinkedTextureOffset += (UInt32)er.BaseStream.Position - 4;

            long curpos = er.BaseStream.Position;
            er.BaseStream.Position = LinkedTextureNameOffset;
            LinkedTextureName = er.ReadStringNT(Encoding.ASCII);
            er.BaseStream.Position = curpos;
        }
Пример #5
0
            public StringList(EndianBinaryReader reader)
            {
                Address = reader.BaseStream.Position;

                Strings = new Collection<string>();

                int count = reader.ReadInt32() & 0xffffff;
                int[] offsets = reader.ReadInt32s(count);

                foreach (var item in offsets)
                {
                    reader.BaseStream.Seek(Address + item, SeekOrigin.Begin);
                    Strings.Add(reader.ReadStringNT(Encoding.ASCII));
                }

                Length = reader.BaseStream.Position - Length;
            }
Пример #6
0
            public Node(EndianBinaryReader er)
            {
                RefBit = er.ReadUInt32();
                LeftIndex = er.ReadUInt16();
                RightIndex = er.ReadUInt16();
                NameOffset = er.ReadUInt32();
                if (NameOffset != 0) NameOffset += (UInt32)er.BaseStream.Position - 4;
                DataOffset = er.ReadUInt32();
                if (DataOffset != 0) DataOffset += (UInt32)er.BaseStream.Position - 4;

                if (NameOffset != 0)
                {
                    long curpos = er.BaseStream.Position;
                    er.BaseStream.Position = NameOffset;
                    Name = er.ReadStringNT(Encoding.ASCII);
                    er.BaseStream.Position = curpos;
                }
            }
Пример #7
0
            public MemberAnimationData(EndianBinaryReader er)
            {
                Flags = er.ReadUInt32();
                PathOffset = (UInt32)er.BaseStream.Position + er.ReadUInt32();
                PrimitiveType = (AnimationType)er.ReadUInt32();

                /*switch (PrimitiveType)
                {
                    case AnimationType.Vector2Animation:
                        var v = new Single[2][];
                        if ((Flags & 1) != 0) v[0] = new float[] { er.ReadSingle() };//constant
                        else if ((Flags & 4) != 0) er.ReadUInt32();//nothing = empty reference

                        Data = v;
                        break;
                }*/

                long curpos = er.BaseStream.Position;
                er.BaseStream.Position = PathOffset;
                Path = er.ReadStringNT(Encoding.ASCII);
                er.BaseStream.Position = curpos;
            }