Exemple #1
0
    public void Load(BinaryReader reader)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        elevation = reader.ReadByte();
        RefreshPosition();
        waterLevel = reader.ReadByte();
        urbanLevel = reader.ReadByte();
        farmLevel  = reader.ReadByte();
        plantLevel = reader.ReadByte();

        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }

        riverData = reader.ReadByte();
        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }
    }
Exemple #2
0
    /// <summary>
    /// Reads from the binary file to assign cell data to this current cell.
    /// </summary>
    /// <param name="reader"> Binary reader used to read the binary file</param>
    public void Load(BinaryReader reader, int header)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        elevation = reader.ReadByte();
        if (header >= 4)
        {
            elevation -= 127;
        }
        RefreshPosition();
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        hasIncomingRiver = reader.ReadBoolean();
        incomingRiver    = (HexDirection)reader.ReadByte();

        hasOutgoingRiver = reader.ReadBoolean();
        outgoingRiver    = (HexDirection)reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = reader.ReadBoolean();
        }
        IsExplored = header >= 3 ? reader.ReadBoolean() : false;
        ShaderData.RefreshVisibility(this);
    }
Exemple #3
0
    public void Load(BinaryReader reader, int header)
    {
        // 按照保存顺序读取整形数据
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);

        elevation    = reader.ReadByte() - 127;
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        RefreshPosition();                                      // 刷新六边形gameobject高度

        walled = reader.ReadBoolean();

        // 读取流入河流数据
        byte incomingRiverData = reader.ReadByte();

        if (incomingRiverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(incomingRiverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }
        // 读取流出河流数据
        byte ougoingRiverData = reader.ReadByte();

        if (ougoingRiverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(ougoingRiverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        // 道路数据
        byte roadFlags = reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = (roadFlags & (1 << i)) != 0;         // 1左移i位,然后按位与,提取roadFlags对应位的数据。按位与: 0010 0110 & 0000 0010 = 0000 0010
        }                                                   //0010 0110 & 0000 1000 = 0000 0000

        // 探索状态(是否被探索过)数据
        IsExplored = header >= 3 ? reader.ReadBoolean() : false;    // 存档版本3以上才有探索状态数据
        ShaderData.RefreshVisibility(this);
    }
Exemple #4
0
    public void Load(BinaryReader reader, int header)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);

        if (header >= 4)
        {
            elevation -= 127;
        }

        RefreshPosition();
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }

        riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        int roadFlags = reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = (roadFlags & (1 << i)) != 0;
        }

        IsExplored = header >= 3 && reader.ReadBoolean();
        ShaderData.RefreshVisibility(this);
    }
    public void Load(BinaryReader reader)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);

        elevation  = reader.ReadByte();
        elevation -= 127;

        RefreshPosition();

        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        // Check if 8th bit is 1 which signals existence of river
        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);          // Read direction
        }
        else
        {
            hasIncomingRiver = false;
        }

        // Check if 8th bit is 1 which signals existence of river
        riverData = reader.ReadByte();
        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        int roadFlags = reader.ReadByte();

        for (int i = 0; i < Roads.Length; i++)
        {
            Roads[i] = (roadFlags & (1 << i)) != 0;             // If flag set then roads exists
        }

        IsExplored = reader.ReadBoolean();
        ShaderData.RefreshVisibility(this);
    }
Exemple #6
0
    public void Load(BinaryReader reader, int header)
    {
        terrain.TerrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        terrain.Elevation = reader.ReadByte();
        RefreshPosition();
        terrain.WaterLevel = reader.ReadByte();
        urbanLevel         = reader.ReadByte();
        farmLevel          = reader.ReadByte();
        plantLevel         = reader.ReadByte();
        specialIndex       = reader.ReadByte();
        walled             = reader.ReadBoolean();

        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            terrain.RiverTerrain.HasIncomingRiver = true;
            terrain.RiverTerrain.IncomingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            terrain.RiverTerrain.HasIncomingRiver = false;
        }

        riverData = reader.ReadByte();
        if (riverData >= 128)
        {
            terrain.RiverTerrain.HasOutgoingRiver = true;
            terrain.RiverTerrain.OutgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            terrain.RiverTerrain.HasOutgoingRiver = false;
        }

        int roadFlags = reader.ReadByte();

        for (int i = 0; i < terrain.RoadLength; i++)
        {
            bool currentFlag = (roadFlags & (1 << i)) != 0;
            terrain.SetRoad(i, currentFlag);
        }
        if (header >= 3)
        {
            IsExplored = reader.ReadBoolean();
        }
        ShaderData.RefreshVisibility(this);
    }
Exemple #7
0
    public void Load(BinaryReader reader)
    {
        _terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        elevation   = reader.ReadByte(); RefreshElevation();
        waterLevel  = reader.ReadByte();
        _TreeLevel  = reader.ReadByte();
        _StoneLevel = reader.ReadByte();
        _SpecIndex  = reader.ReadByte();

        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }

        riverData = reader.ReadByte();
        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        for (int count = 0; count < walls.Length; count++)
        {
            walls[count] = reader.ReadBoolean();
        }

        int roadFlags = reader.ReadByte();

        for (int count = 0; count < roads.Length; count++)
        {
            roads[count] = (roadFlags & (1 << count)) != 0;
        }
    }
Exemple #8
0
    public void Load(BinaryReader reader)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        elevation = reader.ReadByte();
        RefreshPosition();
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        hasIncomingRiver = reader.ReadBoolean();
        incomingRiver    = (HexDirection)reader.ReadByte();

        hasOutgoingRiver = reader.ReadBoolean();
        outgoingRiver    = (HexDirection)reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = reader.ReadBoolean();
        }
    }