mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-18 13:43:27 +00:00
* bindable action buttons (#81371) ## About The Pull Request ### work started 12/12/2023 you may alt-click action buttons to bind them to a key these are subject to click cooldown and if an action successfully triggers click cooldown is triggered so you cant instantly do multiple alt-click again to unbind ## Why It's Good For The Game moving your mouse to the top left corner to do combat is not good gameplay ## Changelog 🆑 qol: you may altclick action buttons to bind them to a key /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * bindable action buttons --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
52 lines
1.7 KiB
Plaintext
52 lines
1.7 KiB
Plaintext
// Set a client's focus to an object and override these procs on that object to let it handle keypresses
|
|
|
|
/datum/proc/key_down(key, client/user, full_key) // Called when a key is pressed down initially
|
|
SHOULD_CALL_PARENT(TRUE)
|
|
return
|
|
/datum/proc/key_up(key, client/user) // Called when a key is released
|
|
return
|
|
/datum/proc/keyLoop(client/user) // Called once every frame
|
|
set waitfor = FALSE
|
|
return
|
|
|
|
// removes all the existing macros
|
|
/client/proc/erase_all_macros()
|
|
var/erase_output = ""
|
|
var/list/macro_set = params2list(winget(src, "default.*", "command")) // The third arg doesnt matter here as we're just removing them all
|
|
for(var/k in 1 to length(macro_set))
|
|
var/list/split_name = splittext(macro_set[k], ".")
|
|
var/macro_name = "[split_name[1]].[split_name[2]]" // [3] is "command"
|
|
erase_output = "[erase_output];[macro_name].parent=null"
|
|
winset(src, null, erase_output)
|
|
|
|
/client/proc/set_macros()
|
|
set waitfor = FALSE
|
|
|
|
//Reset the buffer
|
|
reset_held_keys()
|
|
|
|
erase_all_macros()
|
|
|
|
var/list/macro_set = SSinput.macro_set
|
|
for(var/k in 1 to length(macro_set))
|
|
var/key = macro_set[k]
|
|
var/command = macro_set[key]
|
|
winset(src, "default-[REF(key)]", "parent=default;name=[key];command=[command]")
|
|
|
|
//Reactivate any active tgui windows mouse passthroughs macros
|
|
for(var/datum/tgui_window/window in tgui_windows)
|
|
if(window.mouse_event_macro_set)
|
|
window.mouse_event_macro_set = FALSE
|
|
window.set_mouse_macro()
|
|
|
|
update_special_keybinds()
|
|
|
|
/// Manually clears any held keys, in case due to lag or other undefined behavior a key gets stuck.
|
|
/client/proc/reset_held_keys()
|
|
for(var/key in keys_held)
|
|
keyUp(key)
|
|
|
|
//In case one got stuck and the previous loop didn't clean it, somehow.
|
|
for(var/key in key_combos_held)
|
|
keyUp(key_combos_held[key])
|