def on_end_turn(self, data): # reset the action count self.actions = 1 # clear the target component, if necessary if self.target is not None: self.target.remove_component("TargetComponent") self.target = None # check for killed npcs for npc in entity_system.find("NpcComponent"): if npc.get("UnitComponent", "cur_hp") > 0: continue inject_user_event("npc_killed", npc=npc) entity_system.remove(npc) # recharge any npc hitpoints for npc in entity_system.find("NpcComponent"): npc.get_component("UnitComponent").do_hp_recharge() # send an event on player death player = entity_system.find_one("PlayerComponent") if player.get("UnitComponent", "cur_hp") < 0: inject_user_event("player_killed") # recharge the player's heath player = entity_system.find_one("PlayerComponent") player.get_component("UnitComponent").do_hp_recharge() # refill the player's hand player.get("UnitComponent", "deck").fill_hand() inject_user_event("map_changed")
def on_map_changed(self, data): self.image.fill(MapSprite.BLACK) # move the camera to the player player = entity_system.find_one("PlayerComponent") pos = player.get("RenderComponent", "pos") fov_radius = player.get("UnitComponent", "fov_radius") # move the camera to follow the player self.camera.move((pos[0] + 5, pos[1])) # render the tiles rect = self.camera.rect tiles = self.map.get_area(rect.left, rect.top, rect.width, rect.height).filter("seen", True) tiles_fov = self.map.get_fov_tiles(pos, fov_radius) for tile in tiles: visible = tile in tiles_fov self._render_tile(self.image, tile, visible) # render the npcs npcs = entity_system.find("NpcComponent") for npc in npcs: tile = self.map.get(npc.get("RenderComponent", "pos")) if tile in tiles_fov: self._render_unit(self.image, npc) # render player self._render_unit(self.image, player)