class Projectiles:
    def __init__(self, game):
        self.projectiles = []
        self.game = game
        self.map = game.map

    def add(self, projectile):
        self.projectiles.append(projectile)

    def update(self):
        result = set()
        for projectile in self.projectiles:
            cp1, cp2 = projectile.get_check_points()

            for enemy in self.game.enemies:
                r = enemy.get_rect()
                if r.collidepoint(cp1) or r.collidepoint(cp2):
                    #Check if projectile collides enemy
                    self.game.enemies.remove(enemy)
                    self.remove(projectile)
                    self.game.score += 1
                    break
            
            pr = self.game.player.get_rect()
            if pr.collidepoint(cp1) or pr.collidepoint(cp2):
                self.game.settings.running = False

            if self.map != None:
                block1 = self.map.find_block_on_coords(cp1[0], cp1[1])
                block2 = self.map.find_block_on_coords(cp2[0], cp2[1])

                if block1.projectile_passable and block2.projectile_passable:
                    projectile.update()
                else:
                    try:
                        index = self.projectiles.index(projectile)
                        del self.projectiles[index]
                        del projectile
                    except:
                        pass
        
        return result
    
    def change_coords_by_delta(self, dx=None, dy=None):
        for projectile in self.projectiles:
            projectile.change_coords_by_delta(dx, dy)
    
    def remove(self, projectile):
        self.projectiles.pop(self.projectiles.index(projectile))