-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinput_handler.py
More file actions
68 lines (52 loc) · 1.59 KB
/
input_handler.py
File metadata and controls
68 lines (52 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import pygame
class InputHandler:
def __init__(self):
self.quit = False
self.keys = {}
def init(self):
pass
def update(self):
for key in self.keys:
self.keys[key].update()
def catch_events(self):
for event in pygame.event.get():
# Catch main events
self.quit = (event.type == pygame.QUIT)
# Catch keyboard event
if event.type == pygame.KEYDOWN:
self.toggle(event, True)
elif event.type == pygame.KEYUP:
self.toggle(event, False)
def toggle(self, event, pressed):
key = self.keys.get(event.key)
if key is not None:
key.toggle(pressed)
def add_listener(self, key_code):
if key_code not in self.keys:
key = Key()
self.keys[key_code] = key
return key
def remove_listener(self, key_code):
if key_code in self.keys:
del self.keys[key_code]
def key_down(self, key_code):
return self.keys[key_code].down
def key_clicked(self, key_code):
return self.keys[key_code].clicked
class Key:
def __init__(self):
self.presses = 0
self.absorbs = 0
self.down = False
self.clicked = False
def toggle(self, pressed):
if pressed != self.down:
self.down = pressed
if pressed:
self.presses += 1
def update(self):
if self.absorbs < self.presses:
self.absorbs += 1
self.clicked = True
else:
self.clicked = False