Exemple #1
0
        public void Read(BinaryReader br)
        {
            VTable           = br.ReadUInt32();
            NodeType         = (HtmlNodeType)br.ReadInt32();
            ParentNodeOffset = ResourceUtil.ReadOffset(br);

            ChildNodes = new PtrCollection <HtmlNode>(br);
            foreach (var node in ChildNodes)
            {
                node.ParentNode = this;
            }

            RenderState = new HtmlRenderState(br);

            if (NodeType != HtmlNodeType.HtmlDataNode)
            {
                Tag          = (HtmlTag)br.ReadInt32();
                _fDC         = br.ReadUInt32();
                _linkAddress = new SimpleCollection <byte>(br, reader => reader.ReadByte());
                if (NodeType == HtmlNodeType.HtmlTableElementNode)
                {
                    _fE8 = br.ReadInt32();
                    _fEC = br.ReadInt32();
                }
            }
            else
            {
                Data = new PtrString(br);
            }
        }
Exemple #2
0
 internal Model(PtrCollection<Resource.Models.Model> infos)
 {
     Geometries = new List<Geometry>(infos.Count);
     foreach (var info in infos)
     {
         Geometries.Add(new Geometry(info));
     }
 }
Exemple #3
0
 internal Model(PtrCollection <Resource.Models.Model> infos)
 {
     Geometries = new List <Geometry>(infos.Count);
     foreach (var info in infos)
     {
         Geometries.Add(new Geometry(info));
     }
 }
Exemple #4
0
        public void Read(BinaryReader br)
        {
            RootElement = new PtrValue<HtmlNode>(br).Value;

            BodyOffset = ResourceUtil.ReadOffset(br);
            Unknown1Offset = ResourceUtil.ReadOffset(br);
            TextureDictionaryOffset = ResourceUtil.ReadOffset(br);

            Unknown2 = new PtrCollection<UnDocData>(br);
            ChildNodes = new PtrCollection<HtmlNode>(br);
            Unknown3 = new PtrCollection<UnDocData>(br);
        }
Exemple #5
0
        public void Read(BinaryReader br)
        {
            RootElement = new PtrValue <HtmlNode>(br).Value;

            BodyOffset              = ResourceUtil.ReadOffset(br);
            Unknown1Offset          = ResourceUtil.ReadOffset(br);
            TextureDictionaryOffset = ResourceUtil.ReadOffset(br);

            Unknown2   = new PtrCollection <UnDocData>(br);
            ChildNodes = new PtrCollection <HtmlNode>(br);
            Unknown3   = new PtrCollection <UnDocData>(br);
        }
Exemple #6
0
        public new void Read(BinaryReader br)
        {
            base.Read(br);

            TextureDictionaryOffset = ResourceUtil.ReadOffset(br);

            // CPtrCollection<T>
            Shaders = new PtrCollection<ShaderFx>(br);

            Zeros = new SimpleArray<uint>(br, 12, r => r.ReadUInt32());

            VertexDeclarationUsageFlags = new SimpleCollection<uint>(br, reader => reader.ReadUInt32());

            Data3 = new SimpleCollection<uint>(br, reader => reader.ReadUInt32());
        }
Exemple #7
0
        public new void Read(BinaryReader br)
        {
            base.Read(br);

            TextureDictionaryOffset = ResourceUtil.ReadOffset(br);

            // CPtrCollection<T>
            Shaders = new PtrCollection <ShaderFx>(br);

            Zeros = new SimpleArray <uint>(br, 12, r => r.ReadUInt32());

            VertexDeclarationUsageFlags = new SimpleCollection <uint>(br, reader => reader.ReadUInt32());

            Data3 = new SimpleCollection <uint>(br, reader => reader.ReadUInt32());
        }
Exemple #8
0
        public new void Read(BinaryReader br)
        {
            base.Read(br);

            Geometries = new PtrCollection <Geometry>(br);

            var unknownVectorOffsets  = ResourceUtil.ReadOffset(br);
            var materialMappingOffset = ResourceUtil.ReadOffset(br);

            Unknown1 = br.ReadUInt16();
            Unknown2 = br.ReadUInt16();

            Unknown3 = br.ReadUInt16();
            Unknown4 = br.ReadUInt16();

            //

            br.BaseStream.Seek(unknownVectorOffsets, SeekOrigin.Begin);
            UnknownVectors = new SimpleArray <Vector4>(br, 4, reader => new Vector4(reader));

            br.BaseStream.Seek(materialMappingOffset, SeekOrigin.Begin);
            ShaderMappings = new SimpleArray <ushort>(br, Geometries.Count, reader => reader.ReadUInt16());
        }
