TemperatureData.c
class TemperatureData
{
ETemperatureAccessTypes m_AccessType;
bool m_UseGlobalCooling;
float m_Value; //target or increment, depends on context!
float m_AdjustedTarget; //actual target of the operation (can be adjusted via over-time interpolation, not necessarily the original target value!)
float m_UpdateTimeInfo; //if the temperature change was accumulated over some time, pass this info to temperature subsystems
float m_UpdateTimeCoef; //multiplies the time
float m_HeatPermeabilityCoef; //permeability multiplier (modifies change speed).
float m_InterpolatedStepSize; //only useful for interpolated temperature values
float m_InterpolatedFraction; //only useful for interpolated temperature values
void TemperatureData(float val, ETemperatureAccessTypes accessType = ETemperatureAccessTypes.ACCESS_UNKNOWN, float time = -1, float timeCoef = 1, float heatPermCoef = 1)
{
m_Value = val;
m_AdjustedTarget = val;
m_AccessType = accessType;
m_UpdateTimeInfo = time;
m_UpdateTimeCoef = timeCoef;
m_HeatPermeabilityCoef = heatPermCoef;
Init();
}
protected void Init()
{
m_UseGlobalCooling = true;
m_InterpolatedFraction = 0.0;
}
}
class TemperatureDataInterpolated : TemperatureData
{
void InterpolateTemperatureDelta(float start)
{
m_InterpolatedStepSize = -1;
float target = m_Value;
m_AdjustedTarget = start;
if (start != target)
{
float diffAbs = Math.Max(start,target) - Math.Min(start,target);
m_InterpolatedFraction = Math.Clamp(Math.InverseLerp(GameConstants.TEMPERATURE_INTERPOLATION_THRESHOLD_MIN_ABS,GameConstants.TEMPERATURE_INTERPOLATION_THRESHOLD_MAX_ABS,diffAbs),0,1);
m_InterpolatedStepSize = Math.Lerp(GameConstants.TEMPERATURE_RATE_AVERAGE_ABS,GameConstants.TEMPERATURE_RATE_MAX_ABS,m_InterpolatedFraction);
float coef = m_UpdateTimeCoef;
float absBaseTempChange = m_UpdateTimeInfo * m_InterpolatedStepSize;
if (start > target)
{
absBaseTempChange *= -1;
if (m_UseGlobalCooling)
coef = GameConstants.TEMP_COEF_COOLING_GLOBAL;
}
coef *= m_HeatPermeabilityCoef;
absBaseTempChange *= coef;
m_AdjustedTarget = start + Math.Clamp(absBaseTempChange,-diffAbs,diffAbs);
}
}
}