// SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com> // SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org> // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> // SPDX-FileCopyrightText: 2025 Piras314 // SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com> // // SPDX-License-Identifier: AGPL-3.0-or-later using Content.Shared.Body.Organ; using Content.Shared.Body.Part; using Content.Shared.Examine; using Content.Shared.Verbs; using Robust.Shared.Utility; namespace Content.Shared._Shitmed.Medical.Surgery.Tools; /// /// Examining a surgical or ghetto tool shows everything it can be used for. /// public sealed class SurgeryToolExamineSystem : EntitySystem { [Dependency] private readonly ExamineSystemShared _examine = default!; public override void Initialize() { SubscribeLocalEvent>(OnGetVerbs); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); } private void OnGetVerbs(Entity ent, ref GetVerbsEvent args) { if (!args.CanInteract || !args.CanAccess) return; var msg = FormattedMessage.FromMarkupOrThrow(Loc.GetString("surgery-tool-header")); msg.PushNewline(); var ev = new SurgeryToolExaminedEvent(msg); RaiseLocalEvent(ent, ref ev); _examine.AddDetailedExamineVerb(args, ent.Comp, ev.Message, Loc.GetString("surgery-tool-examinable-verb-text"), "/Textures/Objects/Specific/Medical/Surgery/scalpel.rsi/scalpel.png", Loc.GetString("surgery-tool-examinable-verb-message")); } private void OnExamined(EntityUid uid, ISurgeryToolComponent comp, ref SurgeryToolExaminedEvent args) { var msg = args.Message; var color = comp.Speed switch { < 1f => "red", > 1f => "green", _ => "white" }; var key = "surgery-tool-" + (comp.Used == true ? "used" : "unlimited"); var speed = comp.Speed.ToString("N2"); // 2 decimal places to not get trolled by float msg.PushMarkup(Loc.GetString(key, ("tool", comp.ToolName), ("speed", speed), ("color", color))); } } [ByRefEvent] public record struct SurgeryToolExaminedEvent(FormattedMessage Message);