private void OnVentScrubberUpdated(EntityUid uid, GasVentScrubberComponent scrubber, AtmosDeviceUpdateEvent args) { var appearance = scrubber.Owner.GetComponentOrNull <AppearanceComponent>(); if (scrubber.Welded) { appearance?.SetData(ScrubberVisuals.State, ScrubberState.Welded); return; } if (!scrubber.Enabled || !ComponentManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !nodeContainer.TryGetNode(scrubber.OutletName, out PipeNode? outlet)) { appearance?.SetData(ScrubberVisuals.State, ScrubberState.Off); return; } var environment = _atmosphereSystem.GetTileMixture(scrubber.Owner.Transform.Coordinates, true); Scrub(_atmosphereSystem, scrubber, appearance, environment, outlet); if (!scrubber.WideNet) { return; } // Scrub adjacent tiles too. foreach (var adjacent in _atmosphereSystem.GetAdjacentTileMixtures(scrubber.Owner.Transform.Coordinates, false, true)) { Scrub(_atmosphereSystem, scrubber, null, adjacent, outlet); } }
private void OnDeviceUpdated(EntityUid uid, PortableScrubberComponent component, AtmosDeviceUpdateEvent args) { if (!TryComp(uid, out AtmosDeviceComponent? device)) { return; } var timeDelta = (float)(_gameTiming.CurTime - device.LastProcess).TotalSeconds; if (!component.Enabled) { return; } /// If we are on top of a connector port, empty into it. if (TryComp <NodeContainerComponent>(uid, out var nodeContainer) && nodeContainer.TryGetNode(component.PortName, out PortablePipeNode? portableNode) && portableNode.ConnectionsEnabled) { _atmosphereSystem.React(component.Air, portableNode); if (portableNode.NodeGroup is PipeNet { NodeCount : > 1 } net) { _canisterSystem.MixContainerWithPipeNet(component.Air, net.Air); } } if (component.Full) { UpdateAppearance(uid, true, false); return; } var xform = Transform(uid); if (xform.GridUid == null) { return; } var position = _transformSystem.GetGridOrMapTilePosition(uid, xform); var environment = _atmosphereSystem.GetTileMixture(xform.GridUid, xform.MapUid, position, true); var running = Scrub(timeDelta, component, environment); UpdateAppearance(uid, false, running); /// We scrub once to see if we can and set the animation if (!running) { return; } /// widenet foreach (var adjacent in _atmosphereSystem.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true)) { Scrub(timeDelta, component, environment); } }
private void OnVentScrubberUpdated(EntityUid uid, GasVentScrubberComponent scrubber, AtmosDeviceUpdateEvent args) { if (scrubber.Welded) { return; } if (!TryComp(uid, out AtmosDeviceComponent? device)) { return; } var timeDelta = (float)(_gameTiming.CurTime - device.LastProcess).TotalSeconds; if (!scrubber.Enabled || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !nodeContainer.TryGetNode(scrubber.OutletName, out PipeNode? outlet)) { return; } var xform = Transform(uid); if (xform.GridUid == null) { return; } var position = _transformSystem.GetGridOrMapTilePosition(uid, xform); var environment = _atmosphereSystem.GetTileMixture(xform.GridUid, xform.MapUid, position, true); Scrub(timeDelta, scrubber, environment, outlet); if (!scrubber.WideNet) { return; } // Scrub adjacent tiles too. foreach (var adjacent in _atmosphereSystem.GetAdjacentTileMixtures(xform.GridUid.Value, position, false, true)) { Scrub(timeDelta, scrubber, adjacent, outlet); } }
private void OnVentScrubberUpdated(EntityUid uid, GasVentScrubberComponent scrubber, AtmosDeviceUpdateEvent args) { var appearance = EntityManager.GetComponentOrNull <AppearanceComponent>(scrubber.Owner); if (scrubber.Welded) { appearance?.SetData(ScrubberVisuals.State, ScrubberState.Welded); _ambientSoundSystem.SetAmbience(scrubber.Owner, false); return; } if (!TryComp(uid, out AtmosDeviceComponent? device)) { return; } var timeDelta = (float)(_gameTiming.CurTime - device.LastProcess).TotalSeconds; if (!scrubber.Enabled || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !nodeContainer.TryGetNode(scrubber.OutletName, out PipeNode? outlet)) { appearance?.SetData(ScrubberVisuals.State, ScrubberState.Off); _ambientSoundSystem.SetAmbience(scrubber.Owner, false); return; } _ambientSoundSystem.SetAmbience(scrubber.Owner, true); var environment = _atmosphereSystem.GetTileMixture(EntityManager.GetComponent <TransformComponent>(scrubber.Owner).Coordinates, true); Scrub(timeDelta, scrubber, appearance, environment, outlet); if (!scrubber.WideNet) { return; } // Scrub adjacent tiles too. foreach (var adjacent in _atmosphereSystem.GetAdjacentTileMixtures(EntityManager.GetComponent <TransformComponent>(scrubber.Owner).Coordinates, false, true)) { Scrub(timeDelta, scrubber, null, adjacent, outlet); } }
private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args) { var transform = Transform(uid); var center = _atmosphereSystem.GetTileMixture(transform.Coordinates, true); if (center == null) { return; } UpdateTileTemperature(component, center); if (component.EffectAdjacentTiles) { var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.Coordinates, invalidate: true); foreach (var mixture in adjacent) { UpdateTileTemperature(component, mixture); } } }
private void OnActivate(EntityUid uid, TemperatureArtifactComponent component, ArtifactActivatedEvent args) { var transform = Transform(uid); var center = _atmosphereSystem.GetContainingMixture(uid, false, true); if (center == null) { return; } UpdateTileTemperature(component, center); if (component.EffectAdjacentTiles && transform.GridUid != null) { var adjacent = _atmosphereSystem.GetAdjacentTileMixtures(transform.GridUid.Value, _transformSystem.GetGridOrMapTilePosition(uid, transform), excite: true); foreach (var mixture in adjacent) { UpdateTileTemperature(component, mixture); } } }