Skip to content

Commit 75700e9

Browse files
committed
feat: inidcateur on fire
1 parent 01c4ae4 commit 75700e9

File tree

10 files changed

+51
-2
lines changed

10 files changed

+51
-2
lines changed

assets/sprites/electric/1.png

376 Bytes
Loading

assets/sprites/electric/2.png

526 Bytes
Loading

assets/sprites/electric/3.png

528 Bytes
Loading

assets/sprites/electric/4.png

468 Bytes
Loading

assets/sprites/electric/5.png

522 Bytes
Loading

assets/sprites/electric/6.png

556 Bytes
Loading

assets/sprites/electric/7.png

562 Bytes
Loading

assets/sprites/electric/8.png

380 Bytes
Loading

game/components/player.py

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,15 @@ def __init__(self, game: "Game", name: str) -> None:
5959
self.sprites = self._load_all_sprites()
6060
self.current_sprite_index = 0.0
6161
self.image = self.sprites[self.direction][0]
62+
self.effect_sprites = self._load_effect_sprites()
63+
self.current_effect_index = 0.0
6264
self.rect = self.image.get_rect(topleft=self.position)
65+
self.collide_rect = pygame.Rect(
66+
self.position.x + 5,
67+
self.position.y + 5,
68+
self.image.get_width() - 10,
69+
self.image.get_height() - 10,
70+
)
6371

6472
self.damage_image = pygame.transform.scale(
6573
pygame.image.load("assets/images/damaged.png"),
@@ -69,6 +77,26 @@ def __init__(self, game: "Game", name: str) -> None:
6977
),
7078
).convert_alpha()
7179

80+
def _load_effect_sprites(self) -> Dict[str, List[pygame.Surface]]:
81+
"""
82+
Charge toutes les animations d'effets spéciaux
83+
84+
:return: Un dictionnaire de listes de surfaces pygame
85+
:rtype: Dict[str, List[pygame.Surface]]
86+
"""
87+
return {
88+
"electric": [
89+
pygame.transform.scale(
90+
pygame.image.load(f"assets/sprites/electric/{i}.png"),
91+
(
92+
self.game.settings.TILE_SIZE * 2,
93+
self.game.settings.TILE_SIZE * 2,
94+
),
95+
).convert_alpha()
96+
for i in range(1, 9)
97+
]
98+
}
99+
72100
def _load_all_sprites(self) -> Dict[Direction, List[pygame.Surface]]:
73101
"""
74102
Charge toutes les animations de sprites pour chaque direction
@@ -183,6 +211,10 @@ def move(self) -> None:
183211

184212
self._update_animation()
185213
self.rect.topleft = self.position
214+
self.collide_rect.topleft = (
215+
self.position.x + 5,
216+
self.position.y + 5,
217+
)
186218

187219
def damage(self, amount: int) -> None:
188220
"""
@@ -259,6 +291,21 @@ def draw(self, screen: pygame.Surface) -> None:
259291
:param screen: La surface de l'écran
260292
:type screen: pygame.Surface
261293
"""
294+
if self.onFire:
295+
# Affichage un effet d'incendie sur le joueur
296+
screen.blit(
297+
self.effect_sprites["electric"][
298+
int(self.current_effect_index)
299+
],
300+
(
301+
self.position.x - self.game.settings.TILE_SIZE // 2,
302+
self.position.y - self.game.settings.TILE_SIZE,
303+
),
304+
)
305+
self.current_effect_index = (
306+
self.current_effect_index + 0.2
307+
) % len(self.effect_sprites["electric"])
308+
262309
screen.blit(self.image, self.position)
263310

264311
def isAttacked(self) -> None:
@@ -268,7 +315,7 @@ def isAttacked(self) -> None:
268315
if not self.onFire and time() - self.beginInvincible >= 1:
269316
self.isInvincible = False
270317
for enemy in self.game.enemy_spawner.enemies_list:
271-
if self.rect.colliderect(enemy):
318+
if self.collide_rect.colliderect(enemy):
272319
self.damage(enemy.damage)
273320
scream = random.choice(self.screams)
274321
scream.set_volume(0.5)
@@ -292,7 +339,8 @@ def draw_damage(self, screen: pygame.Surface) -> None:
292339
def on_fire(self):
293340
if self.onFire:
294341
for enemy in self.game.enemy_spawner.enemies_list:
295-
if self.rect.colliderect(enemy):
342+
if self.collide_rect.colliderect(enemy):
296343
enemy.kill()
344+
self.game.enemy_spawner.enemies_list.remove(enemy)
297345

298346
self.game.stats.update("kills", 1)

game/enemies/enemy.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,5 @@ def update(self):
108108

109109
# Vérifie si l'ennemi est hors de l'écran
110110
if not self.game.screen.get_rect().colliderect(self.rect):
111+
self.game.enemy_spawner.enemies_list.remove(self)
111112
self.kill()

0 commit comments

Comments
 (0)