def newgame(self, level): logger.info("Starting new game...") self.window.flush() # for i in range(100): # print(str(i) + ": " + self.generate_name("surname")) dungeon_cfg = load_cfg("Dungeon2") self.dungeon = DungeonGenerator( logger, dungeon_cfg ) self.game_size = ( dungeon_cfg["dungeon_size"][0] * 32, dungeon_cfg["dungeon_size"][1] * 32 ) self.space = pymunk.Space() self.dungeon.generate() self.spatial_hash = spatial.SpatialHash() for w in self.dungeon.walls: self.spatial_hash.insert_object_for_rect( w.p1, w.p2, w ) for c in self.dungeon.collidable: self.spatial_hash.insert_object_for_rect( c.p1, c.p2, c ) logger.info("Generating dungeon graphics...") img_grid = self.dungeon.get_tilemap() grid_to_image( img_grid, "dungeon", self.game_size ) dungeon_texture = self.window.load_single_texture( "dungeon" ) dungeon_overlay_texture = self.window.load_single_texture( "dungeon_overlay" ) self.dungeon_sprite = pyglet.sprite.Sprite( dungeon_texture, x=0, y=0, batch=self.window.batches["dungeon"] ) self.dungeon_overlay_sprite = pyglet.sprite.Sprite( dungeon_overlay_texture, x=0, y=0, batch=self.window.batches["dungeon_overlay"] ) logger.info("Done.") start = self.window.grid_to_window(*self.dungeon.startroom.center) # self.tiles = tiles.TiledRenderer(self.window, level) self.spawn_player(start) # Add a static square for every dungeon wall for w in self.dungeon.walls: body = pymunk.Body() body.position = w.center box_points = [(-16, -16), (-16, 16), (16, 16), (16, -16)] shape = pymunk.Poly(body, box_points, (0, 0)) shape.group = 1 self.space.add(shape) w.body = body for c in self.dungeon.collidable: body = pymunk.Body() body.position = c.center box_points = [(-16, -16), (-16, 16), (16, 16), (16, -16)] shape = pymunk.Poly(body, box_points, (0, 0)) shape.group = 1 self.space.add(shape) c.body = body # self.space.add_collision_handler(1, 1, post_solve=smack) self.space.damping = 0.001 itemlist = items.L1_Sword(), items.L1_Armor(), items.L1_Ring() for i in itemlist: self.player.equip_item(i) self.player.update_stats() self.player.restore_stats() logger.info("Spawning enemies...") self.enemies = [] for r in self.dungeon.enemy_rooms: for spawn in r.spawn_locations: x, y = self.window.grid_to_window(*spawn) self.add_enemy(x, y) i = 0 for e in self.enemies: e.modifiers["str"] += i e.update_stats() e.reset() i += 3 logger.info("Done.") if self.window.ui: self.window.ui.add_stats( self.player, 0, self.window.height, 120, 240 ) logger.info("Game successfully loaded.")
def new_game(self, load=False): super().__init__() self.start_systems() # self.components = {} self.window.offset_x, self.window.offset_y = 640, 360 # Create batches and load textures logger.info("Loading textures...") start = time.clock() self.batches = OrderedDict() self.load_textures() end = time.clock() logger.info("Done, {:.3f}s.".format(end - start)) # Setup dungeon configuration logger.info("Building dungeon...") start = time.clock() dungeon_cfg = load_cfg("Dungeon2") self.dungeon = DungeonGenerator( logger, dungeon_cfg ) self.game_size = ( dungeon_cfg["dungeon_size"][0] * 32, dungeon_cfg["dungeon_size"][1] * 32 ) if load: self.dungeon.load("saved.json") else: self.dungeon.generate() end = time.clock() logger.info("Done, {:.3f}s.".format(end - start)) if not load: self.dungeon.save("saved.json") logger.info("Generating dungeon graphics...") start = time.clock() if load: pass else: img_grid = self.dungeon.get_tilemap() grid_to_image( img_grid, "dungeon", self.game_size ) dungeon_texture = self.load_single_texture( "dungeon" ) dungeon_overlay_texture = self.load_single_texture( "dungeon_overlay" ) self.bg = BG(self, dungeon_texture) self.fg = FG(self, dungeon_overlay_texture) self.bg.batch = Batch("dungeon") self.bg.batch.group = 0 self.bg.position.set(0, 0) self.fg.batch = Batch("dungeon") self.fg.batch.group = 1 self.fg.position.set(0, 0) end = time.clock() logger.info("Done, {:.3f}s.".format(end - start)) # Make physical space for physics engine logger.info("Setup physics space...") start = time.clock() self.phys_space = pymunk.Space() self.phys_space.damping = 0.001 end = time.clock() logger.info("Done, {:.3f}s.".format(end - start)) # Add entities to the world logger.info("Spawning enemies...") start = time.clock() self.enemies = [] for r in self.dungeon.enemy_rooms: for spawn in r.spawn_locations: x, y = spawn[0] * 32, spawn[1] * 32 e = Enemy(self) e.position.set(x, y) self.enemies.append(e) end = time.clock() logger.info("Done, {:.3f}s.".format(end - start)) logger.info("Generating wall rectangles...") start = time.clock() wall_rects = self.dungeon.wall_rects self.walls = [] for w in wall_rects: p1, p2 = w x = (p1[0] * 32) y = (p1[1] * 32) w = p2[0] * 32 - p1[0] * 32 + 32 h = p2[1] * 32 - p1[1] * 32 + 32 # print(p1, p2, x, y, w, h) wa = Wall(self) wa.physbody = PhysBody(shape="square", width=w, height=h) wa.position.set(x, y) self.walls.append(wa) end = time.clock() logger.info("Done, {:.3f}s.".format(end - start)) logger.info("Placing collidable items...") # self.collidable = [] # for c in self.dungeon.collidable: # print(c.p1) # co = Wall(self) # co.physbody = PhysBody(shape="square", width=32, height=32) # co.position.set(*c.p1) # self.collidable.append(co) logger.info("Spawning player...") self.spawn_player() # self.e = Enemy(self) # self.e.position.set(self.p.position.x + 32, self.p.position.y) # self.e.followtarget.who = self.p # self.e.lightsource = LightSource() self.viewlines = []