Ejemplo n.º 1
0
 public ChunkMetaData(ChunkMetaData copyFrom)
 {
     ChunkMasterBiomeType = copyFrom.ChunkMasterBiomeType;
     ChunkMaxHeightBuilt  = copyFrom.ChunkMaxHeightBuilt;
     IsWild = copyFrom.IsWild;
     InitialSpawnableEntitiesAmount = new Dictionary <ushort, int>(copyFrom.InitialSpawnableEntitiesAmount);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Creates a copy of the data
 /// </summary>
 /// <param name="insideDataProvider"></param>
 public InsideDataProvider(InsideDataProvider insideDataProvider)
 {
     _chunkSize     = insideDataProvider._chunkSize;
     _chunkColumns  = (ChunkColumnInfo[])insideDataProvider._chunkColumns.Clone();
     _chunkMetaData = new ChunkMetaData(insideDataProvider.ChunkMetaData);
     _tags          = new Dictionary <Vector3I, BlockTag>(insideDataProvider._tags);
     if (insideDataProvider._blockBytes != null)
     {
         _blockBytes = (byte[])insideDataProvider._blockBytes.Clone();
     }
 }
Ejemplo n.º 3
0
        private void RefreshMetaData(Vector3I worldPosition, byte newBlockValue)
        {
            //From World Coordinate to Chunk Coordinate
            int arrayX = MathHelper.Mod(worldPosition.X, AbstractChunk.ChunkSize.X);
            int arrayZ = MathHelper.Mod(worldPosition.Z, AbstractChunk.ChunkSize.Z);
            //Compute 2D index of ColumnInfo and update ColumnInfo
            int index2D = arrayX * AbstractChunk.ChunkSize.Z + arrayZ;

            if (newBlockValue != WorldConfiguration.CubeId.Air)
            {
                //Change being made above surface !
                if (ColumnsInfo[index2D].MaxHeight < worldPosition.Y)
                {
                    ColumnsInfo[index2D].MaxHeight = (byte)worldPosition.Y;
                    ChunkMetaData.setChunkMaxHeightBuilt((byte)worldPosition.Y);
                    if (ColumnsInfo[index2D].IsWild)
                    {
                        ColumnsInfo[index2D].IsWild = false;
                        ChunkMetaData.setChunkWildStatus(ColumnsInfo);
                    }
                }
            }
            else
            {
                //Change being made at the surface (Block removed)
                if (ColumnsInfo[index2D].MaxHeight <= worldPosition.Y)
                {
                    int yPosi = worldPosition.Y - 1;
                    int index = ChunkCubes.Index(worldPosition.X, yPosi, worldPosition.Z);
                    while (ChunkCubes.Cubes[index].Id == WorldConfiguration.CubeId.Air && yPosi > 0)
                    {
                        index = ChunkCubes.FastIndex(index, yPosi, SingleArrayChunkContainer.IdxRelativeMove.Y_Minus1, false);
                        yPosi--;
                    }
                    ChunkMetaData.setChunkMaxHeightBuilt((byte)yPosi);
                    if (ColumnsInfo[index2D].IsWild)
                    {
                        ColumnsInfo[index2D].IsWild = false;
                        ChunkMetaData.setChunkWildStatus(ColumnsInfo);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void RefreshMetaData(ref Vector3I inChunkPosition, byte newBlockValue)
        {
            int indexColumn = inChunkPosition.X * _chunkSize.Z + inChunkPosition.Z;

            if (newBlockValue != WorldConfiguration.CubeId.Air)
            {
                //Change being made above surface !
                if (ColumnsInfo[indexColumn].MaxHeight < inChunkPosition.Y)
                {
                    ColumnsInfo[indexColumn].MaxHeight = (byte)inChunkPosition.Y;
                    ChunkMetaData.setChunkMaxHeightBuilt((byte)inChunkPosition.Y);
                    if (ColumnsInfo[indexColumn].IsWild)
                    {
                        ColumnsInfo[indexColumn].IsWild = false;
                        ChunkMetaData.setChunkWildStatus(ColumnsInfo);
                    }
                }
            }
            else
            {
                //Change being made at the surface (Block removed)
                if (ColumnsInfo[indexColumn].MaxHeight <= inChunkPosition.Y)
                {
                    int yPosi = inChunkPosition.Y - 1;
                    while (yPosi > 0 && GetBlock(inChunkPosition.X, yPosi, inChunkPosition.Z) == WorldConfiguration.CubeId.Air)
                    {
                        yPosi--;
                    }
                    ChunkMetaData.setChunkMaxHeightBuilt((byte)yPosi);
                    if (ColumnsInfo[indexColumn].IsWild)
                    {
                        ColumnsInfo[indexColumn].IsWild = false;
                        ChunkMetaData.setChunkWildStatus(ColumnsInfo);
                    }
                }
            }
        }
Ejemplo n.º 5
0
 public InsideDataProvider()
 {
     _chunkSize     = AbstractChunk.ChunkSize;
     _chunkColumns  = new ChunkColumnInfo[_chunkSize.X * _chunkSize.Z];
     _chunkMetaData = new ChunkMetaData();
 }
Ejemplo n.º 6
0
 public SingleArrayDataProvider()
 {
     _chunkSize     = AbstractChunk.ChunkSize;
     ChunkColumns   = new ChunkColumnInfo[_chunkSize.X * _chunkSize.Z];
     _chunkMetaData = new ChunkMetaData();
 }