private void PerformHotspotExposure(TileAtmosphere tile) { if (tile.Air == null || !tile.Hotspot.Valid) { return; } tile.Hotspot.Bypassing = tile.Hotspot.SkippedFirstProcess && tile.Hotspot.Volume > tile.Air.Volume * 0.95f; if (tile.Hotspot.Bypassing) { tile.Hotspot.Volume = tile.Air.ReactionResults[GasReaction.Fire] * Atmospherics.FireGrowthRate; tile.Hotspot.Temperature = tile.Air.Temperature; } else { var affected = tile.Air.RemoveRatio(tile.Hotspot.Volume / tile.Air.Volume); affected.Temperature = tile.Hotspot.Temperature; React(affected, tile); tile.Hotspot.Temperature = affected.Temperature; tile.Hotspot.Volume = affected.ReactionResults[GasReaction.Fire] * Atmospherics.FireGrowthRate; Merge(tile.Air, affected); } var fireEvent = new TileFireEvent(tile.Hotspot.Temperature, tile.Hotspot.Volume); foreach (var entity in _lookup.GetEntitiesIntersecting(tile.GridIndex, tile.GridIndices)) { RaiseLocalEvent(entity, ref fireEvent, false); } }
private void OnTileFireEvent(EntityUid uid, FlammableComponent flammable, TileFireEvent args) { AdjustFireStacks(uid, 3, flammable); Ignite(uid, flammable); }