using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; using Content.Shared.Damage.Prototypes; using Content.Shared.Examine; using Content.Shared.FixedPoint; using Content.Shared.Verbs; using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Shared.Damage.Systems; public sealed class DamageExamineSystem : EntitySystem { [Dependency] private readonly ExamineSystemShared _examine = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent>(OnGetExamineVerbs); } private void OnGetExamineVerbs(EntityUid uid, DamageExaminableComponent component, GetVerbsEvent args) { if (!args.CanInteract || !args.CanAccess) return; var ev = new DamageExamineEvent(new FormattedMessage(), args.User); RaiseLocalEvent(uid, ref ev); if (!ev.Message.IsEmpty) { _examine.AddDetailedExamineVerb(args, component, ev.Message, Loc.GetString("damage-examinable-verb-text"), "/Textures/Interface/VerbIcons/smite.svg.192dpi.png", Loc.GetString("damage-examinable-verb-message") ); } } public void AddDamageExamine(FormattedMessage message, DamageSpecifier damageSpecifier, string? type = null) { var markup = GetDamageExamine(damageSpecifier, type); if (!message.IsEmpty) { message.PushNewline(); } message.AddMessage(markup); } /// /// Retrieves the damage examine values. /// private FormattedMessage GetDamageExamine(DamageSpecifier damageSpecifier, string? type = null) { var msg = new FormattedMessage(); if (string.IsNullOrEmpty(type)) { msg.AddMarkupOrThrow(Loc.GetString("damage-examine")); } else { msg.AddMarkupOrThrow(Loc.GetString("damage-examine-type", ("type", type))); } foreach (var damage in damageSpecifier.DamageDict) { if (damage.Value != FixedPoint2.Zero) { msg.PushNewline(); msg.AddMarkupOrThrow(Loc.GetString("damage-value", ("type", _prototype.Index(damage.Key).LocalizedName), ("amount", damage.Value))); } } return msg; } }