private void OnToggleStatusMessage(EntityUid uid, GasVolumePumpComponent pump, GasVolumePumpToggleStatusMessage args) { pump.Enabled = args.Enabled; _adminLogSystem.Add(LogType.AtmosPowerChanged, LogImpact.Medium, $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the power on {ToPrettyString(uid):device} to {args.Enabled}"); DirtyUI(uid, pump); }
private void OnTransferRateChangeMessage(EntityUid uid, GasVolumePumpComponent pump, GasVolumePumpChangeTransferRateMessage args) { pump.TransferRate = Math.Clamp(args.TransferRate, 0f, pump.MaxTransferRate); _adminLogSystem.Add(LogType.AtmosVolumeChanged, LogImpact.Medium, $"{ToPrettyString(args.Session.AttachedEntity!.Value):player} set the transfer rate on {ToPrettyString(uid):device} to {args.TransferRate}"); DirtyUI(uid, pump); }
private void OnVolumePumpLeaveAtmosphere(EntityUid uid, GasVolumePumpComponent pump, AtmosDeviceDisabledEvent args) { pump.Enabled = false; UpdateAppearance(uid, pump); DirtyUI(uid, pump); _userInterfaceSystem.TryCloseAll(uid, GasVolumePumpUiKey.Key); }
private void OnVolumePumpUpdated(EntityUid uid, GasVolumePumpComponent pump, AtmosDeviceUpdateEvent args) { if (!pump.Enabled) { return; } if (!ComponentManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) { return; } if (!ComponentManager.TryGetComponent(uid, out AtmosDeviceComponent? device)) { return; } if (!nodeContainer.TryGetNode(pump.InletName, out PipeNode? inlet) || !nodeContainer.TryGetNode(pump.OutletName, out PipeNode? outlet)) { return; } var inputStartingPressure = inlet.Air.Pressure; var outputStartingPressure = outlet.Air.Pressure; // Pump mechanism won't do anything if the pressure is too high/too low unless you overclock it. if ((inputStartingPressure < pump.LowerThreshold) || (outputStartingPressure > pump.HigherThreshold) && !pump.Overclocked) { return; } // Overclocked pumps can only force gas a certain amount. if ((outputStartingPressure - inputStartingPressure > pump.OverclockThreshold) && pump.Overclocked) { return; } // We multiply the transfer rate in L/s by the seconds passed since the last process to get the liters. var transferRatio = (float)(pump.TransferRate * (_gameTiming.CurTime - device.LastProcess).TotalSeconds) / inlet.Air.Volume; var removed = inlet.Air.RemoveRatio(transferRatio); // Some of the gas from the mixture leaks when overclocked. if (pump.Overclocked) { var atmosphereSystem = Get <AtmosphereSystem>(); var tile = atmosphereSystem.GetTileMixture(pump.Owner.Transform.Coordinates, true); if (tile != null) { var leaked = removed.RemoveRatio(pump.LeakRatio); atmosphereSystem.Merge(tile, leaked); } } outlet.AssumeAir(removed); }
private void OnVolumePumpUpdated(EntityUid uid, GasVolumePumpComponent pump, AtmosDeviceUpdateEvent args) { if (!pump.Enabled || !TryComp(uid, out NodeContainerComponent? nodeContainer) || !TryComp(uid, out AtmosDeviceComponent? device) || !nodeContainer.TryGetNode(pump.InletName, out PipeNode? inlet) || !nodeContainer.TryGetNode(pump.OutletName, out PipeNode? outlet)) { _ambientSoundSystem.SetAmbience(uid, false); return; } var inputStartingPressure = inlet.Air.Pressure; var outputStartingPressure = outlet.Air.Pressure; // Pump mechanism won't do anything if the pressure is too high/too low unless you overclock it. if ((inputStartingPressure < pump.LowerThreshold) || (outputStartingPressure > pump.HigherThreshold) && !pump.Overclocked) { return; } // Overclocked pumps can only force gas a certain amount. if ((outputStartingPressure - inputStartingPressure > pump.OverclockThreshold) && pump.Overclocked) { return; } // We multiply the transfer rate in L/s by the seconds passed since the last process to get the liters. var transferRatio = (float)(pump.TransferRate * (_gameTiming.CurTime - device.LastProcess).TotalSeconds) / inlet.Air.Volume; var removed = inlet.Air.RemoveRatio(transferRatio); // Some of the gas from the mixture leaks when overclocked. if (pump.Overclocked) { var transform = Transform(uid); var indices = _transformSystem.GetGridOrMapTilePosition(uid, transform); var tile = _atmosphereSystem.GetTileMixture(transform.GridUid, null, indices, true); if (tile != null) { var leaked = removed.RemoveRatio(pump.LeakRatio); _atmosphereSystem.Merge(tile, leaked); } } _atmosphereSystem.Merge(outlet.Air, removed); _ambientSoundSystem.SetAmbience(uid, removed.TotalMoles > 0f); }
private void OnExamined(EntityUid uid, GasVolumePumpComponent pump, ExaminedEvent args) { if (!EntityManager.GetComponent <TransformComponent>(pump.Owner).Anchored || !args.IsInDetailsRange) // Not anchored? Out of range? No status. { return; } if (Loc.TryGetString("gas-volume-pump-system-examined", out var str, ("statusColor", "lightblue"), // TODO: change with volume? ("rate", pump.TransferRate) )) { args.PushMarkup(str); } }
private void OnPumpInteractHand(EntityUid uid, GasVolumePumpComponent component, InteractHandEvent args) { if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) { return; } if (EntityManager.GetComponent <TransformComponent>(component.Owner).Anchored) { _userInterfaceSystem.TryOpen(uid, GasVolumePumpUiKey.Key, actor.PlayerSession); DirtyUI(uid, component); } else { args.User.PopupMessageCursor(Loc.GetString("comp-gas-pump-ui-needs-anchor")); } args.Handled = true; }
private void OnInit(EntityUid uid, GasVolumePumpComponent pump, ComponentInit args) { UpdateAppearance(uid, pump); }
private void OnTransferRateChangeMessage(EntityUid uid, GasVolumePumpComponent pump, GasVolumePumpChangeTransferRateMessage args) { pump.TransferRate = Math.Clamp(args.TransferRate, 0f, Atmospherics.MaxTransferRate); DirtyUI(uid, pump); }
private void OnToggleStatusMessage(EntityUid uid, GasVolumePumpComponent pump, GasVolumePumpToggleStatusMessage args) { pump.Enabled = args.Enabled; DirtyUI(uid, pump); }