private void OnOutletInjectorUpdated(EntityUid uid, GasOutletInjectorComponent injector, AtmosDeviceUpdateEvent args) { injector.Injecting = false; if (!injector.Enabled) { return; } if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) { return; } if (!nodeContainer.TryGetNode(injector.InletName, out PipeNode? inlet)) { return; } var environment = _atmosphereSystem.GetTileMixture(injector.Owner.Transform.Coordinates, true); if (environment == null) { return; } if (inlet.Air.Temperature > 0) { var transferMoles = inlet.Air.Pressure * injector.VolumeRate / (inlet.Air.Temperature * Atmospherics.R); var removed = inlet.Air.Remove(transferMoles); _atmosphereSystem.Merge(environment, removed); } }
public void UpdateAppearance(GasOutletInjectorComponent component, AppearanceComponent?appearance = null) { if (!Resolve(component.Owner, ref appearance, false)) { return; } appearance.SetData(OutletInjectorVisuals.Enabled, component.Enabled); }
private void OnOutletInjectorUpdated(EntityUid uid, GasOutletInjectorComponent injector, AtmosDeviceUpdateEvent args) { if (!injector.Enabled) { return; } if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) { return; } if (!TryComp(uid, out AtmosDeviceComponent? device)) { return; } if (!nodeContainer.TryGetNode(injector.InletName, out PipeNode? inlet)) { return; } var environment = _atmosphereSystem.GetTileMixture(EntityManager.GetComponent <TransformComponent>(injector.Owner).Coordinates, true); if (environment == null) { return; } if (inlet.Air.Temperature < 0) { return; } if (environment.Pressure > injector.MaxPressure) { return; } var timeDelta = (float)(_gameTiming.CurTime - device.LastProcess).TotalSeconds; // TODO adjust ratio so that environment does not go above MaxPressure? var ratio = MathF.Min(1f, timeDelta * injector.TransferRate / inlet.Air.Volume); var removed = inlet.Air.RemoveRatio(ratio); _atmosphereSystem.Merge(environment, removed); }
private void OnActivate(EntityUid uid, GasOutletInjectorComponent component, ActivateInWorldEvent args) { component.Enabled = !component.Enabled; UpdateAppearance(component); }
private void OnMapInit(EntityUid uid, GasOutletInjectorComponent component, MapInitEvent args) { UpdateAppearance(component); }