Ejemplo n.º 1
0
 void AddPos(Vector3Int pos, BlockDatabase.BlockType type)
 {
     if (!blockPositions.ContainsKey(pos))
     {
         blockPositions.Add(pos, type);
     }
 }
Ejemplo n.º 2
0
    bool CheckPositionInAdjacentChunk(Vector3Int position, Chunk chunk)
    {
        BlockDatabase.BlockType type = BlockDatabase.BlockType.AIR;

        if (chunk)
        {
            Vector3 worldPos = transform.TransformPoint(position);
            worldPos = chunk.transform.InverseTransformPoint(worldPos);

            position.x = (int)worldPos.x;
            position.y = (int)worldPos.y;
            position.z = (int)worldPos.z;
            chunk.blockPositions.TryGetValue(position, out type);
        }

        if (type != BlockDatabase.BlockType.AIR && type != BlockDatabase.BlockType.WATER)
        {
            return(true);
        }

        return(false);
    }
Ejemplo n.º 3
0
    List <int> CheckAdjacentPositions(Vector3Int pos)
    {
        List <int> verts = new List <int>();

        Vector3Int originalPos = pos;

        BlockDatabase.BlockType type = BlockDatabase.BlockType.AIR;
        blockPositions.TryGetValue(pos, out type);

        if (type == BlockDatabase.BlockType.WATER)
        {
            if (pos.y == 5)
            {
                foreach (int i in Block.top)
                {
                    verts.Add(i);
                }
            }

            return(verts);
        }

        type = BlockDatabase.BlockType.AIR;

        pos.x -= 1;
        blockPositions.TryGetValue(pos, out type);
        if ((type == BlockDatabase.BlockType.AIR || type == BlockDatabase.BlockType.WATER) && !(pos.x < 0 && CheckPositionInAdjacentChunk(pos, leftChunk)))
        {
            foreach (int i in Block.left)
            {
                verts.Add(i);
            }
        }

        type   = BlockDatabase.BlockType.AIR;
        pos.x += 2;
        blockPositions.TryGetValue(pos, out type);
        if ((type == BlockDatabase.BlockType.AIR || type == BlockDatabase.BlockType.WATER) && !(pos.x == chunkSize && CheckPositionInAdjacentChunk(pos, rightChunk)))
        {
            foreach (int i in Block.right)
            {
                verts.Add(i);
            }
        }

        pos = originalPos;

        type   = BlockDatabase.BlockType.AIR;
        pos.y -= 1;
        blockPositions.TryGetValue(pos, out type);
        if ((type == BlockDatabase.BlockType.AIR || type == BlockDatabase.BlockType.WATER) && !(pos.y < 0 && CheckPositionInAdjacentChunk(pos, belowChunk)))
        {
            foreach (int i in Block.bottom)
            {
                verts.Add(i);
            }
        }

        type   = BlockDatabase.BlockType.AIR;
        pos.y += 2;
        blockPositions.TryGetValue(pos, out type);
        if ((type == BlockDatabase.BlockType.AIR || type == BlockDatabase.BlockType.WATER) && !(pos.y == chunkSize && CheckPositionInAdjacentChunk(pos, topChunk)))
        {
            foreach (int i in Block.top)
            {
                verts.Add(i);
            }
        }

        pos = originalPos;

        type   = BlockDatabase.BlockType.AIR;
        pos.z -= 1;
        blockPositions.TryGetValue(pos, out type);
        if ((type == BlockDatabase.BlockType.AIR || type == BlockDatabase.BlockType.WATER) && !(pos.z < 0 && CheckPositionInAdjacentChunk(pos, behindChunk)))
        {
            foreach (int i in Block.front)
            {
                verts.Add(i);
            }
        }

        type   = BlockDatabase.BlockType.AIR;
        pos.z += 2;
        blockPositions.TryGetValue(pos, out type);
        if ((type == BlockDatabase.BlockType.AIR || type == BlockDatabase.BlockType.WATER) && !(pos.z == chunkSize && CheckPositionInAdjacentChunk(pos, frontChunk)))
        {
            foreach (int i in Block.back)
            {
                verts.Add(i);
            }
        }

        return(verts);
    }