DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ ProcessHeatBuffer() [1/2]

void ProcessHeatBuffer ( EnvironmentSnapshotData data)
protected

dynamic HB cap based on actual heatcomfort (from cloths)

deplete the heat buffer if there is difference in HB capacity (eg.: cloths were removed)

См. определение в файле Environment.c строка 1102

1103 {
1105 {
1106 float applicableHeatbuffer = GetApplicableHeatbuffer();
1107
1109 float heatBufferCap = Math.InverseLerp(0.0, GameConstants.ENVIRO_HEATCOMFORT_WEIGHT_SUMMARY, data.m_ClothingHeatComfort);
1111 m_Player.SetHeatBufferDynamicMax(heatBufferMax);
1112
1113 PlayerStat<float> heatBuffer = m_Player.GetStatHeatBuffer();
1114
1116 if (heatBufferCap < m_HeatBufferCapPrevious)
1117 {
1118 float heatBufferValueCorrection = GameConstants.ENVIRO_PLAYER_HEATBUFFER_INCREASE / (heatBufferMax * ((-GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
1119 heatBuffer.Add(-heatBufferValueCorrection);
1120 m_HeatBufferCapPrevious = heatBufferCap;
1121 }
1122
1123 float increaseRate = 0.0;
1124 float decreaseRate = 0.0;
1125
1126 {
1127 increaseRate = GameConstants.ENVIRO_PLAYER_HEATBUFFER_INCREASE / (heatBufferMax * (( -GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
1128 decreaseRate = GameConstants.ENVIRO_PLAYER_HEATBUFFER_DECREASE / (heatBufferMax * (( GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
1129
1130 float decreaseRateByHeatBufferStageCoef = 1;
1131
1132 if (heatBufferMax > HeatBufferMdfr.STAGE_THRESHOLDS[1])
1133 {
1134 float heatBufferMaxInversed = Math.InverseLerp(HeatBufferMdfr.STAGE_THRESHOLDS[1], 1.0, heatBufferMax);
1135 switch (m_Player.GetHeatBufferStage())
1136 {
1137 case 2:
1138 decreaseRateByHeatBufferStageCoef = Math.Lerp(
1141 heatBufferMaxInversed,
1142 );
1143 break;
1144 case 1:
1145 decreaseRateByHeatBufferStageCoef = Math.Lerp(
1148 heatBufferMaxInversed,
1149 );
1150 break;
1151 }
1152 }
1153 else
1154 {
1155 decreaseRateByHeatBufferStageCoef = GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[1][0];
1156 }
1157
1158 decreaseRate *= decreaseRateByHeatBufferStageCoef;
1159
1160 if (m_IsInWater)
1162 }
1163
1165 {
1166 if (m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1167 {
1168 if (m_HeatBufferTimer >= 1.0)
1169 heatBuffer.Add(-decreaseRate);
1170 else
1171 m_HeatBufferTimer = 1.0;
1172 }
1173 else
1174 {
1175 m_HeatBufferTimer = 0.0;
1176 if (applicableHeatbuffer > 0.0)
1177 heatBuffer.Add(-decreaseRate);
1178 else if (applicableHeatbuffer != 0.0 && !m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1179 heatBuffer.Set(0.0);
1180 }
1181 }
1182 else
1183 {
1184 if (m_HeatComfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING && m_UTSAverageTemperature > 0) // m_UTSAverageTemperature can be negative
1185 {
1186 if (applicableHeatbuffer < heatBufferMax)
1187 {
1188 heatBuffer.Add(increaseRate);
1189 m_HeatBufferCapPrevious = heatBufferCap;
1190 }
1191 }
1192 else if (applicableHeatbuffer > 0.0)
1193 heatBuffer.Add(-decreaseRate);
1194 else if (applicableHeatbuffer != 0.0 && !m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1195 heatBuffer.Set(0.0);
1196
1197 m_HeatBufferTimer = 0.0;
1198 }
1199 }
1200 }
bool m_IsInWater
Определения Environment.c:70
int m_HeatComfortBehaviorCategory
Определения Environment.c:93
float m_HeatBufferTimer
Определения Environment.c:73
float m_UTSAverageTemperature
Определения Environment.c:88
float GetApplicableHeatbuffer()
Определения Environment.c:1202
float m_HeatComfort
Определения Environment.c:48
EEnvironmentHeatcomfortBehaviorCategory
Categories that are changing behavior of Heat comfort processing.
Определения Environment.c:5
float m_HeatBufferCapPrevious
reused as state toggle
Определения Environment.c:74
float m_WaterLevel
Определения Environment.c:67
bool m_HasTemperatureSources
Определения Environment.c:87
DayZPlayer m_Player
Определения Hand_Events.c:42
void PlayerStat(T min, T max, T init, string label, int flags)
Определения PlayerStatBase.c:43
const float STAGE_THRESHOLDS[NUMBER_OF_STAGES]
Определения HeatBuffer.c:4
Определения HeatBuffer.c:2
Определения EnMath.c:7
static const float THRESHOLD_HEAT_COMFORT_MINUS_WARNING
Определения PlayerConstants.c:92
Определения PlayerConstants.c:2
eModifiers
Определения eModifiers.c:2
const float ENVIRO_PLAYER_HEATBUFFER_CAPACITY_MIN
How much heat buffer change rates are affected by temperature.
Определения 3_Game/constants.c:762
const float ENVIRO_PLAYER_HEATBUFFER_WATEREFFECT
impact of enviro temperature on player (lower value = higher, cannot be zero or below!...
Определения 3_Game/constants.c:758
static const float ENVIRO_HEATCOMFORT_WEIGHT_SUMMARY
don't forget to update the weights from above if you are adding/removing them
Определения 3_Game/constants.c:751
const float ENVIRO_PLAYER_HEATBUFFER_DECREASE
impact of water contact on player's heatbuffer
Определения 3_Game/constants.c:759
const float ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT
How much heat buffer increases per one enviro tick.
Определения 3_Game/constants.c:761
const float ENVIRO_PLAYER_HEATBUFFER_INCREASE
How much heat buffer decreases per one enviro tick.
Определения 3_Game/constants.c:760
static ref array< ref TFloatArray > ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT
Minimal heatbuffer capacity of naked character.
Определения 3_Game/constants.c:765
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...

Перекрестные ссылки GameConstants::ENVIRO_HEATCOMFORT_WEIGHT_SUMMARY, GameConstants::ENVIRO_PLAYER_HEATBUFFER_CAPACITY_MIN, GameConstants::ENVIRO_PLAYER_HEATBUFFER_DECREASE, GameConstants::ENVIRO_PLAYER_HEATBUFFER_INCREASE, GameConstants::ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT, GameConstants::ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT, GameConstants::ENVIRO_PLAYER_HEATBUFFER_WATEREFFECT, GetApplicableHeatbuffer(), Math::InverseLerp(), Math::Lerp(), m_HasTemperatureSources, m_HeatBufferCapPrevious, m_HeatBufferTimer, m_HeatComfort, m_HeatComfortBehaviorCategory, m_IsInWater, m_Player, m_UTSAverageTemperature, m_WaterLevel, PlayerStat(), HeatBufferMdfr::STAGE_THRESHOLDS и PlayerConstants::THRESHOLD_HEAT_COMFORT_MINUS_WARNING.

Используется в ProcessHeatBuffer() и ProcessHeatComfort().