using Content.Shared.Atmos; using Content.Shared.Damage; using Robust.Shared.GameObjects; using Robust.Shared.Physics; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Server.Temperature.Components { /// /// Handles changing temperature, /// informing others of the current temperature, /// and taking fire damage from high temperature. /// [RegisterComponent] public class TemperatureComponent : Component { /// public override string Name => "Temperature"; [DataField("heatDamageThreshold")] private float _heatDamageThreshold = default; [DataField("coldDamageThreshold")] private float _coldDamageThreshold = default; [DataField("tempDamageCoefficient")] private float _tempDamageCoefficient = 1; [DataField("currentTemperature")] public float CurrentTemperature { get; set; } = Atmospherics.T20C; [DataField("specificHeat")] private float _specificHeat = Atmospherics.MinimumHeatCapacity; [ViewVariables] public float HeatDamageThreshold => _heatDamageThreshold; [ViewVariables] public float ColdDamageThreshold => _coldDamageThreshold; [ViewVariables] public float TempDamageCoefficient => _tempDamageCoefficient; [ViewVariables] public float SpecificHeat => _specificHeat; [ViewVariables] public float HeatCapacity { get { if (Owner.TryGetComponent(out var physics)) { return SpecificHeat * physics.Mass; } return Atmospherics.MinimumHeatCapacity; } } [DataField("coldDamage", required: true)] [ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier ColdDamage = default!; [DataField("heatDamage", required: true)] [ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier HeatDamage = default!; } }