Browse Source

Player lock et Unlock event
(scene transition minor bug 1st transition after launching game scene not working properly)

Cloud37 6 months ago
parent
commit
94b95ea592

+ 7 - 2
src/engine/game/game_scene.py

@@ -8,7 +8,7 @@ from engine.utils.settings import dev_settings, debug_settings
 from engine.game.map.map_manager import MapManager, NEW_MAP_SET
 from engine.game.camera.camera_view import CameraView
 from engine.scene.scene import Scene
-from engine.scene.scene_event import SCENE_TRANSITION_IN, SCENE_TRANSITION_OUT
+from engine.scene.scene_event import LOCK_PLAYERS, SCENE_TRANSITION_IN, SCENE_TRANSITION_OUT, UNLOCK_PLAYERS
 
 from engine.game.menu.ingame_menu import IngameMenu
 
@@ -30,7 +30,6 @@ class GameScene(Scene):
     def __init__(self, scene_manager) -> None:
         super().__init__()
         self.scene_manager = scene_manager
-        self.lock_players = False
         
     @Scene.load_decorator
     def load(self, controller_manager, new_game: bool):
@@ -98,6 +97,7 @@ class GameScene(Scene):
         debug.add(self.map_manager._loading_maps)
         debug.add(self.map_manager._maps)
         debug.add(self.map_manager.current_map)
+        debug.add(self.lock_players)
         for player in self.players:
             if not self.lock_players:  
                 player.update(dt, self.map_manager)
@@ -133,6 +133,11 @@ class GameScene(Scene):
         elif event.type == GAME_SAVE_AND_QUIT:
             self.save()
             pygame.event.post(pygame.event.Event(SCENE_QUIT))
+
+        elif event.type == LOCK_PLAYERS:
+            self.lock_players = True
+        elif event.type == UNLOCK_PLAYERS:
+            self.lock_players = False
             
     @Scene.map_set_decorator
     def handle_map_set(self):

+ 10 - 0
src/engine/scene/scene_event.py

@@ -50,6 +50,16 @@ SCENE_WINDOW_RATIO_CHANGE = pygame.event.custom_type()
 This event must be triggered whenever the ratio of the screen must change. Must have the ratio as value.
 """
 
+LOCK_PLAYERS = pygame.event.custom_type()
+"""
+This event must be triggered when we to lock players in place
+"""
+
+UNLOCK_PLAYERS = pygame.event.custom_type()
+"""
+This event must be triggered when we to unlock players in place
+"""
+
 def scene_error_wrapper(callback, *args, **kwargs):
     try:
         callback(*args, **kwargs)

+ 2 - 5
src/engine/scene/scene_manager.py

@@ -46,7 +46,6 @@ class SceneManager():
         #self.scene = GameScene()
         self.scene = TitlescreenScene()
         self.scene.load(self.controller_manager)
-        self.scene.lock_players = None # initialisation
 
     def event_handler(self, event):
         """
@@ -126,8 +125,7 @@ class SceneManager():
         if self.need_transition_in :
             self.start_transition_in = time_now
             self.need_transition_in = False
-            if self.scene.lock_players != None:
-                self.scene.lock_players = True
+            pygame.event.post(pygame.event.Event(LOCK_PLAYERS))
         
         if time_now - self.start_transition_in <= 1050:
             self.draw_transition(time_now, self.start_transition_in)
@@ -135,8 +133,7 @@ class SceneManager():
         elif self.need_transition_out:
             self.start_transition_out = time_now
             self.need_transition_out = False
-            if self.scene.lock_players != None:
-                self.scene.lock_players = False
+            pygame.event.post(pygame.event.Event(UNLOCK_PLAYERS))
             
         if time_now - self.start_transition_out <= 1000:
             self.draw_transition(time_now, self.start_transition_out, reverse=True)