public float GetFeltLowPressure(BarotraumaComponent baro, float environmentPressure) { var modifier = float.MaxValue; var multiplier = float.MaxValue; TryComp(baro.Owner, out InventoryComponent? inv); TryComp(baro.Owner, out ContainerManagerComponent? contMan); // TODO: cache this & update when equipment changes? // This continuously raises events for every player in space. // First, check if for protective equipment foreach (var slot in baro.ProtectionSlots) { if (!_inventorySystem.TryGetSlotEntity(baro.Owner, slot, out var equipment, inv, contMan) || !TryComp(equipment, out PressureProtectionComponent? protection)) { // Missing protection, skin is exposed. modifier = 0; multiplier = 1; break; } modifier = Math.Min(protection.LowPressureModifier, modifier); multiplier = Math.Min(protection.LowPressureMultiplier, multiplier); } // Then apply any generic, non-clothing related modifiers. var lowPressureEvent = new LowPressureEvent(environmentPressure); RaiseLocalEvent(baro.Owner, lowPressureEvent, false); return((environmentPressure + modifier + lowPressureEvent.Modifier) * (multiplier * lowPressureEvent.Multiplier)); }
public float GetFeltLowPressure(EntityUid uid, float environmentPressure) { var lowPressureEvent = new LowPressureEvent(environmentPressure); RaiseLocalEvent(uid, lowPressureEvent, false); return(CalculateFeltPressure(environmentPressure, lowPressureEvent)); }
/// <summary> /// Completely prevent low pressure damage /// </summary> private void OnLowPressureImmuneEvent(EntityUid uid, PressureImmunityComponent component, LowPressureEvent args) { args.Modifier = 100; args.Multiplier = 10000; }
private void OnLowPressureEvent(EntityUid uid, PressureProtectionComponent component, LowPressureEvent args) { args.Modifier += component.LowPressureModifier; args.Multiplier *= component.LowPressureMultiplier; }
private void OnLowPressureEvent(EntityUid uid, InventoryComponent component, LowPressureEvent args) { RelayInventoryEvent(component, args); }