Пример #1
0
    /// <summary>
    /// 读取unit数据信息
    /// </summary>
    /// <param name="br"></param>
    /// <param name="cID"></param>
    public void Read(BinaryReader br, int cID)
    {
        if (this.readed && this.dataLength > 0L)
        {
            br.BaseStream.Position += this.dataLength;
            return;
        }
        long num = 0L;

        this.createID = cID;
        long num2 = br.BaseStream.Position;
        long num3 = num2;

        this.prePath = br.ReadString();
        num2         = br.BaseStream.Position;
        if (br.ReadInt32() == 10009)
        {
            this.type = br.ReadInt32();
            if (!GameScene.isPlaying)
            {
            }
            this.unitParser      = UnitType.GenUnitParser(this.type);         //根据不同unit类型,使用对应的解析器解析数据
            this.unitParser.unit = this;
            if (GameScene.isPlaying && this.type == UnitType.UnitType_Light && this.scene.lightDataLength > 0L)
            {
                br.BaseStream.Position += this.scene.lightDataLength;
                return;
            }
            if (this.type == UnitType.UnitType_Light)
            {
                num = br.BaseStream.Position;
            }
            this.unitParser.Read(br);
        }
        else
        {
            br.BaseStream.Position = num2;
            this.unitParser        = new UnitParser();
        }
        this.dependResCount = br.ReadInt32();
        if (this.dependResCount != 0)
        {
        }
        for (int i = 0; i < this.dependResCount; i++)
        {
            br.ReadInt32();
        }
        int num4 = br.ReadInt32();

        this.lightmapPrototypes = new List <LightmapPrototype>();
        for (int i = 0; i < num4; i++)
        {
            LightmapPrototype lightmapPrototype = new LightmapPrototype();
            lightmapPrototype.rendererChildIndex = br.ReadInt32();
            lightmapPrototype.lightmapIndex      = br.ReadInt32();
            num2 = br.BaseStream.Position;
            if (br.ReadInt32() == 10006)
            {
                lightmapPrototype.scale = br.ReadSingle();
            }
            else
            {
                br.BaseStream.Position = num2;
            }
            lightmapPrototype.lightmapTilingOffset.x = br.ReadSingle();
            lightmapPrototype.lightmapTilingOffset.y = br.ReadSingle();
            lightmapPrototype.lightmapTilingOffset.z = br.ReadSingle();
            lightmapPrototype.lightmapTilingOffset.w = br.ReadSingle();
            this.lightmapPrototypes.Add(lightmapPrototype);
        }
        br.ReadSingle();
        this.position   = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
        this.rotation   = new Quaternion(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
        this.localScale = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
        num2            = br.BaseStream.Position;
        if (br.ReadInt32() == 20001)
        {
            this.combineParentUnitID = br.ReadInt32();
            bool flag = br.ReadBoolean();
            if (flag)
            {
                if (this.combinUnitIDs == null)
                {
                    this.combinUnitIDs = new List <int>();
                }
                num4 = br.ReadInt32();
                for (int i = 0; i < num4; i++)
                {
                    this.combinUnitIDs.Add(br.ReadInt32());
                }
            }
        }
        else
        {
            br.BaseStream.Position = num2;
        }
        this.cullingFactor = br.ReadSingle();
        num2 = br.BaseStream.Position;
        if (br.ReadInt32() == 40001)
        {
            this.center = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
        }
        else
        {
            this.center            = this.position;
            br.BaseStream.Position = num2;
            br.ReadSingle();
            br.ReadSingle();
            br.ReadSingle();
        }
        br.ReadSingle();
        br.ReadSingle();
        if (this.cullingFactor <= 0.01f)           //太小,使用默认剔除因子
        {
            this.cullingFactor = this.scene.terrainConfig.defautCullingFactor;
        }
        this.UpdateViewRange();
        long num5 = br.BaseStream.Position;

        this.dataLength = num5 - num3;
        if (this.type == UnitType.UnitType_Light)
        {
            this.scene.lightDataLength = num5 - num;
        }
        this.readed = true;
    }