| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using Content.Server.Atmos;
- using Content.Server.Atmos.EntitySystems;
- using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
- using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
- using Content.Shared.Atmos;
- using Robust.Server.GameObjects;
- namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems;
- public sealed class TemperatureArtifactSystem : EntitySystem
- {
- [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
- [Dependency] private readonly TransformSystem _transformSystem = default!;
- public override void Initialize()
- {
- base.Initialize();
- SubscribeLocalEvent<TemperatureArtifactComponent, ArtifactActivatedEvent>(OnActivate);
- }
- 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.AffectAdjacentTiles && transform.GridUid != null)
- {
- var enumerator = _atmosphereSystem.GetAdjacentTileMixtures(transform.GridUid.Value,
- _transformSystem.GetGridOrMapTilePosition(uid, transform), excite: true);
- while (enumerator.MoveNext(out var mixture))
- {
- UpdateTileTemperature(component, mixture);
- }
- }
- }
- private void UpdateTileTemperature(TemperatureArtifactComponent component, GasMixture environment)
- {
- var dif = component.TargetTemperature - environment.Temperature;
- var absDif = Math.Abs(dif);
- var step = Math.Min(absDif, component.SpawnTemperature);
- environment.Temperature += dif > 0 ? step : -step;
- }
- }
|