1 """ Scene utilities. """
7 """ Decorator that applies events to an engine. """
9 def wrap(self, *args, **kw):
10 events = f(self, *args, **kw)
11 self._apply_events(events)
16 """ A holder for game state. """
18 def __init__(self, app, scene):
21 self._viewport = (0, 0)
23 def _apply_events(self, events):
29 def change_scene(self, scene):
35 from pgzero.game import exit
38 def move_screen(self, offset):
39 self._viewport = (self._viewport[0] + offset[0],
40 self._viewport[1] + offset[1])
44 return self._scene.update(dt)
47 self._scene.draw(self._app.screen, self._viewport)
50 def on_mouse_down(self, pos, button):
51 return self._scene.on_mouse_down(pos, button)
54 def on_mouse_up(self, pos, button):
55 return self._scene.on_mouse_up(pos, button)
58 def on_key_down(self, key, mod, unicode):
59 return self._scene.on_key_down(key, mod, unicode)
62 def on_key_up(self, key, mod):
63 return self._scene.on_key_up(key, mod)
66 def on_music_end(self):
67 return self._scene.on_music_end()
71 """ Base class for events. """
73 ENGINE_METHOD = "unknown_event"
75 def __init__(self, *args, **kw):
79 def apply(self, engine):
80 getattr(engine, self.ENGINE_METHOD)(*self._args, **self._kw)
83 class ChangeSceneEvent(Event):
84 """ Change to a new scene. """
86 ENGINE_METHOD = "change_scene"
89 class QuitEvent(Event):
90 """ Quit the game. """
92 ENGINE_METHOD = "quit_game"
95 class MoveViewportEvent(Event):
96 """ Change to a new scene. """
98 ENGINE_METHOD = "move_screen"
102 """ A list of actors. """
107 def add(self, actor):
108 self._actors.append(actor)
111 def remove(self, actor):
112 self._actors.remove(actor)
115 def draw(self, screen):
116 for actor in self._actors:
117 actor.draw() # TODO: allow an option screen to be passed in
121 """ Base class for scenes. """
124 self.actors = Actors()
132 def update(self, dt):
135 def draw(self, screen, viewport):
137 self.actors.draw(screen)
139 def on_mouse_down(self, pos, button):
142 def on_mouse_up(self, pos, button):
145 def on_key_down(self, key, mod, unicode):
148 def on_key_up(self, key, mod):
151 def on_music_end(self):