void AddPos(Vector3Int pos, BlockDatabase.BlockType type) { if (!blockPositions.ContainsKey(pos)) { blockPositions.Add(pos, type); } }
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); }
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); }