using Content.Shared.Mobs.Components; using Content.Shared.Storage.Components; using Content.Shared.Examine; using Content.Shared.Morgue.Components; using Robust.Shared.Player; namespace Content.Shared.Morgue; public abstract class SharedMorgueSystem : EntitySystem { [Dependency] private readonly SharedAppearanceSystem _appearance = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnExamine); SubscribeLocalEvent(OnClosed); SubscribeLocalEvent(OnOpened); } /// /// Handles the examination text for looking at a morgue. /// private void OnExamine(Entity ent, ref ExaminedEvent args) { if (!args.IsInDetailsRange) return; _appearance.TryGetData(ent.Owner, MorgueVisuals.Contents, out var contents); var text = contents switch { MorgueContents.HasSoul => "morgue-entity-storage-component-on-examine-details-body-has-soul", MorgueContents.HasContents => "morgue-entity-storage-component-on-examine-details-has-contents", MorgueContents.HasMob => "morgue-entity-storage-component-on-examine-details-body-has-no-soul", _ => "morgue-entity-storage-component-on-examine-details-empty" }; args.PushMarkup(Loc.GetString(text)); } private void OnClosed(Entity ent, ref StorageAfterCloseEvent args) { CheckContents(ent.Owner, ent.Comp); } private void OnOpened(Entity ent, ref StorageAfterOpenEvent args) { CheckContents(ent.Owner, ent.Comp); } /// /// Updates data in case something died/got deleted in the morgue. /// public void CheckContents(EntityUid uid, MorgueComponent? morgue = null, EntityStorageComponent? storage = null, AppearanceComponent? app = null) { if (!Resolve(uid, ref morgue, ref storage, ref app)) return; if (storage.Contents.ContainedEntities.Count == 0) { _appearance.SetData(uid, MorgueVisuals.Contents, MorgueContents.Empty, app); return; } var hasMob = false; foreach (var ent in storage.Contents.ContainedEntities) { if (!hasMob && HasComp(ent)) hasMob = true; if (HasComp(ent)) { _appearance.SetData(uid, MorgueVisuals.Contents, MorgueContents.HasSoul, app); return; } } _appearance.SetData(uid, MorgueVisuals.Contents, hasMob ? MorgueContents.HasMob : MorgueContents.HasContents, app); } }