Files
Paradise/code/datums/keybindings/movement_keybinds.dm
2024-04-17 04:21:01 +00:00

54 lines
1.3 KiB
Plaintext

/datum/keybinding/movement
category = KB_CATEGORY_MOVEMENT
/// The direction to move to when held.
var/move_dir
/datum/keybinding/movement/north
name = "Move North"
keys = list("W", "North")
move_dir = NORTH
/datum/keybinding/movement/south
name = "Move South"
keys = list("S", "South")
move_dir = SOUTH
/datum/keybinding/movement/east
name = "Move East"
keys = list("D", "East")
move_dir = EAST
/datum/keybinding/movement/west
name = "Move West"
keys = list("A", "West")
move_dir = WEST
/datum/keybinding/lock
name = "Movement Lock (Prevents Moving When Held)"
category = KB_CATEGORY_MOVEMENT
keys = list("Ctrl")
/datum/keybinding/lock/down(client/C)
. = ..()
C.input_data.move_lock = TRUE
movement_restore(C)
/datum/keybinding/lock/up(client/C)
. = ..()
C.input_data.move_lock = FALSE
movement_restore(C)
/datum/keybinding/lock/proc/movement_restore(client/C)
var/datum/input_data/ID = C.input_data
for(var/_key in C.input_data.keys_held)
var/move_dir = C.movement_kb_dirs[_key]
if(move_dir && ID.move_lock)
ID.desired_move_dir &= ~move_dir
if(!(ID.desired_move_dir_add & move_dir))
ID.desired_move_dir_sub |= move_dir
else if(move_dir)
SSinput.processing[C] = world.time
ID.desired_move_dir |= move_dir
if(!(ID.desired_move_dir_sub & move_dir))
ID.desired_move_dir_add |= move_dir