def __init__(self, pygame, name, seed): self.name = name self.seed = seed self.blocksManager = BlocksManager(pygame) self.chunkDimensions = (16, 256) self.amtchunks = 1 self.chunks = [None] * self.amtchunks for i in range(len(self.chunks)): self.chunks[i] = BlockChunkControl( self.seed, ((i * self.chunkDimensions[0]), 0), self.blocksManager, self, i ) self.chunks[i].generateTerrain()
class BlockTerrainControl: name = None seed = None blocksManager = None chunks = None chunkDimensions = None amtchunks = None def __init__(self, pygame, name, seed): self.name = name self.seed = seed self.blocksManager = BlocksManager(pygame) self.chunkDimensions = (16, 256) self.amtchunks = 1 self.chunks = [None] * self.amtchunks for i in range(len(self.chunks)): self.chunks[i] = BlockChunkControl( self.seed, ((i * self.chunkDimensions[0]), 0), self.blocksManager, self, i ) self.chunks[i].generateTerrain() def getChunks(self): return self.chunks def getChunkDimensions(self): return self.chunkDimensions def getBlockDimensions(self): return self.blocksManager.getBlockDimensions() def convertToX(self, convert): return convert % self.chunkDimensions[0] def convertToY(self, convert): return convert / self.chunkDimensions[1] def convertToCoords(self, tile): return (self.convertToX(tile), self.convertToY(tile)) def convertFromCoords(self, coord): x = self.chunkDimensions[0] - coord[0] y = self.chunkDimensions[0] * coord[1] return y + x def getChunksToRender(self, offset, width): startingChunk = -1 for i in range(len(self.getChunks()) - 1): if ( offset[0] >= self.getChunks()[i].getPosition()[0] * 16 and offset[0] < self.getChunks()[i + 1].getPosition()[0] * 16 ): startingChunk = i if startingChunk < 0: self.addChunkWest() startingChunk = 0 endingChunk = -1 for i in range(len(self.getChunks()) - 1): if ( width + offset[0] >= self.getChunks()[i].getPosition()[0] * 16 and width + offset[0] < self.getChunks()[i + 1].getPosition()[0] * 16 ): endingChunk = i if endingChunk < 0: self.addChunkEast() endingChunk = len(self.getChunks()) - 1 return self.getChunks()[startingChunk : endingChunk + 1] def addChunkWest(self): self.amtchunks += 1 newchunks = [None] newchunks[0] = BlockChunkControl( self.seed, ((self.chunks[0].getPosition()[0] - self.chunkDimensions[0]), 0), self.blocksManager, self, 0 ) newchunks += self.chunks self.chunks = newchunks for i in range(len(self.chunks)): self.chunks[i].setPosInArray(i) self.chunks[0].generateTerrain() def addChunkEast(self): self.amtchunks += 1 newchunks = [None] newchunks[0] = BlockChunkControl( self.seed, ((self.chunks[-1].getPosition()[0] + self.chunkDimensions[0]), 0), self.blocksManager, self, len(self.chunks), ) newchunks = self.chunks + newchunks self.chunks = newchunks for i in range(len(self.chunks)): self.chunks[i].setPosInArray(i) self.chunks[-1].generateTerrain() def draw(self, screen, offset, resolution): width = resolution[0] height = resolution[1] for chunk in self.getChunksToRender(offset, width): currx = 0 curry = 0 for block in chunk.getBlocks(): if currx > chunk.getDimensions()[0] - 1: currx = 0 curry += 1 if not block.getId() == 0: # Air location = ( currx * block.getImage().getWidth() - offset[0] + (chunk.getPosition()[0] * 16), curry * block.getImage().getHeight() - offset[1], ) if ( not ( location[0] <= 0 - abs(offset[0] / self.getBlockDimensions()[0]) - block.getImage().getWidth() ) and not ( location[0] >= width + abs((offset[0] / self.getBlockDimensions()[0]) + self.getBlockDimensions()[0]) ) and not ( location[1] <= 0 - abs(offset[1] / self.getBlockDimensions()[1]) - block.getImage().getHeight() ) and not ( location[1] >= height + abs((offset[1] / self.getBlockDimensions()[1]) + self.getBlockDimensions()[1]) ) ): screen.blit(block.getImage().getSurface(), location) currx += 1