From e48366b42a66021cbc62f0a76358d63ee2af7436 Mon Sep 17 00:00:00 2001 From: Saakra <31361371+Saakra@users.noreply.github.com> Date: Sat, 23 Apr 2022 19:38:21 -0400 Subject: [PATCH] Added ability to drink from context menu (#7732) Co-authored-by: Saakra --- .../Nutrition/EntitySystems/DrinkSystem.cs | 32 +++++++++ .../nutrition/components/drink-component.ftl | 5 +- .../Textures/Interface/VerbIcons/drink.svg | 61 ++++++++++++++++++ .../Interface/VerbIcons/drink.svg.192dpi.png | Bin 0 -> 2130 bytes .../VerbIcons/drink.svg.192dpi.png.yml | 2 + 5 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Interface/VerbIcons/drink.svg create mode 100644 Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png create mode 100644 Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png.yml diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index d2319d0b28..6f8141edc6 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -17,8 +17,10 @@ using Content.Shared.FixedPoint; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Helpers; +using Content.Shared.MobState.Components; using Content.Shared.Nutrition.Components; using Content.Shared.Throwing; +using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Shared.Audio; using Robust.Shared.GameObjects; @@ -53,6 +55,7 @@ namespace Content.Server.Nutrition.EntitySystems SubscribeLocalEvent(HandleLand); SubscribeLocalEvent(OnUse); SubscribeLocalEvent(AfterInteract); + SubscribeLocalEvent>(AddDrinkVerb); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnTransferAttempt); SubscribeLocalEvent(OnDrink); @@ -328,5 +331,34 @@ namespace Content.Server.Nutrition.EntitySystems { args.Drink.CancelToken = null; } + + private void AddDrinkVerb(EntityUid uid, DrinkComponent component, GetVerbsEvent ev) + { + if (component.CancelToken != null) + return; + + if (uid == ev.User || + !ev.CanInteract || + !ev.CanAccess || + !EntityManager.TryGetComponent(ev.User, out SharedBodyComponent? body) || + !_bodySystem.TryGetComponentsOnMechanisms(ev.User, out var stomachs, body)) + return; + + if (EntityManager.TryGetComponent(uid, out var mobState) && mobState.IsAlive()) + return; + + AlternativeVerb verb = new() + { + Act = () => + { + TryDrink(ev.User, ev.User, component); + }, + IconTexture = "/Textures/Interface/VerbIcons/drink.svg.192dpi.png", + Text = Loc.GetString("drink-system-verb-drink"), + Priority = -1 + }; + + ev.Verbs.Add(verb); + } } } diff --git a/Resources/Locale/en-US/nutrition/components/drink-component.ftl b/Resources/Locale/en-US/nutrition/components/drink-component.ftl index 6205122286..5cc8f4e5e5 100644 --- a/Resources/Locale/en-US/nutrition/components/drink-component.ftl +++ b/Resources/Locale/en-US/nutrition/components/drink-component.ftl @@ -11,4 +11,7 @@ drink-component-try-use-drink-had-enough-other = They can't drink more! drink-component-try-use-drink-success-slurp = Slurp drink-component-force-feed = {$user} is trying to make you drink something! drink-component-force-feed-success = {$user} forced you to drink something! -drink-component-force-feed-success-user = You successfully feed {$target} \ No newline at end of file +drink-component-force-feed-success-user = You successfully feed {$target} + + +drink-system-verb-drink = Drink \ No newline at end of file diff --git a/Resources/Textures/Interface/VerbIcons/drink.svg b/Resources/Textures/Interface/VerbIcons/drink.svg new file mode 100644 index 0000000000..68c0b410e6 --- /dev/null +++ b/Resources/Textures/Interface/VerbIcons/drink.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + diff --git a/Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png b/Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..f231eb070a8f4f6365e19e91949c807a58be1dad GIT binary patch literal 2130 zcmV-Y2(9;tP)aDk^#l0O0j{ z+b&2x}yl);o_>(;INH5yHh#xM+j|Ni}9DRD#_ zz_RS;xMsCl*Mi7tq}6KI0>G+ex|J`}UYb2X2z?)K3>C&a2B$LU^-Me>PXV0G9 z4gl)Yr%zj(o11?-Ha7Mq+rPiRf2yge>6bM%HB|smeE$6TkMG^P*FQ5e!}C1Pr&1}t zwYBxr#>U3|08n)B;6cN!Tep5QJUl$(cDvbZGF@F=5j+>C)7ia}20(v*|Cjin*RNmy zJpjPIefx}Gy(vviP4SD10>A!EI-TaT7yUl)_V)JnKWB3p9v+^@`(M3!^_tXc5(;FUwfaBd7Z-DYVoZ`FVK${P{ESSMx8HyDR6wahwML ze)Lt%WHMD|k2^X#8YU+vTefZ6_F-jZWiiXLiz6c=fxf=JUogqc6`0?Y(o}M1lsZ*!gcJ10#M^RL1I-Smpj*c=fU%tH2 z+S=Lz0AMf}et_rZ^Z6ErhKBNf0g7?%+_{hOc{evV$G^Lw{nxm2=S~-%$CD>di2ea2 zO@T*`9(^`FJ)NVKl$1b2LxbQOSxFE=AK)6pFcT!PBpDD2h35QzzhI6U42C@vg!6NF=@>i6zMZ0Dy2foWM1NkfimuOw?AZbu}(B3^PC!OzH_N%LZ_bqNoidgOhOV z*s*U>6eU=GzkdDNO%hMC0UXB(c7O(hfg%~4ge_aP?8mi8B*H&<@L-H2o@4_UhIxT& z8#it&1pvXqWF^pQwco?FU@$lh0DPYA%Ocr;fq{Wud@)l|Q2}*laNAnb+rlCIF1vnP{ktI0001*rvHI!2%+ziCLsm0 z*}M+dIF9p@#v?Ky7K=r24I%Um(j>%ES68RESS%V`kHuo2k;Wu4faAEo;hJ8rH;^VF zmfgE|H>_HfyM39RorT`sUdg+_EJOw{3^Rml7K^1EBvhG6peSlLuKE4`w<9AX)A{;~ zfyjVBARyRw8jVKP;lqbNBuzvN2%(Q~E#Jyi3Pc99w6uIaIXRi5sZ=Vct*sR-Qj`QC zWW_axVS;jE5*YvhZ+$-B8(gF)YL}d3mcwW?3bx(JWK!0%2~qLOXHI@AuD#LZLaiv1J+X>eVa3BBY|C0?wQ{qiA^yA+!nC!r?HdL~L0Gbar-n zS(X+258G_EAIgb~qtofkxR!4vN`fo{03hx6`vpJ4s;VkQ%VTDd*^h%MIu zh(sa`t|?g_tE;QiuV24jPzH;~rq zO1_V$PoIvSJbCh@Mx#;0(50A}nUP%vD^Q?7fdT~z6aWDDCpcmb$|pi&S^xk507*qo IM6N<$f-(c^8~^|S literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png.yml b/Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png.yml new file mode 100644 index 0000000000..5c43e23305 --- /dev/null +++ b/Resources/Textures/Interface/VerbIcons/drink.svg.192dpi.png.yml @@ -0,0 +1,2 @@ +sample: + filter: true