/// <summary> /// Check whether the target's mouth is blocked by equipment (masks or head-wear). /// </summary> /// <param name="uid">The target whose equipment is checked</param> /// <param name="popupUid">Optional entity that will receive an informative pop-up identifying the blocking /// piece of equipment.</param> /// <returns></returns> public bool IsMouthBlocked(EntityUid uid, EntityUid?popupUid = null) { var attempt = new IngestionAttemptEvent(); RaiseLocalEvent(uid, attempt, false); if (attempt.Cancelled && attempt.Blocker != null && popupUid != null) { var name = EntityManager.GetComponent <MetaDataComponent>(attempt.Blocker.Value).EntityName; _popupSystem.PopupEntity(Loc.GetString("food-system-remove-mask", ("entity", name)), uid, Filter.Entities(popupUid.Value)); } return(attempt.Cancelled); }
/// <summary> /// Block ingestion attempts based on the equipped mask or head-wear /// </summary> private void OnInventoryIngestAttempt(EntityUid uid, InventoryComponent component, IngestionAttemptEvent args) { if (args.Cancelled) { return; } IngestionBlockerComponent blocker; if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && EntityManager.TryGetComponent(maskUid, out blocker) && blocker.Enabled) { args.Blocker = maskUid; args.Cancel(); return; } if (_inventorySystem.TryGetSlotEntity(uid, "head", out var headUid) && EntityManager.TryGetComponent(headUid, out blocker) && blocker.Enabled) { args.Blocker = headUid; args.Cancel(); } }
/// <summary> /// Block ingestion attempts based on the equipped mask or head-wear /// </summary> private void OnInventoryIngestAttempt(EntityUid uid, InventoryComponent component, IngestionAttemptEvent args) { if (args.Cancelled) { return; } IngestionBlockerComponent blocker; if (component.TryGetSlotItem(EquipmentSlotDefines.Slots.MASK, out ItemComponent? mask) && EntityManager.TryGetComponent(mask.Owner, out blocker) && blocker.Enabled) { args.Blocker = mask.Owner; args.Cancel(); return; } if (component.TryGetSlotItem(EquipmentSlotDefines.Slots.HEAD, out ItemComponent? head) && EntityManager.TryGetComponent(head.Owner, out blocker) && blocker.Enabled) { args.Blocker = head.Owner; args.Cancel(); } }