@@ -44,13 +44,22 @@ def __init__(self, game: "Game", name: str) -> None:
4444 self .time_to_heal = 0
4545 self .onFire = False
4646 self .beginInvincible = 0
47+ self .isInvincible = False
4748
4849 # Charge et cache toutes les animations de sprites
4950 self .sprites = self ._load_all_sprites ()
5051 self .current_sprite_index = 0.0
5152 self .image = self .sprites [self .direction ][0 ]
5253 self .rect = self .image .get_rect (topleft = self .position )
5354
55+ self .damage_image = pygame .transform .scale (
56+ pygame .image .load ("assets/images/damaged.png" ),
57+ (
58+ self .game .settings .WINDOW_WIDTH ,
59+ self .game .settings .WINDOW_HEIGHT ,
60+ ),
61+ ).convert_alpha ()
62+
5463 def _load_all_sprites (self ) -> Dict [Direction , List [pygame .Surface ]]:
5564 """
5665 Charge toutes les animations de sprites pour chaque direction
@@ -243,12 +252,30 @@ def draw(self, screen: pygame.Surface) -> None:
243252 """
244253 screen .blit (self .image , self .position )
245254
246- def isAttacked (self ):
255+ def isAttacked (self ) -> None :
256+ """
257+ Vérifie si le joueur est attaqué par un ennemi
258+ """
247259 if not self .onFire and time () - self .beginInvincible >= 1 :
260+ self .isInvincible = False
248261 for enemy in self .game .enemy_spawner .enemies_list :
249262 if self .rect .colliderect (enemy ):
250263 self .damage (enemy .damage )
251264 self .beginInvincible = time ()
265+ self .isInvincible = True
266+
267+ def draw_damage (self , screen : pygame .Surface ) -> None :
268+ """
269+ Dessine l'effet de dégâts sur l'écran
270+
271+ :param screen: La surface de l'écran
272+ :type screen: pygame.Surface
273+ """
274+ if self .isInvincible :
275+ # Alpha depends on health
276+ alpha = 255 - (255 * self .health / self .MAX_HEALTH )
277+ self .damage_image .set_alpha (alpha )
278+ screen .blit (self .damage_image , (0 , 0 ))
252279
253280 def on_fire (self ):
254281 if self .onFire :
0 commit comments