diff --git a/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs b/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs index 1da05a3970..6288d8e826 100644 --- a/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs +++ b/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs @@ -1,6 +1,9 @@ -using Content.Shared.Movement.Systems; +using Content.Shared.Examine; +using Content.Shared.Movement.Systems; +using Content.Shared.Verbs; using Robust.Shared.Containers; using Robust.Shared.GameStates; +using Robust.Shared.Utility; namespace Content.Shared.Clothing; @@ -8,6 +11,7 @@ public sealed class ClothingSpeedModifierSystem : EntitySystem { [Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!; [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly ExamineSystemShared _examine = default!; public override void Initialize() { @@ -16,6 +20,7 @@ public sealed class ClothingSpeedModifierSystem : EntitySystem SubscribeLocalEvent(OnGetState); SubscribeLocalEvent(OnHandleState); SubscribeLocalEvent(OnRefreshMoveSpeed); + SubscribeLocalEvent>(OnClothingVerbExamine); } // Public API @@ -67,4 +72,63 @@ public sealed class ClothingSpeedModifierSystem : EntitySystem args.ModifySpeed(component.WalkModifier, component.SprintModifier); } + + private void OnClothingVerbExamine(EntityUid uid, ClothingSpeedModifierComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + var walkModifierPercentage = MathF.Round((1.0f - component.WalkModifier) * 100f, 1); + var sprintModifierPercentage = MathF.Round((1.0f - component.SprintModifier) * 100f, 1); + + if (walkModifierPercentage == 0.0f && sprintModifierPercentage == 0.0f) + return; + + var msg = new FormattedMessage(); + + if (walkModifierPercentage == sprintModifierPercentage) + { + if (walkModifierPercentage < 0.0f) + msg.AddMarkup(Loc.GetString("clothing-speed-increase-equal-examine", ("walkSpeed", MathF.Abs(walkModifierPercentage)), ("runSpeed", MathF.Abs(sprintModifierPercentage)))); + else + msg.AddMarkup(Loc.GetString("clothing-speed-decrease-equal-examine", ("walkSpeed", walkModifierPercentage), ("runSpeed", sprintModifierPercentage))); + } + else + { + if (sprintModifierPercentage < 0.0f) + { + msg.AddMarkup(Loc.GetString("clothing-speed-increase-run-examine", ("runSpeed", MathF.Abs(sprintModifierPercentage)))); + } + else if (sprintModifierPercentage > 0.0f) + { + msg.AddMarkup(Loc.GetString("clothing-speed-decrease-run-examine", ("runSpeed", sprintModifierPercentage))); + } + if (walkModifierPercentage != 0.0f && sprintModifierPercentage != 0.0f) + { + msg.PushNewline(); + } + if (walkModifierPercentage < 0.0f) + { + msg.AddMarkup(Loc.GetString("clothing-speed-increase-walk-examine", ("walkSpeed", MathF.Abs(walkModifierPercentage)))); + } + else if (walkModifierPercentage > 0.0f) + { + msg.AddMarkup(Loc.GetString("clothing-speed-decrease-walk-examine", ("walkSpeed", walkModifierPercentage))); + } + } + + var verb = new ExamineVerb() + { + Act = () => + { + _examine.SendExamineTooltip(args.User, uid, msg, false, false); + }, + Text = Loc.GetString("clothing-speed-examinable-verb-text"), + Message = Loc.GetString("clothing-speed-examinable-verb-message"), + Category = VerbCategory.Examine, + IconTexture = "/Textures/Interface/VerbIcons/outfit.svg.192dpi.png" + }; + + args.Verbs.Add(verb); + } } diff --git a/Resources/Locale/en-US/clothing/clothing-speed.ftl b/Resources/Locale/en-US/clothing/clothing-speed.ftl new file mode 100644 index 0000000000..65921b5862 --- /dev/null +++ b/Resources/Locale/en-US/clothing/clothing-speed.ftl @@ -0,0 +1,9 @@ +# Clothing speed examine +clothing-speed-examinable-verb-text = Clothing +clothing-speed-examinable-verb-message = Examine the clothing speed values. +clothing-speed-increase-equal-examine = This increases your speed by [color=yellow]{$walkSpeed}%[/color]. +clothing-speed-decrease-equal-examine = This decreases your speed by [color=yellow]{$walkSpeed}%[/color]. +clothing-speed-increase-run-examine = This increases your running speed by [color=yellow]{$runSpeed}%[/color]. +clothing-speed-decrease-run-examine = This decreases your running speed by [color=yellow]{$runSpeed}%[/color]. +clothing-speed-increase-walk-examine = This increases your walking speed by [color=yellow]{$walkSpeed}%[/color]. +clothing-speed-decrease-walk-examine = This decreases your walking speed by [color=yellow]{$walkSpeed}%[/color].