aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar rcoh <rcoh@mit.edu>2011-08-29 15:48:37 -0400
committerGravatar rcoh <rcoh@mit.edu>2011-08-29 15:48:37 -0400
commitecee8bc8e2820357fca56975300bf73f492b01e6 (patch)
tree10ba4e3c7bb48c623b5e8f21cac3c89518f2a622
parentcaad42bb405cb51b1fe7a66c2ca854c2d90ee85d (diff)
support for holding down keys
-rw-r--r--ddrinput.py123
1 files changed, 77 insertions, 46 deletions
diff --git a/ddrinput.py b/ddrinput.py
index fa31640..4d77ccc 100644
--- a/ddrinput.py
+++ b/ddrinput.py
@@ -1,9 +1,12 @@
import pygame
+import time
JOY_EVENT = 7
+JOY_EVENT_2 = 10
KEY_EVENT = 2
+KEY_RELEASE = 3
X = 0
Y = 1
-(LEFT, RIGHT, UP, DOWN, DROP, DIE) = range(6)
+(LEFT, RIGHT, UP, DOWN, DROP, DIE, RELEASE) = range(7)
KEY_LEFT = 276
KEY_UP = 273
KEY_DOWN = 274
@@ -36,7 +39,7 @@ class DdrInput(object):
#This is just so that we can get key presses in the demo. remove when we plug it into a ui
screen = pygame.display.set_mode((640, 480))
self.debug_mode = debug_mode
- self.last_inputs = {}
+ self.active_inputs = {}
def init_joysticks(self):
pygame.joystick.init()
@@ -55,9 +58,41 @@ class DdrInput(object):
event = pygame.event.poll()
player_move = None
if event.type == JOY_EVENT:
+ player_index, player_move = handle_joy_event(event)
+ if self.debug_mode:
+ print (player_index, player_move)
+
+ if self.debug_mode:
+ if event.type == KEY_EVENT or event.type == KEY_RELEASE:
+ (player_index, player_move) = self.handle_key_event(event)
+
+
+ if player_move != None:
+ if player_move == RELEASE:
+ self.active_inputs[player_index] = None
+ return None
+ else:
+ print 'setting active input'
+ self.active_inputs[player_index] = (.5, time.time(), player_move)
+ return (player_index, player_move)
+ else:
+ for player_index in self.active_inputs:
+ if self.active_inputs[player_index] != None:
+ (fallback_start, start_time, move) = self.active_inputs[player_index]
+ print time.time() - start_time
+ if time.time() - start_time > fallback_start:
+ fallback_start /= 2
+ fallback_start = max(.1, fallback_start)
+ start_time = time.time()
+ self.active_inputs[player_index] = (fallback_start, start_time, move)
+ return (player_index, move)
+ return None
+
+ def handle_joy_event(self, event):
player_index = event.joy
#there may be a tricky quick way to code this, but this is more readable
#value == 0 -> released
+ player_move = None
if event.axis == X:
if event.value < 0:
player_move = LEFT
@@ -68,47 +103,43 @@ class DdrInput(object):
player_move = DOWN
elif event.value < 0:
player_move = UP
- if self.debug_mode and player_move != None:
- print (player_index, player_move)
- if player_move != None:
- self.last_inputs[player_index][player_move] = 1
- return (player_index, player_move)
- else:
- return None
- if self.debug_mode:
- if event.type == KEY_EVENT:
- if event.key == KEY_LEFT:
- player_index = 1
- player_move = LEFT
- elif event.key == KEY_RIGHT:
- player_index = 1
- player_move = RIGHT
- elif event.key == KEY_DOWN:
- player_index = 1
- player_move = DOWN
- elif event.key == KEY_UP:
- player_index = 1
- player_move = UP
- elif event.key == KEY_A:
- player_index = 0
- player_move = LEFT
- elif event.key == KEY_D:
- player_index = 0
- player_move = RIGHT
- elif event.key == KEY_S:
- player_index = 0
- player_move = DOWN
- elif event.key == KEY_W:
- player_index = 0
- player_move = UP
- elif event.key == KEY_ESC:
- player_index = 2
- player_move = DIE
- elif event.key == KEY_SPACE:
- player_index = 1
- player_move = DROP
-
- if player_move != None:
- return (player_index, player_move)
- else:
- return None
+ if event.value == 0:
+ player_move = RELEASE
+
+ return player_index, player_move
+
+ def handle_key_event(self, event):
+ if event.key == KEY_LEFT:
+ player_index = 1
+ player_move = LEFT
+ elif event.key == KEY_RIGHT:
+ player_index = 1
+ player_move = RIGHT
+ elif event.key == KEY_DOWN:
+ player_index = 1
+ player_move = DOWN
+ elif event.key == KEY_UP:
+ player_index = 1
+ player_move = UP
+ elif event.key == KEY_A:
+ player_index = 0
+ player_move = LEFT
+ elif event.key == KEY_D:
+ player_index = 0
+ player_move = RIGHT
+ elif event.key == KEY_S:
+ player_index = 0
+ player_move = DOWN
+ elif event.key == KEY_W:
+ player_index = 0
+ player_move = UP
+ elif event.key == KEY_ESC:
+ player_index = 2
+ player_move = DIE
+ elif event.key == KEY_SPACE:
+ player_index = 1
+ player_move = DROP
+
+ if event.type == KEY_RELEASE:
+ player_move = RELEASE
+ return (player_index, player_move)