From 00e72f4367d1da31d80cfbf1804f3fe18c5ce6ab Mon Sep 17 00:00:00 2001 From: Yannis300307 Date: Fri, 5 Jan 2024 17:00:30 +0100 Subject: [PATCH] Ajout d'une zone d'execution d'events --- src/engine/engine.py | 3 +++ src/engine/event_sheduler.py | 21 +++++++++++++++++++-- src/main.py | 4 +++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/engine/engine.py b/src/engine/engine.py index 2d1dc8d..ddea6c6 100644 --- a/src/engine/engine.py +++ b/src/engine/engine.py @@ -2,6 +2,7 @@ from src.engine.boss_fight_manager import BossFightManager from src.engine.camera import Camera from src.engine.entity_manager import EntityManager from src.engine.event_handler import EventHandler +from src.engine.event_sheduler import EventSheduler from src.engine.map_manager import MapManager from src.engine.renderer import Renderer from src.engine.enums import GameState @@ -31,6 +32,7 @@ class Engine: self.camera = Camera() self.entity_manager = EntityManager(self.map_manager) self.boss_fight_manager = BossFightManager(self) + self.event_sheduler = EventSheduler(self) def loop(self): """Fonction à lancer au début du programme et qui va lancer les updates dans une boucle. @@ -47,6 +49,7 @@ class Engine: self.entity_manager.update(0.016666666) self.renderer.update(0.016666666) self.event_handler.update() + self.event_sheduler.update() def stop(self): """Arrête le programme.""" diff --git a/src/engine/event_sheduler.py b/src/engine/event_sheduler.py index c72456a..1056eb3 100644 --- a/src/engine/event_sheduler.py +++ b/src/engine/event_sheduler.py @@ -1,14 +1,31 @@ from types import FunctionType +import src.engine.engine + class EventSheduler: """Gère le lancement d'évenements avec des conditions.""" - def __init__(self): + def __init__(self, engine: 'src.engine.engine.Engine'): self.area_callbacks = [] + self.engine = engine def register_area(self, area_rect: tuple[int, int, int, int], callback: FunctionType | classmethod | staticmethod): self.area_callbacks.append((area_rect, callback)) + @staticmethod + def get_collisions_with_entity(rect: tuple[int, int, int, int], entity: 'Entity'): + """Retourne True si l'entité donnée touche le rectange donné.""" + return (rect[0] <= entity.x+entity.collision_rect[2] and + rect[0] + rect[2] >= entity.x+entity.collision_rect[0] and + rect[1] + rect[3] >= entity.y+entity.collision_rect[1] and + rect[1] <= entity.y+entity.collision_rect[3]) + def update(self): for area in self.area_callbacks: - area_rect = area[0] \ No newline at end of file + area_rect = area[0] + + if self.get_collisions_with_entity(area_rect, self.engine.entity_manager.get_by_name("player")): + print("oui") + + else: + print("non") diff --git a/src/main.py b/src/main.py index 5287bd9..cacd8eb 100644 --- a/src/main.py +++ b/src/main.py @@ -17,10 +17,12 @@ class Game(Engine): self.load_boss_fight_assets() self.spawn_mobs() - self.DEBUG_MODE = False + self.DEBUG_MODE = True self.game_state = GameState.NORMAL + self.event_sheduler.register_area((0, 20, 20, 20), None) + def create_player_entity(self): """Crée une entité joueur.""" anim = Anim(0.5)