Exemple #9
0
        public new void Read(BinaryReader br)
        {
            base.Read(br);

            Geometries = new PtrCollection<Geometry>(br);

            var unknownVectorOffsets = ResourceUtil.ReadOffset(br);
            var materialMappingOffset = ResourceUtil.ReadOffset(br);

            Unknown1 = br.ReadUInt16();
            Unknown2 = br.ReadUInt16();

            Unknown3 = br.ReadUInt16();
            Unknown4 = br.ReadUInt16();

            //

            br.BaseStream.Seek(unknownVectorOffsets, SeekOrigin.Begin);
            UnknownVectors = new SimpleArray<Vector4>(br, 4, reader => new Vector4(reader));

            br.BaseStream.Seek(materialMappingOffset, SeekOrigin.Begin);
            ShaderMappings = new SimpleArray<ushort>(br, Geometries.Count, reader => reader.ReadUInt16());
        }
Exemple #10
0
        public new void Read(BinaryReader br)
        {
            base.Read(br);

            // rage::rmcDrawableBase
            //    rage::rmcDrawable
            //        gtaDrawable

            var shaderGroupOffset = ResourceUtil.ReadOffset(br);
            var skeletonOffset = ResourceUtil.ReadOffset(br);

            Center = new Vector4(br);
            BoundsMin = new Vector4(br);
            BoundsMax = new Vector4(br);

            int levelOfDetailCount = 0;
            var modelOffsets = new uint[4];
            for (int i = 0; i < 4; i++)
            {
                modelOffsets[i] = ResourceUtil.ReadOffset(br);
                if (modelOffsets[i] != 0)
                {
                    levelOfDetailCount++;
                }
            }

            AbsoluteMax = new Vector4(br);

            Unk1 = br.ReadUInt32();

            Neg1 = br.ReadUInt32();
            Neg2 = br.ReadUInt32();
            Neg3 = br.ReadUInt32();

            Unk2 = br.ReadSingle();

            Unk3 = br.ReadUInt32();
            Unk4 = br.ReadUInt32();
            Unk5 = br.ReadUInt32();

            // Collection<LightAttrs>
            Unk6 = br.ReadUInt32();
            Unk7 = br.ReadUInt32();

            // The data follows:

            if (shaderGroupOffset != 0)
            {
                br.BaseStream.Seek(shaderGroupOffset, SeekOrigin.Begin);
                ShaderGroup = new ShaderGroup(br);
            }

            if (skeletonOffset != 0)
            {
                br.BaseStream.Seek(skeletonOffset, SeekOrigin.Begin);
                Skeleton = new Skeleton(br);
            }

            ModelCollection = new PtrCollection<Model>[levelOfDetailCount];
            for (int i = 0; i < levelOfDetailCount; i++)
            {
                br.BaseStream.Seek(modelOffsets[i], SeekOrigin.Begin);
                ModelCollection[i] = new PtrCollection<Model>(br);
            }
        }
Exemple #11
0
        public void Read(BinaryReader br)
        {
            VTable = br.ReadUInt32();
            NodeType = (HtmlNodeType)br.ReadInt32();
            ParentNodeOffset = ResourceUtil.ReadOffset(br);
            
            ChildNodes = new PtrCollection<HtmlNode>(br);
            foreach (var node in ChildNodes)
            {
                node.ParentNode = this;
            }

            RenderState = new HtmlRenderState(br);

            if (NodeType != HtmlNodeType.HtmlDataNode)
            {
                Tag = (HtmlTag)br.ReadInt32();
                _fDC = br.ReadUInt32();
                _linkAddress = new SimpleCollection<byte>(br, reader => reader.ReadByte());
                if (NodeType == HtmlNodeType.HtmlTableElementNode)
                {
                    _fE8 = br.ReadInt32();
                    _fEC = br.ReadInt32();
                }
            }
            else
            {
                Data = new PtrString(br);
            }
        }
