diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 773cba1c1e5..07a0bdb0df3 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -50,23 +50,8 @@ GLOB.materials_list[D.id] = D sortList(GLOB.materials_list, /proc/cmp_typepaths_asc) - // Keybindings (classic) - for(var/KB in subtypesof(/datum/keybinding)) - var/datum/keybinding/keybinding = KB - if(!initial(keybinding.hotkey_keys)) - continue - var/datum/keybinding/instance = new keybinding - GLOB.keybindings_by_name[instance.name] = instance - - // Classic - if(LAZYLEN(instance.classic_keys)) - for(var/bound_key in instance.classic_keys) - LAZYADD(GLOB.classic_keybinding_list_by_key[bound_key], list(instance.name)) - - // Hotkey - if(LAZYLEN(instance.hotkey_keys)) - for(var/bound_key in instance.hotkey_keys) - LAZYADD(GLOB.hotkey_keybinding_list_by_key[bound_key], list(instance.name)) + // Keybindings + init_keybindings() GLOB.emote_list = init_emote_list() diff --git a/code/_globalvars/lists/keybindings.dm b/code/_globalvars/lists/keybindings.dm new file mode 100644 index 00000000000..f760a88fbeb --- /dev/null +++ b/code/_globalvars/lists/keybindings.dm @@ -0,0 +1,31 @@ +/// Creates and sorts all the keybinding datums +/proc/init_keybindings() + for(var/KB in subtypesof(/datum/keybinding)) + var/datum/keybinding/keybinding = KB + if(!initial(keybinding.hotkey_keys)) + continue + add_keybinding(new keybinding) + init_emote_keybinds() + +/// Adds an instanced keybinding to the global tracker +/proc/add_keybinding(datum/keybinding/instance) + GLOB.keybindings_by_name[instance.name] = instance + + // Classic + if(LAZYLEN(instance.classic_keys)) + for(var/bound_key in instance.classic_keys) + LAZYADD(GLOB.classic_keybinding_list_by_key[bound_key], list(instance.name)) + + // Hotkey + if(LAZYLEN(instance.hotkey_keys)) + for(var/bound_key in instance.hotkey_keys) + LAZYADD(GLOB.hotkey_keybinding_list_by_key[bound_key], list(instance.name)) + +/proc/init_emote_keybinds() + for(var/i in subtypesof(/datum/emote)) + var/datum/emote/faketype = i + if(!initial(faketype.key)) + continue + var/datum/keybinding/emote/emote_kb = new + emote_kb.link_to_emote(faketype) + add_keybinding(emote_kb) diff --git a/code/datums/keybinding/_defines.dm b/code/datums/keybinding/_defines.dm index f0ddd61462d..8c4b6c04837 100644 --- a/code/datums/keybinding/_defines.dm +++ b/code/datums/keybinding/_defines.dm @@ -1,4 +1,5 @@ #define CATEGORY_CLIENT "CLIENT" +#define CATEGORY_EMOTE "EMOTE" #define CATEGORY_ADMIN "ADMIN" #define CATEGORY_XENO "XENO" #define CATEGORY_CARBON "CARBON" @@ -14,4 +15,5 @@ #define WEIGHT_MOB 40 #define WEIGHT_LIVING 50 #define WEIGHT_DEAD 60 +#define WEIGHT_EMOTE 70 #define WEIGHT_LOWEST 999 diff --git a/code/datums/keybinding/emote.dm b/code/datums/keybinding/emote.dm new file mode 100644 index 00000000000..76ebd2595de --- /dev/null +++ b/code/datums/keybinding/emote.dm @@ -0,0 +1,15 @@ +/datum/keybinding/emote + category = CATEGORY_EMOTE + weight = WEIGHT_EMOTE + var/emote_key + +/datum/keybinding/emote/proc/link_to_emote(datum/emote/faketype) + hotkey_keys = list("Unbound") + emote_key = initial(faketype.key) + name = initial(faketype.key) + full_name = capitalize(initial(faketype.key)) + description = "Do the emote '*[emote_key]'" + +/datum/keybinding/emote/down(client/user) + . = ..() + user.mob.emote(emote_key) diff --git a/tgstation.dme b/tgstation.dme index b9e68d9cfde..066f268fabc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -167,6 +167,7 @@ #include "code\_globalvars\lists\admin.dm" #include "code\_globalvars\lists\client.dm" #include "code\_globalvars\lists\flavor_misc.dm" +#include "code\_globalvars\lists\keybindings.dm" #include "code\_globalvars\lists\maintenance_loot.dm" #include "code\_globalvars\lists\mapping.dm" #include "code\_globalvars\lists\mobs.dm" @@ -518,6 +519,7 @@ #include "code\datums\keybinding\admin.dm" #include "code\datums\keybinding\carbon.dm" #include "code\datums\keybinding\client.dm" +#include "code\datums\keybinding\emote.dm" #include "code\datums\keybinding\human.dm" #include "code\datums\keybinding\living.dm" #include "code\datums\keybinding\mob.dm"