| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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<DamageExaminableComponent, GetVerbsEvent<ExamineVerb>>(OnGetExamineVerbs);
- }
- private void OnGetExamineVerbs(EntityUid uid, DamageExaminableComponent component, GetVerbsEvent<ExamineVerb> 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);
- }
- /// <summary>
- /// Retrieves the damage examine values.
- /// </summary>
- private FormattedMessage GetDamageExamine(DamageSpecifier damageSpecifier, string? type = null)
- {
- var msg = new FormattedMessage();
- if (string.IsNullOrEmpty(type))
- {
- msg.AddMarkupOrThrow(Loc.GetString("damage-examine"));
- }
- else
- {
- if (damageSpecifier.GetTotal() == FixedPoint2.Zero && !damageSpecifier.AnyPositive())
- {
- msg.AddMarkupOrThrow(Loc.GetString("damage-none"));
- return msg;
- }
- 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<DamageTypePrototype>(damage.Key).LocalizedName), ("amount", damage.Value)));
- }
- }
- return msg;
- }
- }
|