using Content.Shared.Alert; using Content.Shared.Atmos; using Content.Shared.Damage; using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; namespace Content.Server.Temperature.Components; /// /// Handles changing temperature, /// informing others of the current temperature, /// and taking fire damage from high temperature. /// [RegisterComponent] public sealed partial class TemperatureComponent : Component { /// /// Surface temperature which is modified by the environment. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float CurrentTemperature = Atmospherics.T20C; [DataField, ViewVariables(VVAccess.ReadWrite)] public float HeatDamageThreshold = 360f; [DataField, ViewVariables(VVAccess.ReadWrite)] public float ColdDamageThreshold = 260f; /// /// Overrides HeatDamageThreshold if the entity's within a parent with the TemperatureDamageThresholdsComponent component. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float? ParentHeatDamageThreshold; /// /// Overrides ColdDamageThreshold if the entity's within a parent with the TemperatureDamageThresholdsComponent component. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float? ParentColdDamageThreshold; /// /// Heat capacity per kg of mass. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float SpecificHeat = 50f; /// /// How well does the air surrounding you merge into your body temperature? /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float AtmosTemperatureTransferEfficiency = 0.1f; [DataField, ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier ColdDamage = new(); [DataField, ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier HeatDamage = new(); /// /// Temperature won't do more than this amount of damage per second. /// /// /// Okay it genuinely reaches this basically immediately for a plasma fire. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public FixedPoint2 DamageCap = FixedPoint2.New(8); /// /// Used to keep track of when damage starts/stops. Useful for logs. /// [DataField] public bool TakingDamage; [DataField] public ProtoId HotAlert = "Hot"; [DataField] public ProtoId ColdAlert = "Cold"; }