Exemple #12
0
        public new void Read(BinaryReader br)
        {
            base.Read(br);

            // rage::rmcDrawableBase
            //    rage::rmcDrawable
            //        gtaDrawable

            var shaderGroupOffset = ResourceUtil.ReadOffset(br);
            var skeletonOffset    = ResourceUtil.ReadOffset(br);

            Center    = new Vector4(br);
            BoundsMin = new Vector4(br);
            BoundsMax = new Vector4(br);

            int levelOfDetailCount = 0;
            var modelOffsets       = new uint[4];

            for (int i = 0; i < 4; i++)
            {
                modelOffsets[i] = ResourceUtil.ReadOffset(br);
                if (modelOffsets[i] != 0)
                {
                    levelOfDetailCount++;
                }
            }

            AbsoluteMax = new Vector4(br);

            Unk1 = br.ReadUInt32();

            Neg1 = br.ReadUInt32();
            Neg2 = br.ReadUInt32();
            Neg3 = br.ReadUInt32();

            Unk2 = br.ReadSingle();

            Unk3 = br.ReadUInt32();
            Unk4 = br.ReadUInt32();
            Unk5 = br.ReadUInt32();

            // Collection<LightAttrs>
            Unk6 = br.ReadUInt32();
            Unk7 = br.ReadUInt32();

            // The data follows:

            if (shaderGroupOffset != 0)
            {
                br.BaseStream.Seek(shaderGroupOffset, SeekOrigin.Begin);
                ShaderGroup = new ShaderGroup(br);
            }

            if (skeletonOffset != 0)
            {
                br.BaseStream.Seek(skeletonOffset, SeekOrigin.Begin);
                Skeleton = new Skeleton(br);
            }

            ModelCollection = new PtrCollection <Model> [levelOfDetailCount];
            for (int i = 0; i < levelOfDetailCount; i++)
            {
                br.BaseStream.Seek(modelOffsets[i], SeekOrigin.Begin);
                ModelCollection[i] = new PtrCollection <Model>(br);
            }
        }
Exemple #13
0
        public static void *Alloc(Pool *self, int size)
        {
            if ((size & 0x3) != 0)                // align to 4
            {
                size = (((size >> 2) + 1) << 2);
            }
                        #if FDB
            Verify(self);
            Should.GreaterThanZero("size", size);
                        #endif
            byte *arr = self->arr;

            int *head;
            int *freeHead;
            int  freeSize;

            int curFree = 0;
            while (curFree != -1)                // foreach free block
            {
                head = (int *)(arr + curFree);
                int blockSize = head[2];
                if (blockSize >= size)                    // found a block that can fit
                // | head | data...                              | tail |
                //        | blockSize                            |
                // | head | data... | tail | freeHead | data...  | tail |
                //        | size    |                 | freeSize |
                {
                    freeSize = blockSize - size - TailSize - HeadSize;
                    if (freeSize > 0)                        // split
                    {
                        freeHead = (int *)((byte *)head + HeadSize + size + TailSize);
                        SetFreeMetaAndInsert(arr, freeHead, freeSize);
                        MergeRight(arr, freeHead);

                        RemoveFromFreeList(arr, head);
                        SetUsedMeta(head, size);
                    }
                    else
                    {
                        RemoveFromFreeList(arr, head);
                        SetUsedMeta(head, blockSize);
                    }
                                        #if FDB
                    Verify(self);
                                        #endif
                    return(head + 3);
                }
                curFree = head[1];
            }

            // expand and split
            // | data... | endHead  |
            // | data... | freeHead | data...  | freeTail | head | data... | tail | endHead |
            // | len                                                                        |
            // | oldLen             | freeSize |                 | size    |
            int oldLen = self->len, len = oldLen, minLen = oldLen + HeadSize + size + TailSize + HeadSize + TailSize;
            while (len < minLen)
            {
                len <<= 1;
            }
            self->len = len;
//			Fdb.Log("{0:X}", (long)arr);
//			Fdb.Log("len: {0}", Mem.Verify(arr));
            byte *oldArr = arr;
            arr = self->arr = (byte *)Mem.Realloc(arr, len);
            long shift = self->shift = arr - oldArr;
            if (shift != 0)
            {
                var    dependentLst = &self->dependentLst;
                void **dependentArr = dependentLst->arr;
                for (int i = 0, dependentLen = dependentLst->count; i < dependentLen; i += 1)
                {
                    PtrCollection.ShiftBase(dependentArr[i], shift);
                }
            }
//			Fdb.Log("{0:X}", (long)arr);
//			Fdb.Log("len: {0}", Mem.Verify(self->arr));

            freeHead = (int *)(arr + oldLen - HeadSize);
            freeSize = len - oldLen - TailSize - HeadSize - size - TailSize - HeadSize;
            SetFreeMetaAndInsert(arr, freeHead, freeSize);
//			Fdb.Dump(arr, len);
            MergeLeft(arr, freeHead);

            int *endHead = (int *)(arr + len - HeadSize);
            endHead[0] = -1;
            endHead[1] = -1;
            endHead[2] = 0;

            head = (int *)((byte *)freeHead + HeadSize + freeSize + TailSize);
            SetUsedMeta(head, size);
                        #if FDB
            Verify(self);
                        #endif
            return(head + 3);
        }