diff nagslang/screens/area.py @ 336:1d487646a4d4

Better key handling, form change delay.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 06 Sep 2013 12:22:02 +0200
parents 3dd32686dbc3
children eb24e74df4c3
line wrap: on
line diff
--- a/nagslang/screens/area.py	Fri Sep 06 11:48:48 2013 +0200
+++ b/nagslang/screens/area.py	Fri Sep 06 12:22:02 2013 +0200
@@ -6,7 +6,8 @@
 
 from nagslang.constants import (
     COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS,
-    COLLISION_TYPE_FURNITURE, COLLISION_TYPE_WEREWOLF_ATTACK)
+    COLLISION_TYPE_FURNITURE, COLLISION_TYPE_WEREWOLF_ATTACK,
+    CMD_TOGGLE_FORM, CMD_ATTACK, CMD_ACTION)
 from nagslang.enemies import DeadEnemy
 from nagslang.events import (
     ScreenChange, DoorEvent, FireEvent, EnemyDeathEvent, ClawEvent)
@@ -24,6 +25,13 @@
         (1, 0): set([pygame.locals.K_RIGHT, pygame.locals.K_d]),
     }
 
+    command_keys = {
+        pygame.locals.K_c: CMD_TOGGLE_FORM,
+        pygame.locals.K_z: CMD_ATTACK,
+        pygame.locals.K_LCTRL: CMD_ATTACK,
+        pygame.locals.K_SPACE: CMD_ACTION,
+    }
+
     def __init__(self):
         self.keys_down = set()
 
@@ -47,6 +55,9 @@
                 dy += ty
         return (dx, dy)
 
+    def get_command_key(self, key):
+        return self.command_keys.get(key, None)
+
 
 class Drawables(object):
     def __init__(self):
@@ -151,14 +162,9 @@
         if ev.type == pygame.locals.KEYDOWN:
             if ev.key == pygame.locals.K_ESCAPE:
                 ScreenChange.post('menu')
-            if ev.key == pygame.locals.K_c:
-                self.protagonist.toggle_form()
-                self.world.transformations += 1
-            if ev.key in (pygame.locals.K_z, pygame.locals.K_LCTRL):
-                self.world.attacks += 1
-                self.protagonist.attack()
-            if ev.key == pygame.locals.K_SPACE:
-                self.protagonist.perform_action()
+            cmd_key = self.keys.get_command_key(ev.key)
+            if cmd_key is not None:
+                self.protagonist.handle_keypress(cmd_key)
         elif DoorEvent.matches(ev):
             self.protagonist.set_position(ev.dest_pos)
             if ev.destination != self.name: