-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinput_handler.py
More file actions
100 lines (88 loc) · 3.84 KB
/
input_handler.py
File metadata and controls
100 lines (88 loc) · 3.84 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
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
# Add this to player.py or create a new input_handler.py
import arcade
from constants import *
# Add this to player.py or create a new input_handler.py
class InputHandler:
def __init__(self, player):
self.player = player
# Dictionary to track which keys are pressed
self.pressed_keys = {
"up": False,
"down": False,
"left": False,
"right": False,
"shift": False
}
def key_press(self, key, modifiers):
# Update pressed keys dictionary
if key == arcade.key.UP or key == arcade.key.Z:
self.pressed_keys["up"] = True
elif key == arcade.key.DOWN or key == arcade.key.S:
self.pressed_keys["down"] = True
elif key == arcade.key.LEFT or key == arcade.key.Q:
self.pressed_keys["left"] = True
elif key == arcade.key.RIGHT or key == arcade.key.D:
self.pressed_keys["right"] = True
elif key == arcade.key.LSHIFT:
self.pressed_keys["shift"] = True
# Update player movement and state based on current key states
self.update_movement()
def key_release(self, key, modifiers):
# Update pressed keys dictionary
if key == arcade.key.UP or key == arcade.key.Z:
self.pressed_keys["up"] = False
elif key == arcade.key.DOWN or key == arcade.key.S:
self.pressed_keys["down"] = False
elif key == arcade.key.LEFT or key == arcade.key.Q:
self.pressed_keys["left"] = False
elif key == arcade.key.RIGHT or key == arcade.key.D:
self.pressed_keys["right"] = False
elif key == arcade.key.LSHIFT:
self.pressed_keys["shift"] = False
# Update player movement and state based on current key states
self.update_movement()
def update_movement(self):
# Calculate movement based on which keys are pressed
movement_x = 0
movement_y = 0
if self.pressed_keys["up"]:
movement_y = PLAYER_MOVEMENT_SPEED
if self.pressed_keys["down"]:
movement_y = -PLAYER_MOVEMENT_SPEED
if self.pressed_keys["left"]:
movement_x = -PLAYER_MOVEMENT_SPEED
if self.pressed_keys["right"]:
movement_x = PLAYER_MOVEMENT_SPEED
# Set player movement
self.player.change_x = movement_x
self.player.change_y = movement_y
self.player.base_sprite.change_x = movement_x
self.player.base_sprite.change_y = movement_y
self.player.hair_sprite.change_x = movement_x
self.player.hair_sprite.change_y = movement_y
self.player.tool_sprite.change_x = movement_x
self.player.tool_sprite.change_y = movement_y
# Determine state based on movement and modifiers
self.update_state()
def update_state(self):
# Don't change state if player is in special states like mining or swimming
if self.player.current_state in ["mining", "axe", "swimming"]:
return
# If running
if self.pressed_keys["shift"] and (self.player.change_x != 0 or self.player.change_y != 0):
self.player.current_state = "run"
# Double the speed
self.player.change_x *= 2
self.player.change_y *= 2
self.player.base_sprite.change_x *= 2
self.player.base_sprite.change_y *= 2
self.player.hair_sprite.change_x *= 2
self.player.hair_sprite.change_y *= 2
self.player.tool_sprite.change_x *= 2
self.player.tool_sprite.change_y *= 2
# If walking
elif self.player.change_x != 0 or self.player.change_y != 0:
self.player.current_state = "walking"
# If idle
else:
self.player.current_state = "idle"