projects
/
koperkapel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pass read-only world proxy to scene functions. Changes ideally made only through...
[koperkapel.git]
/
koperkapel
/
scenes
/
base.py
diff --git
a/koperkapel/scenes/base.py
b/koperkapel/scenes/base.py
index 58f3874f204b87a874751d593f4360a785791a70..19ba212fce407eb91047652b5a114ceed719284c 100644
(file)
--- a/
koperkapel/scenes/base.py
+++ b/
koperkapel/scenes/base.py
@@
-13,11
+13,14
@@
def apply_events(f):
class Engine:
class Engine:
- """ A holder for game state. """
+ """ A holder for game state & scene management.
+ """
- def __init__(self, app, scene):
+ def __init__(self, app, scene
, world
):
self._app = app
self._scene = scene
self._app = app
self._scene = scene
+ self._world = world
+ self._viewport = (0, 0)
def _apply_events(self, events):
if not events:
def _apply_events(self, events):
if not events:
@@
-26,20
+29,27
@@
class Engine:
ev.apply(self)
def change_scene(self, scene):
ev.apply(self)
def change_scene(self, scene):
- self._
scene.exit(
)
+ self._
apply_events(self._scene.exit(self._world.proxy())
)
self._scene = scene
self._scene = scene
- self._scene.enter()
+ self._apply_events(self._scene.enter(self._world.proxy()))
+
+ def change_world(self, *args, **kw):
+ self._world.apply_event(*args, **kw)
def quit_game(self):
from pgzero.game import exit
exit()
def quit_game(self):
from pgzero.game import exit
exit()
+ def move_screen(self, offset):
+ self._viewport = (self._viewport[0] + offset[0],
+ self._viewport[1] + offset[1])
+
@apply_events
def update(self, dt):
@apply_events
def update(self, dt):
- return self._scene.update(dt)
+ return self._scene.update(
self._world.proxy(),
dt)
def draw(self):
def draw(self):
- self._scene.draw(self._app.screen)
+ self._scene.draw(self._app.screen
, self._viewport
)
@apply_events
def on_mouse_down(self, pos, button):
@apply_events
def on_mouse_down(self, pos, button):
@@
-81,12
+91,24
@@
class ChangeSceneEvent(Event):
ENGINE_METHOD = "change_scene"
ENGINE_METHOD = "change_scene"
+class WorldEvent(Event):
+ """ Be a hero. Change the world. """
+
+ ENGINE_METHOD = "change_world"
+
+
class QuitEvent(Event):
""" Quit the game. """
ENGINE_METHOD = "quit_game"
class QuitEvent(Event):
""" Quit the game. """
ENGINE_METHOD = "quit_game"
+class MoveViewportEvent(Event):
+ """ Change to a new scene. """
+
+ ENGINE_METHOD = "move_screen"
+
+
class Actors:
""" A list of actors. """
class Actors:
""" A list of actors. """
@@
-112,16
+134,16
@@
class Scene:
def __init__(self):
self.actors = Actors()
def __init__(self):
self.actors = Actors()
- def enter(self):
+ def enter(self
, world
):
pass
pass
- def exit(self):
+ def exit(self
, world
):
pass
pass
- def update(self, dt):
+ def update(self,
world,
dt):
pass
pass
- def draw(self, screen):
+ def draw(self, screen
, viewport
):
screen.clear()
self.actors.draw(screen)
screen.clear()
self.actors.draw(screen)