kay
This commit is contained in:
@@ -8,14 +8,6 @@ SUBSYSTEM_DEF(input)
|
||||
|
||||
var/list/macro_sets
|
||||
var/list/movement_keys
|
||||
/*! Special thing (until we get custom keybinds that also support clientside macros :weary:) that lets us do stuff like look up "which key is say/me bound to". Special format too, the value of a key should be list(key, modifier1, modifier2, ...). "default" unless override.
|
||||
* USE get_key_for_macro_id or get_typing_indicator_binds TO ACCESS!
|
||||
*/
|
||||
var/list/macro_set_reverse_lookups
|
||||
/// cache these for speed.
|
||||
var/list/typing_indicator_binds
|
||||
/// same
|
||||
var/static/list/typing_indicator_verbs
|
||||
|
||||
/datum/controller/subsystem/input/Initialize()
|
||||
setup_default_macro_sets()
|
||||
@@ -41,57 +33,35 @@ SUBSYSTEM_DEF(input)
|
||||
"Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
|
||||
"O" = "ooc",
|
||||
"Ctrl+O" = "looc",
|
||||
"T" = "say_keybind",
|
||||
"Ctrl+T" = "whisper",
|
||||
"M" = "me_keybind",
|
||||
"Ctrl+M" = "subtle",
|
||||
"T" = "Say",
|
||||
"Ctrl+T" = "SayWithIndicator",
|
||||
"Y" = "whisper",
|
||||
"M" = "Me",
|
||||
"Ctrl+M" = "MeWithIndicator",
|
||||
"5" = "subtle",
|
||||
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
|
||||
"Any" = "\"KeyDown \[\[*\]\]\"",
|
||||
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
|
||||
),
|
||||
"old_default" = list(
|
||||
"Tab" = "\".winset \\\"mainwindow.macro=old_hotkeys map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"",
|
||||
"Ctrl+T" = "say_keybind",
|
||||
"Ctrl+T" = "Say",
|
||||
"Ctrl+O" = "ooc",
|
||||
),
|
||||
"old_hotkeys" = list(
|
||||
"Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
|
||||
"O" = "ooc",
|
||||
"L" = "looc",
|
||||
"T" = "say_keybind",
|
||||
"M" = "me_keybind",
|
||||
"T" = "Say",
|
||||
"Ctrl+T" = "SayWithIndicator",
|
||||
"M" = "Me",
|
||||
"Ctrl+M" = "MeWithIndicator",
|
||||
"Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
|
||||
"Any" = "\"KeyDown \[\[*\]\]\"",
|
||||
"Any+UP" = "\"KeyUp \[\[*\]\]\"",
|
||||
),
|
||||
)
|
||||
|
||||
macro_set_reverse_lookups = list(
|
||||
"default" = list(
|
||||
"say_keybind" = list("T"),
|
||||
"whisper" = list("T", "Ctrl"),
|
||||
"me_keybind" = list("M"),
|
||||
"subtle" = list("M", "Ctrl")
|
||||
),
|
||||
"old_default" = list(
|
||||
"say_keybind" = list("T", "Ctrl"),
|
||||
),
|
||||
"old_hotkeys" = list(
|
||||
"say_keybind" = list("T"),
|
||||
"me_keybind" = list("M"),
|
||||
)
|
||||
)
|
||||
|
||||
typing_indicator_verbs = list("me", "say", "say_keybind", "me_keybind")
|
||||
typing_indicator_binds = list()
|
||||
for(var/check_verb in typing_indicator_verbs)
|
||||
for(var/macro_set in macro_set_reverse_lookups)
|
||||
var/list/keylist = macro_set_reverse_lookups[macro_set][check_verb]
|
||||
if(!keylist)
|
||||
continue
|
||||
var/key = keylist[1]
|
||||
typing_indicator_binds[key] = TRUE
|
||||
|
||||
// Because i'm lazy and don't want to type all these out twice
|
||||
var/list/old_default = default_macro_sets["old_default"]
|
||||
|
||||
@@ -151,10 +121,3 @@ SUBSYSTEM_DEF(input)
|
||||
for(var/i in 1 to length(clients))
|
||||
var/client/C = clients[i]
|
||||
C.keyLoop()
|
||||
|
||||
/datum/controller/subsystem/input/proc/get_key_for_macro_id(macro_id, macroset)
|
||||
return macro_set_reverse_lookups[macroset][macro_id] || macro_set_reverse_lookups["default"][macro_id]
|
||||
|
||||
/// Returns an associative list of keys without modifiers like ctrl. You have to do another lookup, this is for the first check to be faster.
|
||||
/datum/controller/subsystem/input/proc/get_typing_indicator_binds(macroset)
|
||||
return typing_indicator_binds[macroset]
|
||||
|
||||
@@ -3,24 +3,7 @@
|
||||
// Or we can have NPC's send actual keypresses and detect that by seeing no client
|
||||
|
||||
/mob/key_down(_key, client/user)
|
||||
if(SSinput.typing_indicator_binds[_key])
|
||||
var/macroset = winget(user, "mainwindow", "macro")
|
||||
var/list/L = SSinput.macro_set_reverse_lookups[macroset]
|
||||
var/valid = FALSE
|
||||
for(var/the_verb in L)
|
||||
if(the_verb in SSinput.typing_indicator_verbs)
|
||||
var/list/keys = L[the_verb]
|
||||
valid = TRUE
|
||||
if(length(keys) > 1)
|
||||
for(var/i in 2 to length(keys))
|
||||
if(!client.keys_held[keys[i]])
|
||||
valid = FALSE
|
||||
break
|
||||
if(valid)
|
||||
display_typing_indicator()
|
||||
switch(_key)
|
||||
if("Escape") //escape breaks out of clientside verb text input without executing at all, meaning we can't hook the verb to do this for us.
|
||||
clear_typing_indicator()
|
||||
if("Delete", "H")
|
||||
if(!pulling)
|
||||
to_chat(src, "<span class='notice'>You are not pulling anything.</span>")
|
||||
|
||||
+13
-25
@@ -1,55 +1,43 @@
|
||||
//Speech verbs.
|
||||
// the _keybind verbs uses "as text" versus "as text|null" to force a popup when pressed by a keybind.
|
||||
/mob/verb/say_keybind(message as text)
|
||||
set name = "say_keybind"
|
||||
/mob/verb/say_typing_indicator()
|
||||
set name = "SayWithIndicator"
|
||||
set hidden = TRUE
|
||||
set category = "IC"
|
||||
display_typing_indicator()
|
||||
var/message = input(usr, "", "Say") as text|null
|
||||
// If they don't type anything just drop the message.
|
||||
clear_typing_indicator() // clear it immediately!
|
||||
if(!length(message))
|
||||
return
|
||||
return do_sayverb(message)
|
||||
return say_verb(message)
|
||||
|
||||
/mob/verb/say_verb(message as text|null)
|
||||
/mob/verb/say_verb(message as text)
|
||||
set name = "Say"
|
||||
set category = "IC"
|
||||
display_typing_indicator()
|
||||
if(!length(message))
|
||||
// We don't use input because that can't be broken out of with ESC key.
|
||||
winset(src, null, "command=\"say_keybind\"")
|
||||
else
|
||||
return do_sayverb(message)
|
||||
|
||||
/mob/proc/do_sayverb(message)
|
||||
clear_typing_indicator() // clear it immediately!
|
||||
if(!length(message))
|
||||
return
|
||||
if(GLOB.say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
|
||||
return
|
||||
clear_typing_indicator() // clear it immediately!
|
||||
say(message)
|
||||
|
||||
/mob/verb/me_keybind(message as message)
|
||||
set name = "me_keybind"
|
||||
/mob/verb/me_typing_indicator()
|
||||
set name = "MeWithIndicator"
|
||||
set hidden = TRUE
|
||||
set category = "IC"
|
||||
display_typing_indicator()
|
||||
var/message = input(usr, "", "Me") as message|null
|
||||
// If they don't type anything just drop the message.
|
||||
clear_typing_indicator() // clear it immediately!
|
||||
if(!length(message))
|
||||
return
|
||||
return do_meverb(message)
|
||||
return me_verb(message)
|
||||
|
||||
/mob/verb/me_verb(message as message|null)
|
||||
/mob/verb/me_verb(message as message)
|
||||
set name = "Me"
|
||||
set category = "IC"
|
||||
display_typing_indicator()
|
||||
if(!length(message))
|
||||
// Do not use input because it can't be broken out of with ESC key.
|
||||
winset(src, null, "command=\"me_keybind\"")
|
||||
else
|
||||
return do_meverb(message)
|
||||
|
||||
/mob/proc/do_meverb(message)
|
||||
clear_typing_indicator() // clear it immediately!
|
||||
if(!length(message))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user