Browse Source

Ajout de lock players dans game scene, et ajout du reset de l'animation qui avait une varible qui faisait rien

Cloud37 6 months ago
parent
commit
9c7e6f7009
4 changed files with 31 additions and 10 deletions
  1. BIN
      saves/save.data
  2. 11 7
      src/engine/game/game_scene.py
  3. 7 1
      src/engine/scene/scene_manager.py
  4. 13 2
      src/engine/utils/animations.py

BIN
saves/save.data


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

@@ -30,6 +30,7 @@ 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):
@@ -83,6 +84,7 @@ class GameScene(Scene):
         # vars
         self._last_door_pos = playerpos
         self.new_map_set = False
+        self.lock_players = False
 
         #self.teleport_out("hub", "player_spawn_coords")
 
@@ -96,15 +98,17 @@ class GameScene(Scene):
         debug.add(self.map_manager._loading_maps)
         debug.add(self.map_manager._maps)
         debug.add(self.map_manager.current_map)
+        for player in self.players:
+            if not self.lock_players:  
+                player.update(dt, self.map_manager)
+            else:
+                player.reset_physics()
 
-        for player in self.players:  
-            player.update(dt, self.map_manager)
 
         object_manager = self.map_manager.get_current_objects_manager()
-        object_manager.update(dt, 
-                              players=self.players
-                              )
-    
+        if not self.lock_players:
+            object_manager.update(dt, players=self.players)
+        
         # déplacement de la caméra
         self.camera_view.move(dt, self.players, teleport=False)
 
@@ -116,7 +120,7 @@ class GameScene(Scene):
                                      controller_manager = controller_manager,
                                      players = self.players,
                                      tp_out_command = self.teleport_out)
-
+        
         for player in self.players:
             player.event_handler(event, controller_manager)
 

+ 7 - 1
src/engine/scene/scene_manager.py

@@ -46,6 +46,7 @@ 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):
         """
@@ -125,12 +126,17 @@ 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
         
         if time_now - self.start_transition_in <= 1050:
             self.draw_transition(time_now, self.start_transition_in)
+
         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
             
         if time_now - self.start_transition_out <= 1000:
             self.draw_transition(time_now, self.start_transition_out, reverse=True)
@@ -187,7 +193,7 @@ class SceneManager():
 
             if self.is_loading and not self.is_transitioning_in:
                 self.draw_loading_screen()
-            elif not self.is_transitioning_in :
+            else:
                 self.scene.update(dt)
 
             # draw debug

+ 13 - 2
src/engine/utils/animations.py

@@ -50,7 +50,6 @@ class Animation:
         return sprites
     
 
-
 class PlayerAnimation(Animation):
     def __init__(self, path: str, player: Player) -> None:
         Animation.__init__(self, path)
@@ -170,7 +169,19 @@ class PlayerAnimation(Animation):
                 sprite = self.sprites.seat[1].get_image(factor)
             else:
                 sprite = self.sprites.seat[2].get_image(factor)
-        
+
+        # à affiner mais semble fonctionnel
+        if self.reset_run_animation:
+            if self.x_velocity < 0:
+                sprite = pygame.transform.flip(self.sprites.idle[1].get_image(factor), True, False)
+            else:
+                sprite = self.sprites.idle[1].get_image(factor)
+            self.last_idle = pygame.time.get_ticks()
+            self.reset_seat = False
+            self.player.swing = False
+            self.reset_run_animation = False
+
+        #gravité
         if self.player.gravity_orientation == Gravity.DOWN:
             return sprite
         if self.player.gravity_orientation == Gravity.LEFT: