Example #1
0
 internal ModelBlockBase(BinaryReader binaryReader)
 {
     this.renderModel    = binaryReader.ReadTagReference();
     this.collisionModel = binaryReader.ReadTagReference();
     this.animation      = binaryReader.ReadTagReference();
     this.physics        = binaryReader.ReadTagReference();
     this.physicsModel   = binaryReader.ReadTagReference();
     this.disappearDistanceWorldUnits = binaryReader.ReadSingle();
     this.beginFadeDistanceWorldUnits = binaryReader.ReadSingle();
     this.invalidName_ = binaryReader.ReadBytes(4);
     this.reduceToL1WorldUnitsSuperLow  = binaryReader.ReadSingle();
     this.reduceToL2WorldUnitsLow       = binaryReader.ReadSingle();
     this.reduceToL3WorldUnitsMedium    = binaryReader.ReadSingle();
     this.reduceToL4WorldUnitsHigh      = binaryReader.ReadSingle();
     this.reduceToL5WorldUnitsSuperHigh = binaryReader.ReadSingle();
     this.invalidName_0      = binaryReader.ReadBytes(4);
     this.shadowFadeDistance = (ShadowFadeDistance)binaryReader.ReadInt16();
     this.invalidName_1      = binaryReader.ReadBytes(2);
     this.variants           = ReadModelVariantBlockArray(binaryReader);
     this.materials          = ReadModelMaterialBlockArray(binaryReader);
     this.newDamageInfo      = ReadGlobalDamageInfoBlockArray(binaryReader);
     this.targets            = ReadModelTargetBlockArray(binaryReader);
     this.modelRegionBlock   = ReadModelRegionBlockArray(binaryReader);
     this.modelNodeBlock     = ReadModelNodeBlockArray(binaryReader);
     this.invalidName_2      = binaryReader.ReadBytes(4);
     this.modelObjectData    = ReadModelObjectDataBlockArray(binaryReader);
     this.defaultDialogue    = binaryReader.ReadTagReference();
     this.uNUSED             = binaryReader.ReadTagReference();
     this.flags = (Flags)binaryReader.ReadInt32();
     this.defaultDialogueEffect = binaryReader.ReadStringID();
     this.renderOnlyNodeFlags   = new RenderOnlyNodeFlags(binaryReader);
     this.invalidName_3         = binaryReader.ReadByte();
 }
        public HierarchyModel(BinaryReader binaryReader)
        {
            this.renderModel = binaryReader.ReadTagReference();
            this.collisionModel = binaryReader.ReadTagReference();
            this.animation = binaryReader.ReadTagReference();
            this.physics = binaryReader.ReadTagReference();
            this.physicsModel = binaryReader.ReadTagReference();
            this.disappearDistanceWorldUnits = binaryReader.ReadSingle();
            this.beginFadeDistanceWorldUnits = binaryReader.ReadSingle();
            this.padding = binaryReader.ReadBytes(4);
            this.reduceToL1WorldUnitsSuperLow = binaryReader.ReadSingle();
            this.reduceToL2WorldUnitsLow = binaryReader.ReadSingle();
            this.reduceToL3WorldUnitsMedium = binaryReader.ReadSingle();
            this.reduceToL4WorldUnitsHigh = binaryReader.ReadSingle();
            this.reduceToL5WorldUnitsSuperHigh = binaryReader.ReadSingle();
            this.skip0 = binaryReader.ReadBytes(4);
            this.shadowFadeDistance = (ShadowFadeDistance)binaryReader.ReadInt16();
            this.padding1 = binaryReader.ReadBytes(2);
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(ModelVariantBlock));
                this.variants = new ModelVariantBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.variants[i] = new ModelVariantBlock(binaryReader);
                    }
                }
            }
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(ModelMaterialBlock));
                this.materials = new ModelMaterialBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.materials[i] = new ModelMaterialBlock(binaryReader);
                    }
                }
            }
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(GlobalDamageInfoBlock));
                this.newDamageInfo = new GlobalDamageInfoBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.newDamageInfo[i] = new GlobalDamageInfoBlock(binaryReader);
                    }
                }
            }
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(ModelTargetBlock));
                this.targets = new ModelTargetBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.targets[i] = new ModelTargetBlock(binaryReader);
                    }
                }
            }
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(ModelRegionBlock));
                this.modelRegionBlock = new ModelRegionBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.modelRegionBlock[i] = new ModelRegionBlock(binaryReader);
                    }
                }
            }
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(ModelNodeBlock));
                this.modelNodeBlock = new ModelNodeBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.modelNodeBlock[i] = new ModelNodeBlock(binaryReader);
                    }
                }
            }
            this.padding2 = binaryReader.ReadBytes(4);
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(ModelObjectDataBlock));
                this.modelObjectData = new ModelObjectDataBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.modelObjectData[i] = new ModelObjectDataBlock(binaryReader);
                    }
                }
            }
            this.defaultDialogueTheDefaultDialogueTagForThisModelOverridenByVariants = binaryReader.ReadTagReference();
            this.uNUSED = binaryReader.ReadTagReference();
            this.flags = (Flags)binaryReader.ReadInt32();
            this.defaultDialogueEffectTheDefaultDialogueTagForThisModelOverridenByVariants = binaryReader.ReadStringID();
            this.renderOnlyNodeFlags = new RenderOnlyNodeFlags[32];
            for (int i = 0; i < 32; ++i)
            {
                this.renderOnlyNodeFlags[i] = new RenderOnlyNodeFlags(binaryReader);
            }
            this.renderOnlySectionFlags = new RenderOnlySectionFlags[32];
            for (int i = 0; i < 32; ++i)
            {
                this.renderOnlySectionFlags[i] = new RenderOnlySectionFlags(binaryReader);
            }
            this.runtimeFlags = (RuntimeFlags)binaryReader.ReadInt32();
            {
                var count = binaryReader.ReadInt32();
                var address = binaryReader.ReadInt32();
                var elementSize = Marshal.SizeOf(typeof(GlobalScenarioLoadParametersBlock));
                this.scenarioLoadParameters = new GlobalScenarioLoadParametersBlock[count];
                using (binaryReader.BaseStream.Pin())
                {
                    for (int i = 0; i < count; ++i)
                    {
                        binaryReader.BaseStream.Position = address + i * elementSize;
                        this.scenarioLoadParameters[i] = new GlobalScenarioLoadParametersBlock(binaryReader);
                    }
                }
            }
            this.hologramShader = binaryReader.ReadTagReference();
            this.hologramControlFunction = binaryReader.ReadStringID();

            Initialize();
        }