# HG changeset patch # User Simon Cross # Date 1315767373 -7200 # Node ID 119c0fb758c224c3fab01e2a5ee196ff516666e6 # Parent 1b9b17eb896bf375a9f33dc5014f28b6f839d56b Move key handling into GameWidget and GameWidget into widgets.game. diff -r 1b9b17eb896b -r 119c0fb758c2 mamba/habitats/level.py --- 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 diff -r 1b9b17eb896b -r 119c0fb758c2 mamba/snake.py --- 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) diff -r 1b9b17eb896b -r 119c0fb758c2 mamba/widgets/game.py --- /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) diff -r 1b9b17eb896b -r 119c0fb758c2 mamba/widgets/level.py --- 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 diff -r 1b9b17eb896b -r 119c0fb758c2 mamba/world.py --- 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()