dialogs_event_sheduler #21

Merged
yannis merged 23 commits from dialogs_event_sheduler into main 2024-01-06 18:55:17 +00:00
3 changed files with 25 additions and 3 deletions
Showing only changes of commit 00e72f4367 - Show all commits

View file

@ -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."""

View file

@ -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]
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")

View file

@ -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)