Implementation de la base de l'engine #3
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue