Пример #1
0
    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")
Пример #2
0
    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)