Ajout d'un cooldown sur les dégâts

This commit is contained in:
Yannis 2023-12-26 16:28:09 +01:00
parent ec2375354f
commit 86c611d813
4 changed files with 39 additions and 6 deletions

View file

@ -45,6 +45,8 @@ class Engine:
player.link_animation("player_none")
player.collision_rect = [-7, -7, 7, 7]
player.set_default_life(10)
self.camera.follow_entity(player)
def loop(self):

View file

@ -11,6 +11,10 @@ class Entity:
self.life_points = -1
self.max_life_points = -1
# Cooldown entre deux points de dégât
self.damage_cooldown = 0
self.default_damage_cooldown = 0.5
self.collision_rect = [0, 0, 0, 0] # x1, y1, x2, y2
# Time utilisé pour les IA
@ -29,13 +33,20 @@ class Entity:
"""Met à jour l'entité."""
self.time += delta
# Diminue la valeur du cooldown de dégât
self.damage_cooldown -= delta
if self.damage_cooldown < 0:
self.damage_cooldown = 0
def take_damages(self, damages: int):
"""Inflige {damages} dégâts à l'entité."""
# Si life_points est égal à -1, l'entité est immortelle
if self.life_points != -1:
if self.life_points != -1 and self.damage_cooldown == 0:
# On inflige les dégâts
self.life_points -= damages
# Remet le cooldown au maximum
self.damage_cooldown = self.default_damage_cooldown
# Si la vie passe en négatif, on la remet à 0
if self.life_points < 0:
self.life_points = 0

View file

@ -35,3 +35,6 @@ class EventHandler:
self.engine.camera.target_zoom *= 1.01
if K_c in self.key_pressed:
self.engine.camera.target_zoom *= 0.99
if K_l in self.key_pressed:
player.take_damages(1)

View file

@ -89,12 +89,29 @@ class Renderer:
life_bar_width = 50
life_bar_height = 8
life_bar_y_offset = 5
life_bar_border = 2
draw.rect(gui_surface, (255, 0, 0),
((entity.x - self.engine.camera.x + x_middle_offset) * self.engine.camera.zoom - life_bar_width / 2,
(entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2) *
self.engine.camera.zoom - life_bar_height - life_bar_y_offset,
life_bar_width, life_bar_height))
life_bar_value = entity.life_points / entity.max_life_points
cooldown_value = entity.damage_cooldown / entity.default_damage_cooldown
# On calcule où placer la barre de vei sur la surface des GUI
life_bar_dest = ((entity.x - self.engine.camera.x + x_middle_offset) * self.engine.camera.zoom -
life_bar_width / 2,
(entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2) *
self.engine.camera.zoom - life_bar_height - life_bar_y_offset)
# Contour de la barre de vie
draw.rect(gui_surface, (20, 0, 0), (life_bar_dest[0] - life_bar_border,
life_bar_dest[1] - life_bar_border,
life_bar_width + life_bar_border * 2,
life_bar_height + life_bar_border * 2))
# Barre de vie
draw.rect(gui_surface, (255-255*life_bar_value, 255*life_bar_value, 0),
life_bar_dest + (life_bar_width * life_bar_value, life_bar_height))
draw.rect(gui_surface, (200, 200, 200),
life_bar_dest + (life_bar_width * life_bar_value * cooldown_value, life_bar_height))
if self.engine.DEBUG_MODE:
top_let_corner_x = entity.x - self.engine.camera.x + x_middle_offset