using Content.Server.Atmos.EntitySystems; using Content.Shared.Temperature; using Robust.Server.GameObjects; namespace Content.Server.IgnitionSource; /// /// This handles ignition, Jez basically coded this. /// /// public sealed class IgnitionSourceSystem : EntitySystem { /// /// [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly TransformSystem _transformSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnIsHot); } private void OnIsHot(EntityUid uid, IgnitionSourceComponent component, IsHotEvent args) { SetIgnited(uid, args.IsHot, component); } /// /// Simply sets the ignited field to the ignited param. /// public void SetIgnited(EntityUid uid, bool ignited = true, IgnitionSourceComponent? comp = null) { if (!Resolve(uid, ref comp)) return; comp.Ignited = ignited; } public override void Update(float frameTime) { base.Update(frameTime); foreach (var (component,transform) in EntityQuery()) { var source = component.Owner; if (!component.Ignited) continue; if (transform.GridUid is { } gridUid) { var position = _transformSystem.GetGridOrMapTilePosition(source, transform); _atmosphereSystem.HotspotExpose(gridUid, position, component.Temperature, 50, source, true); } } } }