class GameScene(BaseScene): def __init__(self, director: Director) -> None: super().__init__(director) self.level = 1 self.terrain = Terrain() self.terrain.generate(self.level) self.player = Player(self.terrain.data) self.input_manager = InputManager() self.gradation_render = GradationRender() def update(self) -> None: self.player.update() self.input_manager.update() if self.player.state == "idle": move_keys = self.input_manager.move_keys if move_keys.left_key: self.player.move(Direction.LEFT) elif move_keys.right_key: self.player.move(Direction.RIGHT) elif move_keys.up_key: self.player.move(Direction.UP) elif move_keys.down_key: self.player.move(Direction.DOWN) def render(self) -> None: self.terrain.render(self.player.transform.draw_position) self.player.render() self.gradation_render.render(8)
class Dungeon: def __init__(self, player): self.player = player self.terrain = Terrain() self.level = 1 def generate(self): self.terrain.generate(self.level) def render(self): self.terrain.render(self.player.position.x, self.player.position.y)
class World: def __init__(self, server, path): self.server = server self.chunks = {} self.entities = [] self.spawnPoint = (8, 150, 8) #todo: use data from level.dat self.path = path def populate(self): if not os.path.exists(self.path): os.mkdir(self.path) if os.path.exists('%s/level.dat' % self.path): cantLoad = False f = open('%s/level.dat' % self.path, 'r') try: json.loads(f.read()) except: cantLoad = True self.server.log.error('level.dat unreadable or unparsable - resetting') f.close() defaults = {'seed': random.randrange(-9999999, 9999999), 'time': 0, 'name': '' } if not os.path.exists('%s/level.dat' % self.path) or cantLoad: f = open('%s/level.dat' % self.path, 'w') f.write(json.dumps(defaults)) f.close() f = open('%s/level.dat' % self.path, 'r') self.level = json.loads(f.read()) f.close() self.terrain = Terrain(self.level['seed']) #for x in range(16): # row = [] # for z in range(16): # row.append(self.terrain.generate(x, z)) # self.chunks.append(row) #print self.chunks[0][0].blocks[0][0][0] def touch(self, x, z): # same as unix touch command, basically creates a chunk file if it doesn't exist, otherwise keeps it try: self.chunks[x][z] except: if os.path.exists('%s/chunks/%s,%s' % (self.path, str(x), str(z))): self.parseChunk(x, z) else: if x in self.chunks: self.chunks[x] = {} self.chunks[x][z] = self.terrain.generate(x, z) return self.chunks[x][z] def flush(self): f = open('%s/level.dat' % self.path, 'w') f.write(json.dumps(self.level)) f.close() def loop(self): self.server.log.info('World tick loop begin') while not self.server.abort: self.level['time'] += 1 time.sleep(.05) # 20 ticks/second is 1/20 (.05) seconds per tick
class World: def __init__(self, server, path): self.server = server self.chunks = {} self.entities = [] self.spawnPoint = (8, 150, 8) #todo: use data from level.dat self.path = path def populate(self): if not os.path.exists(self.path): os.mkdir(self.path) if os.path.exists('%s/level.dat' % self.path): cantLoad = False f = open('%s/level.dat' % self.path, 'r') try: json.loads(f.read()) except: cantLoad = True self.server.log.error( 'level.dat unreadable or unparsable - resetting') f.close() defaults = { 'seed': random.randrange(-9999999, 9999999), 'time': 0, 'name': '' } if not os.path.exists('%s/level.dat' % self.path) or cantLoad: f = open('%s/level.dat' % self.path, 'w') f.write(json.dumps(defaults)) f.close() f = open('%s/level.dat' % self.path, 'r') self.level = json.loads(f.read()) f.close() self.terrain = Terrain(self.level['seed']) #for x in range(16): # row = [] # for z in range(16): # row.append(self.terrain.generate(x, z)) # self.chunks.append(row) #print self.chunks[0][0].blocks[0][0][0] def touch( self, x, z ): # same as unix touch command, basically creates a chunk file if it doesn't exist, otherwise keeps it try: self.chunks[x][z] except: if os.path.exists('%s/chunks/%s,%s' % (self.path, str(x), str(z))): self.parseChunk(x, z) else: if x in self.chunks: self.chunks[x] = {} self.chunks[x][z] = self.terrain.generate(x, z) return self.chunks[x][z] def flush(self): f = open('%s/level.dat' % self.path, 'w') f.write(json.dumps(self.level)) f.close() def loop(self): self.server.log.info('World tick loop begin') while not self.server.abort: self.level['time'] += 1 time.sleep(.05) # 20 ticks/second is 1/20 (.05) seconds per tick