changeset 102:2e913a89e69d

Link up key presses to calls to action functions on player and to quitting level.
author Simon Cross <hodgestar@gmail.com>
date Mon, 04 Apr 2011 20:23:14 +0200
parents b502e732f821
children aaef228b6358
files skaapsteker/levelscene.py skaapsteker/sprites/player.py
diffstat 2 files changed, 43 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/levelscene.py	Mon Apr 04 19:34:20 2011 +0200
+++ b/skaapsteker/levelscene.py	Mon Apr 04 20:23:14 2011 +0200
@@ -5,9 +5,20 @@
 import physics
 import sprites.player
 import pygame
+from pygame.locals import KEYDOWN, K_UP, K_DOWN, K_LEFT, K_RIGHT, K_x, K_z, \
+                          K_q, K_ESCAPE
 
 class LevelScene(engine.Scene):
 
+    KEY_TO_PLAYER_ACTION = {
+        K_LEFT: 'action_left',
+        K_RIGHT: 'action_right',
+        K_UP: 'action_up',
+        K_DOWN: 'action_down',
+        K_x: 'action_fire1',
+        K_z: 'action_fire2',
+    }
+
     def __init__(self, leveldef, player=None):
         if not player:
             self._player = sprites.player.Player()
@@ -25,6 +36,18 @@
             self._world.add(sprite)
 
         self._world.add(self._player)
+        self._build_action_map()
+
+    def _build_action_map(self):
+        self._key_map = {}
+        for key, action in self.KEY_TO_PLAYER_ACTION.items():
+            self._key_map[key] = getattr(self._player, action)
+        for key in [K_q, K_ESCAPE]:
+            self._key_map[key] = self._quit
+
+    def _quit(self):
+        import menuscene # avoid circular import
+        engine.ChangeScene.post(menuscene.MenuScene())
 
     def draw(self, screen_surface):
         self._world.update()
@@ -38,6 +61,7 @@
         screen_surface.blit(self._level_surface, (0, 0), clip_rect)
 
     def dispatch(self, ev):
-        # handle events here!
-        self._player.dispatch(ev)
-        pass
+        if ev.type is KEYDOWN:
+            action = self._key_map.get(ev.key)
+            if action is not None:
+                action()
--- a/skaapsteker/sprites/player.py	Mon Apr 04 19:34:20 2011 +0200
+++ b/skaapsteker/sprites/player.py	Mon Apr 04 20:23:14 2011 +0200
@@ -42,9 +42,23 @@
         self.starting_tile_pos = pos
         self.rect = self.image.get_rect(topleft=(pos[0]*TILE_SIZE[0], pos[1]*TILE_SIZE[1]))
 
+    def action_left(self):
+        print "L"
 
-    def dispatch(self, ev):
-        pass
+    def action_right(self):
+        print "R"
+
+    def action_up(self):
+        print "U"
+
+    def action_down(self):
+        print "D"
+
+    def action_fire1(self):
+        print "F1"
+
+    def action_fire2(self):
+        print "F2"
 
     def _get_action(self):
         if self.running:
@@ -53,7 +67,6 @@
             return 'jumpin'
         return 'standing'
 
-
     def _make_key(self, action=None):
         if action is None:
             action = self._get_action()