From d3f5d861ef116290f287d8169b7a2fc373b87f6a Mon Sep 17 00:00:00 2001 From: Azarak Date: Fri, 18 Sep 2020 18:02:36 +0200 Subject: [PATCH] typing indicator (#863) --- code/_onclick/click.dm | 4 +++ code/modules/mob/living/living_say.dm | 3 +- code/modules/mob/mob_say.dm | 8 +++++ .../modules/typing_indicator/code/mob.dm | 34 ++++++++++++++++++ .../icons/typing_indicator.dmi | Bin 0 -> 499 bytes .../modules/typing_indicator/readme.md | 27 ++++++++++++++ tgstation.dme | 1 + 7 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 modular_skyrat/modules/typing_indicator/code/mob.dm create mode 100644 modular_skyrat/modules/typing_indicator/icons/typing_indicator.dmi create mode 100644 modular_skyrat/modules/typing_indicator/readme.md diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 28841f3d5ba..337399c8dde 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -98,6 +98,10 @@ CtrlClickOn(A) return + //SKYRAT EDIT ADDITION BEGIN - TYPING_INDICATOR + if(typing_indicator) + set_typing_indicator(FALSE) + //SKYRAT EDIT ADDITION END if(incapacitated(ignore_restraints = TRUE, ignore_stasis = TRUE)) return diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 541fa717a43..e26d8ccba2d 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -327,7 +327,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( speech_bubble_recipients.Add(M.client) var/image/I = image('icons/mob/talk.dmi', src, "[bubble_type][say_test(message)]", FLY_LAYER) I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA - INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, I, speech_bubble_recipients, 30) + //INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, I, speech_bubble_recipients, 30) - ORIGINAL + INVOKE_ASYNC(GLOBAL_PROC, /.proc/animate_speechbubble, I, speech_bubble_recipients, 30) //SKYRAT EDIT CHANGE - TYPING_INDICATOR /mob/proc/binarycheck() return FALSE diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 56749f30378..db7238c2207 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -4,6 +4,10 @@ /mob/verb/say_verb(message as text) set name = "Say" set category = "IC" + //SKYRAT EDIT ADDITION BEGIN - TYPING_INDICATOR + if(typing_indicator) + set_typing_indicator(FALSE) + //SKYRAT EDIT ADDITION END if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return @@ -27,6 +31,10 @@ /mob/verb/me_verb(message as text) set name = "Me" set category = "IC" + //SKYRAT EDIT ADDITION BEGIN - TYPING_INDICATOR + if(typing_indicator) + set_typing_indicator(FALSE) + //SKYRAT EDIT ADDITION END if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") diff --git a/modular_skyrat/modules/typing_indicator/code/mob.dm b/modular_skyrat/modules/typing_indicator/code/mob.dm new file mode 100644 index 00000000000..37d332cb077 --- /dev/null +++ b/modular_skyrat/modules/typing_indicator/code/mob.dm @@ -0,0 +1,34 @@ +GLOBAL_VAR_INIT(typing_indicator_overlay, mutable_appearance('modular_skyrat/modules/typing_indicator/icons/typing_indicator.dmi', "default0", FLY_LAYER)) + +/mob + var/typing_indicator = FALSE + +/mob/proc/set_typing_indicator(var/state) + typing_indicator = state + if(typing_indicator) + add_overlay(GLOB.typing_indicator_overlay) + else + cut_overlay(GLOB.typing_indicator_overlay) + +/mob/living/key_down(_key, client/user) + if(!typing_indicator && stat == CONSCIOUS) + switch(_key) + if("T") + set_typing_indicator(TRUE) + if("M") + set_typing_indicator(TRUE) + return ..() + +/proc/animate_speechbubble(image/I, list/show_to, duration) + var/matrix/M = matrix() + M.Scale(0,0) + I.transform = M + I.alpha = 0 + for(var/client/C in show_to) + C.images += I + animate(I, transform = 0, alpha = 255, time = 5, easing = ELASTIC_EASING) + sleep(duration-5) + animate(I, alpha = 0, time = 5, easing = EASE_IN) + sleep(20) + for(var/client/C in show_to) + C.images -= I diff --git a/modular_skyrat/modules/typing_indicator/icons/typing_indicator.dmi b/modular_skyrat/modules/typing_indicator/icons/typing_indicator.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4a6351e53fe23135503fc2dfc81be5c6d9fabce1 GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=^;IDeB`&GO$wiq3C7Jno3=9=> zRF7}uI%FWg_Tc9`&AMA#J+`LpaSc*&{>|4I`<2@QSrOG-~8Oi|KMG;?2}qsRVKswol<#eVuJ1W&*(3F zrhi@jXZ|dPcYYNnpEujgV%U4zpxem)^kZQKrE76td)gID|G(zb5PF)LcHX+}o5C~u zK9y6yH>-b+O*wD>SJYy+uJMT(@4qd$k$_9`dX4)O#j$SjvjwAW!WMC{Zc)I$ztaD0e0s!c*(A59{ literal 0 HcmV?d00001 diff --git a/modular_skyrat/modules/typing_indicator/readme.md b/modular_skyrat/modules/typing_indicator/readme.md new file mode 100644 index 00000000000..f3ea6bcaa6a --- /dev/null +++ b/modular_skyrat/modules/typing_indicator/readme.md @@ -0,0 +1,27 @@ +## Title: Typing Indicator + +MODULE ID: TYPING_INDICATOR + +### Description: + +Adds an asynchronously tracked typing indicator, which shows a typing bubble with an animation. +Added in a hacky way to make it very smooth on the user's end. It registers "T" and "M" keypresses for the indicator to popup, and makes it gone on mouse click, or say/emote send + +### TG Proc Changes: + + - APPEND: code/modules/keybindings/setup.dm > /datum/proc/key_down() + - ADDITION: code/onclick/_click.dm > /mob/proc/ClickOn() + - ADDITION: code/modules/mob/mob_say.dm > /mob/verb/say_verb(), /mob/verb/me_verb() + - CHANGE: code\modules\mob\living\living_say.dm > /mob/living/send_speech + +### Defines: + +N/A + +### Included files: + +N/A + +### Credits: + +Azarak diff --git a/tgstation.dme b/tgstation.dme index d1872a02477..8fb6621bcd1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3380,4 +3380,5 @@ #include "modular_skyrat\modules\icspawning\code\game\objects\items\cards_ids.dm" #include "modular_skyrat\modules\icspawning\code\modules\clothing\outfits\standard.dm" #include "modular_skyrat\modules\icspawning\code\modules\spells\spell.dm" +#include "modular_skyrat\modules\typing_indicator\code\mob.dm" // END_INCLUDE