changeset 119:119c0fb758c2

Move key handling into GameWidget and GameWidget into widgets.game.
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 20:56:13 +0200
parents 1b9b17eb896b
children 6b1cdbdd34ca
files mamba/habitats/level.py mamba/snake.py mamba/widgets/game.py mamba/widgets/level.py mamba/world.py
diffstat 5 files changed, 45 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/habitats/level.py	Sun Sep 11 20:32:18 2011 +0200
+++ b/mamba/habitats/level.py	Sun Sep 11 20:56:13 2011 +0200
@@ -1,12 +1,11 @@
 """Where a level object hides."""
 
-from pygame.locals import KEYDOWN, K_LEFT, K_RIGHT, K_UP, K_DOWN
+from pygame.locals import KEYDOWN
 
 from mamba.constants import ESCAPE_KEYS
 from mamba.engine import Habitat, NewHabitatEvent
 from mamba.world import World
-from mamba.widgets.level import GameWidget
-from mamba.snake import Snake
+from mamba.widgets.game import GameWidget
 from mamba.level import Level
 
 
@@ -14,27 +13,13 @@
     def __init__(self, level_name):
         super(LevelHabitat, self).__init__()
         level = Level(level_name)
-        self.world = World(level)
-        game_widget = GameWidget(self.world)
+        world = World(level)
+        game_widget = GameWidget(world)
         self.container.add(game_widget)
         self.container.add_callback(KEYDOWN, self.keydown_event)
 
-        self.actions = self.create_action_map()
-
-    def create_action_map(self):
-        actions = {}
-        actions[K_LEFT] = (self.world.snake.set_orientation, (Snake.LEFT,))
-        actions[K_RIGHT] = (self.world.snake.set_orientation, (Snake.RIGHT,))
-        actions[K_DOWN] = (self.world.snake.set_orientation, (Snake.DOWN,))
-        actions[K_UP] = (self.world.snake.set_orientation, (Snake.UP,))
-        return actions
-
     def keydown_event(self, ev, widget):
         if ev.key in ESCAPE_KEYS:
             from mamba.habitats.mainmenu import MainMenu
             NewHabitatEvent.post(MainMenu())
             return True
-        elif ev.key in self.actions:
-            func, args = self.actions[ev.key]
-            func(*args)
-            return True
--- a/mamba/snake.py	Sun Sep 11 20:32:18 2011 +0200
+++ b/mamba/snake.py	Sun Sep 11 20:56:13 2011 +0200
@@ -30,7 +30,11 @@
     def draw(self, surface):
         self.segment_group.draw(surface)
 
+    def update(self):
+        pass
+
     def set_orientation(self, orientation):
+        self.orientation = orientation
         #self.orientation = orientation
         #for segment in self.segments:
         #    segment.set_orientation(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mamba/widgets/game.py	Sun Sep 11 20:56:13 2011 +0200
@@ -0,0 +1,34 @@
+"""Display the game area."""
+
+from pygame.rect import Rect
+from pygame.locals import KEYDOWN, K_LEFT, K_RIGHT, K_DOWN, K_UP
+
+from mamba.widgets.base import Widget
+from mamba.snake import Snake
+
+
+class GameWidget(Widget):
+    def __init__(self, world, offset=(0, 0)):
+        self.world = world
+        self.actions = self.create_action_map()
+        rect = Rect(offset, world.get_size())
+        super(GameWidget, self).__init__(rect)
+        self.focussable = True
+
+    def create_action_map(self):
+        actions = {}
+        actions[K_LEFT] = (self.world.snake.set_orientation, (Snake.LEFT,))
+        actions[K_RIGHT] = (self.world.snake.set_orientation, (Snake.RIGHT,))
+        actions[K_DOWN] = (self.world.snake.set_orientation, (Snake.DOWN,))
+        actions[K_UP] = (self.world.snake.set_orientation, (Snake.UP,))
+        return actions
+
+    def event(self, ev):
+        if ev.type == KEYDOWN and ev.key in self.actions:
+            func, args = self.actions[ev.key]
+            func(*args)
+            return True
+
+    def draw(self, surface):
+        self.world.update()
+        self.world.draw(surface)
--- a/mamba/widgets/level.py	Sun Sep 11 20:32:18 2011 +0200
+++ b/mamba/widgets/level.py	Sun Sep 11 20:56:13 2011 +0200
@@ -15,17 +15,3 @@
     def event(self, event):
         # TODO: Implement
         pass
-
-
-class GameWidget(Widget):
-    def __init__(self, world, offset=(0, 0)):
-        self.world = world
-        rect = Rect(offset, world.get_size())
-        super(GameWidget, self).__init__(rect)
-
-    def draw(self, surface):
-        self.world.draw(surface)
-
-    def event(self, ev):
-        # TODO: Implement
-        pass
--- a/mamba/world.py	Sun Sep 11 20:32:18 2011 +0200
+++ b/mamba/world.py	Sun Sep 11 20:56:13 2011 +0200
@@ -15,3 +15,6 @@
     def draw(self, surface):
         self.level.draw(surface)
         self.snake.draw(surface)
+
+    def update(self):
+        self.snake.update()