@@ -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 )
0 commit comments