-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinput_handlers.py
130 lines (110 loc) · 4.37 KB
/
input_handlers.py
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import tcod as libtcod
from components.body import Bodyparts
def handle_keys(game_state_machine, key):
_game_state = game_state_machine.state.__str__()
if _game_state == 'CompareItems':
return handle_compare_items_keys(key)
elif _game_state == 'ConsumeSoul':
return handle_consume_soul_keys(key)
else:
return handle_general_keys(key)
def handle_general_keys(key):
key_char = chr(key.c)
# Movement keys
movement = handle_generic_movement_keys(key)
if movement:
return movement
# Item related keys.
if key_char == 'q':
return {'skill_choice': Bodyparts.RingFinger.name}
if key_char == 'w':
return {'skill_choice': Bodyparts.Head.name}
if key_char == 'e':
return {'skill_choice': Bodyparts.Feet.name}
if key_char == 'a':
return {'skill_choice': Bodyparts.OffHand.name}
if key_char == 's':
return {'skill_choice': Bodyparts.Torso.name}
if key_char == 'd' and not key.lctrl:
return {'skill_choice': Bodyparts.MainHand.name}
# General purpose key.
if key.vk == libtcod.KEY_SPACE:
return {'interact': True}
# Other keys
if key_char == 'd' and key.lctrl:
return {'debug_toggle': True}
if key.vk == libtcod.KEY_ENTER and key.lalt:
# Alt+Enter: toggle full screen
return {'fullscreen': True}
elif key.vk == libtcod.KEY_ESCAPE:
# Exit the game
return {'exit': True}
elif key.vk == libtcod.KEY_ENTER or key.vk == libtcod.KEY_KPENTER:
return {'confirm': True}
# No key was pressed
return {}
def handle_generic_movement_keys(key):
key_char = chr(key.c)
# Movement keys
if key.vk == libtcod.KEY_UP or key_char == 'k' or key.vk == libtcod.KEY_KP8:
return {'move': (0, -1)}
elif key.vk == libtcod.KEY_DOWN or key_char == 'j' or key.vk == libtcod.KEY_KP2:
return {'move': (0, 1)}
elif key.vk == libtcod.KEY_LEFT or key_char == 'h' or key.vk == libtcod.KEY_KP4:
return {'move': (-1, 0)}
elif key.vk == libtcod.KEY_RIGHT or key_char == 'l' or key.vk == libtcod.KEY_KP6:
return {'move': (1, 0)}
elif key_char == 'y' or key.vk == libtcod.KEY_KP7:
return {'move': (-1, -1)}
elif key_char == 'u' or key.vk == libtcod.KEY_KP9:
return {'move': (1, -1)}
elif key_char == 'b' or key.vk == libtcod.KEY_KP1:
return {'move': (-1, 1)}
elif key_char == 'n' or key.vk == libtcod.KEY_KP3:
return {'move': (1, 1)}
elif key_char == '.' or key.vk == libtcod.KEY_KP5:
return {'wait': True}
return {}
def handle_compare_items_keys(key):
if key.vk == libtcod.KEY_KP5 or key.vk == libtcod.KEY_KPENTER or key.vk == libtcod.KEY_ENTER:
return {'confirm': True}
elif key.vk == libtcod.KEY_SPACE:
return {'confirm': False}
if key.vk == libtcod.KEY_ENTER and key.lalt:
# Alt+Enter: toggle full screen
return {'fullscreen': True}
elif key.vk == libtcod.KEY_ESCAPE:
# Exit the game
return {'exit': True}
return {}
def handle_consume_soul_keys(key):
key_char = chr(key.c)
# Flip the soul.
if key.vk == libtcod.KEY_UP or key_char == 'k' or key.vk == libtcod.KEY_KP8:
return {'move': (0, -1)}
elif key.vk == libtcod.KEY_DOWN or key_char == 'j' or key.vk == libtcod.KEY_KP2:
return {'move': (0, 1)}
elif key.vk == libtcod.KEY_LEFT or key_char == 'h' or key.vk == libtcod.KEY_KP4:
return {'move': (-1, 0)}
elif key.vk == libtcod.KEY_RIGHT or key_char == 'l' or key.vk == libtcod.KEY_KP6:
return {'move': (1, 0)}
elif key_char == 'y' or key.vk == libtcod.KEY_KP7:
return {'move': (-1, -1)}
elif key_char == 'u' or key.vk == libtcod.KEY_KP9:
return {'move': (1, -1)}
elif key_char == 'b' or key.vk == libtcod.KEY_KP1:
return {'move': (-1, 1)}
elif key_char == 'n' or key.vk == libtcod.KEY_KP3:
return {'move': (1, 1)}
# Confirmation keys.
if key.vk == libtcod.KEY_KP5 or key.vk == libtcod.KEY_KPENTER or key.vk == libtcod.KEY_ENTER:
return {'confirm': True}
elif key.vk == libtcod.KEY_SPACE:
return {'confirm': False}
if key.vk == libtcod.KEY_ENTER and key.lalt:
# Alt+Enter: toggle full screen
return {'fullscreen': True}
elif key.vk == libtcod.KEY_ESCAPE:
# Exit the game
return {'exit': True}
return {}