temperaturedata.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. class TemperatureData
  2. {
  3. ETemperatureAccessTypes m_AccessType;
  4. float m_Value; //target or increment, depends on context!
  5. float m_AdjustedTarget; //actual target of the operation (can be adjusted via over-time interpolation, not necessarily the original target value!)
  6. float m_UpdateTimeInfo; //if the temperature change was accumulated over some time, pass this info to temperature subsystems
  7. float m_UpdateTimeCoef; //multiplies the time
  8. float m_HeatPermeabilityCoef; //permeability multiplier (modifies change speed).
  9. float m_InterpolatedStepSize; //only useful for interpolated temperature values
  10. float m_InterpolatedFraction; //only useful for interpolated temperature values
  11. void TemperatureData(float val, ETemperatureAccessTypes accessType = ETemperatureAccessTypes.ACCESS_UNKNOWN, float time = -1, float timeCoef = 1, float heatPermCoef = 1)
  12. {
  13. m_Value = val;
  14. m_AdjustedTarget = val;
  15. m_AccessType = accessType;
  16. m_UpdateTimeInfo = time;
  17. m_UpdateTimeCoef = timeCoef;
  18. m_HeatPermeabilityCoef = heatPermCoef;
  19. Init();
  20. }
  21. protected void Init()
  22. {
  23. m_InterpolatedFraction = 0.0;
  24. }
  25. }
  26. class TemperatureDataInterpolated : TemperatureData
  27. {
  28. void InterpolateTemperatureDelta(float start)
  29. {
  30. m_InterpolatedStepSize = -1;
  31. float target = m_Value;
  32. m_AdjustedTarget = start;
  33. if (start != target)
  34. {
  35. float diffAbs = Math.Max(start,target) - Math.Min(start,target);
  36. m_InterpolatedFraction = Math.Clamp(Math.InverseLerp(GameConstants.TEMPERATURE_INTERPOLATION_THRESHOLD_MIN_ABS,GameConstants.TEMPERATURE_INTERPOLATION_THRESHOLD_MAX_ABS,diffAbs),0,1);
  37. m_InterpolatedStepSize = Math.Lerp(GameConstants.TEMPERATURE_RATE_AVERAGE_ABS,GameConstants.TEMPERATURE_RATE_MAX_ABS,m_InterpolatedFraction);
  38. float coef = m_UpdateTimeCoef;
  39. float absBaseTempChange = m_UpdateTimeInfo * m_InterpolatedStepSize;
  40. if (start > target)
  41. {
  42. absBaseTempChange *= -1;
  43. coef = GameConstants.TEMP_COEF_COOLING_GLOBAL;
  44. }
  45. coef *= m_HeatPermeabilityCoef;
  46. absBaseTempChange *= coef;
  47. m_AdjustedTarget = start + Math.Clamp(absBaseTempChange,-diffAbs,diffAbs);
  48. }
  49. }
  50. }