Пример #1
0
        public void Sub9F3900(BinaryReader br, int count, string mapFileNameWithoutExtension, bool removeExisting)
        {
            if (count <= 0)
            {
                return;
            }

            for (var i = 0; i < count; ++i)
            {
                var blockCrc = br.ReadInt32();

                var strLen    = br.ReadUInt16();
                var blockName = "";

                if (strLen > 0)
                {
                    blockName = br.ReadStringWithMaxLength(strLen);
                }

                var fArr1 = new float[3];
                fArr1[0] = br.ReadSingle();
                fArr1[1] = br.ReadSingle();
                fArr1[2] = br.ReadSingle();

                var fArr2 = new float[3];
                fArr2[0] = br.ReadSingle();
                fArr2[1] = br.ReadSingle();
                fArr2[2] = br.ReadSingle();

                br.ReadInt16();

                var v22 = br.ReadInt16();

                if (v22 >= 2)
                {
                    var block = new StreamBlock();
                    block.ReadTextureInfo(br);
                    block.ReadTOCs(br);
                }
            }
        }
Пример #2
0
        public void LoadBlocksFromMapFile(BinaryReader br, int count, string mapFileNameWithoutExtension, bool removeExisting)
        {
            if (count <= 0)
            {
                return;
            }

            for (var i = 0; i < count; ++i)
            {
                var blockCrc = br.ReadInt32();

                var strLen    = br.ReadUInt16();
                var blockName = "";

                if (strLen > 0)
                {
                    blockName = br.ReadStringWithMaxLength(strLen);
                }

                var fArr1 = new float[3];
                fArr1[0] = br.ReadSingle();
                fArr1[1] = br.ReadSingle();
                fArr1[2] = br.ReadSingle();

                var fArr2 = new float[3];
                fArr2[0] = br.ReadSingle();
                fArr2[1] = br.ReadSingle();
                fArr2[2] = br.ReadSingle();

                br.ReadInt16();

                var v22 = br.ReadInt16();

                if (removeExisting && m_DynamicBlocks.ContainsKey(blockCrc))
                {
                    m_DynamicBlocks.Remove(blockCrc);
                }

                var block = new StreamBlock();
                block.Flags |= 8;
                block.m_nId  = blockCrc;
                block.SetFileNameFromFormat(@"{0}\{1}", mapFileNameWithoutExtension, blockName);

                // Do not override it. If removeExisting is true, existing ones will be removed
                if (!m_DynamicBlocks.ContainsKey(blockCrc))
                {
                    m_DynamicBlocks.Add(blockCrc, block);
                }
                else
                {
                    Console.WriteLine($"DEBUG: Trying to add {blockCrc} (${block.FileName}) to dictionary, but it already exists!");
                }

                block.FieldCC = fArr1[0];
                block.FieldD0 = 0.0f;
                block.FieldD4 = fArr1[2];
                block.FieldDC = fArr2[0];
                block.FieldE0 = 0.0f;
                block.FieldE4 = fArr2[2];

                block.Flags = (block.Flags & 0xFFFFE33F) | (uint)((v22 & 7) << 10);

                block.FieldA4 = UnkCalc(fArr1[0], fArr2[0]);
                block.FieldA8 = UnkCalc(0.0f, 0.0f);
                block.FieldAC = UnkCalc(fArr1[2], fArr2[2]);
                block.Flags  &= 0xFFFFFEF8;

                block.ReadTextureInfo(br);
                block.ReadTOCs(br);
            }
        }