51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
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))
|
|
|