Mercurial > nagslang
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: