Ajout de particules
This commit is contained in:
parent
ced0f8b65b
commit
469e1e4c8a
|
@ -31,8 +31,14 @@ class EventHandler:
|
||||||
self.engine.entity_manager.move_player_controls(0, -1)
|
self.engine.entity_manager.move_player_controls(0, -1)
|
||||||
if K_DOWN in self.key_pressed:
|
if K_DOWN in self.key_pressed:
|
||||||
self.engine.entity_manager.move_player_controls(0, 1)
|
self.engine.entity_manager.move_player_controls(0, 1)
|
||||||
|
|
||||||
|
# Only for tests ! Remove on release !!!!!
|
||||||
if K_l in self.key_pressed:
|
if K_l in self.key_pressed:
|
||||||
self.engine.entity_manager.get_by_name("player").take_damages(1)
|
self.engine.entity_manager.get_by_name("player").take_damages(1)
|
||||||
|
if K_p in self.key_pressed:
|
||||||
|
self.engine.renderer.emit_particles(self.engine.entity_manager.get_by_name("player").x,
|
||||||
|
self.engine.entity_manager.get_by_name("player").y,
|
||||||
|
16, 16, 16, 1, 8, 0, 1, 0.2, 1., (0, 200, 200))
|
||||||
|
|
||||||
if K_x in self.key_pressed:
|
if K_x in self.key_pressed:
|
||||||
self.engine.camera.target_zoom *= 1.01
|
self.engine.camera.target_zoom *= 1.01
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import math
|
import math
|
||||||
|
import random
|
||||||
|
|
||||||
from pygame import display, image, surface, transform, draw
|
from pygame import display, image, surface, transform, draw
|
||||||
from pygame.locals import RESIZABLE, SRCALPHA, FULLSCREEN
|
from pygame.locals import RESIZABLE, SRCALPHA, FULLSCREEN
|
||||||
|
@ -13,7 +14,7 @@ class Renderer:
|
||||||
|
|
||||||
def __init__(self, core: 'engine.Engine'):
|
def __init__(self, core: 'engine.Engine'):
|
||||||
self.engine = core
|
self.engine = core
|
||||||
self.window_type = FULLSCREEN
|
self.window_type = RESIZABLE
|
||||||
self.window_size = (display.Info().current_w, display.Info().current_h) if self.window_type == FULLSCREEN else (600, 600)
|
self.window_size = (display.Info().current_w, display.Info().current_h) if self.window_type == FULLSCREEN else (600, 600)
|
||||||
self.window = display.set_mode(self.window_size, self.window_type)
|
self.window = display.set_mode(self.window_size, self.window_type)
|
||||||
self.tiles = []
|
self.tiles = []
|
||||||
|
@ -31,6 +32,38 @@ class Renderer:
|
||||||
# Ombres d'entités
|
# Ombres d'entités
|
||||||
self.shadows = {}
|
self.shadows = {}
|
||||||
|
|
||||||
|
# Particules affichées
|
||||||
|
self.particles = []
|
||||||
|
|
||||||
|
def emit_particles(self, x: int, y: int, w: int, h: int, count: int, min_size: int, max_size: int,
|
||||||
|
min_speed: float, max_speed: float, min_life_time: float, max_life_time: float,
|
||||||
|
color: tuple[int, int, int]):
|
||||||
|
"""Emmet des particules aux coordonnées données dans un rectangle de demi-largeur {w} et de demi-hauteur {h}."""
|
||||||
|
for _ in range(count):
|
||||||
|
# On choisit la taille de la particule
|
||||||
|
part_size = random.randint(min_size, max_size)
|
||||||
|
|
||||||
|
# On choisit sa vitesse en x et en y
|
||||||
|
part_speed_x = random.uniform(min_speed, max_speed)
|
||||||
|
|
||||||
|
# On inverse la vitesse de manière aléatoire
|
||||||
|
if random.randint(0, 1) == 1:
|
||||||
|
part_speed_x = - part_speed_x
|
||||||
|
part_speed_y = random.uniform(min_speed, max_speed)
|
||||||
|
if random.randint(0, 1) == 1:
|
||||||
|
part_speed_y = - part_speed_y
|
||||||
|
|
||||||
|
# On choisit sa position dans le rectangle
|
||||||
|
part_x = random.randint(x-w, x+w-part_size)
|
||||||
|
part_y = random.randint(y-h, y+h-part_size)
|
||||||
|
|
||||||
|
# On choisit la durée de vie
|
||||||
|
part_life_time = random.uniform(min_life_time, max_life_time)
|
||||||
|
|
||||||
|
# On ajoute la particule dans la liste des particules
|
||||||
|
# Le 0 correspond au temps de vie depuis la création de la particule
|
||||||
|
self.particles.append([part_x, part_y, part_size, part_speed_x, part_speed_y, 0., part_life_time, color])
|
||||||
|
|
||||||
def load_main_menu_assets(self, path: str):
|
def load_main_menu_assets(self, path: str):
|
||||||
"""Charge les assets du menu principal depuis le dossier donné."""
|
"""Charge les assets du menu principal depuis le dossier donné."""
|
||||||
|
|
||||||
|
@ -63,6 +96,7 @@ class Renderer:
|
||||||
self.render_layer(0, rendered_surface)
|
self.render_layer(0, rendered_surface)
|
||||||
self.render_layer(1, rendered_surface)
|
self.render_layer(1, rendered_surface)
|
||||||
self.render_entities(rendered_surface, gui_surface, delta)
|
self.render_entities(rendered_surface, gui_surface, delta)
|
||||||
|
self.render_particles(rendered_surface, delta)
|
||||||
self.render_layer(2, rendered_surface)
|
self.render_layer(2, rendered_surface)
|
||||||
|
|
||||||
# Enfin, on redimensionne notre surface et on la colle sur la fenêtre principale
|
# Enfin, on redimensionne notre surface et on la colle sur la fenêtre principale
|
||||||
|
@ -98,6 +132,22 @@ class Renderer:
|
||||||
"""Ajoute une animation pour le joueur lors d'un combat de boss."""
|
"""Ajoute une animation pour le joueur lors d'un combat de boss."""
|
||||||
self.boss_fight_player_animations[name] = animation
|
self.boss_fight_player_animations[name] = animation
|
||||||
|
|
||||||
|
def render_particles(self, rendered_surface: surface.Surface, delta: float):
|
||||||
|
"""Update et rend les particules."""
|
||||||
|
x_middle_offset = display.get_window_size()[0] / 2 / self.engine.camera.zoom
|
||||||
|
y_middle_offset = display.get_window_size()[1] / 2 / self.engine.camera.zoom
|
||||||
|
|
||||||
|
for part in self.particles.copy():
|
||||||
|
part_dest = (math.floor(part[0] - self.engine.camera.x + x_middle_offset),
|
||||||
|
math.floor(part[1] - self.engine.camera.y + y_middle_offset))
|
||||||
|
|
||||||
|
draw.rect(rendered_surface, part[7], part_dest + (part[2], part[2]))
|
||||||
|
part[5] += delta
|
||||||
|
part[0] += part[3]
|
||||||
|
part[1] += part[4]
|
||||||
|
if part[5] > part[6]:
|
||||||
|
self.particles.remove(part)
|
||||||
|
|
||||||
def render_boss_fight_scene(self, delta: float):
|
def render_boss_fight_scene(self, delta: float):
|
||||||
"""Rend les sprites du joueur et du boss lors d'un combat de boss."""
|
"""Rend les sprites du joueur et du boss lors d'un combat de boss."""
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue