DayZ 1.29
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 строка 1105

1106 {
1108 {
1109 float applicableHeatbuffer = GetApplicableHeatbuffer();
1110
1112 float heatBufferCap = Math.InverseLerp(0.0, GameConstants.ENVIRO_HEATCOMFORT_WEIGHT_SUMMARY, data.m_ClothingHeatComfort);
1114 m_Player.SetHeatBufferDynamicMax(heatBufferMax);
1115
1116 PlayerStat<float> heatBuffer = m_Player.GetStatHeatBuffer();
1117
1119 if (heatBufferCap < m_HeatBufferCapPrevious)
1120 {
1121 float heatBufferValueCorrection = GameConstants.ENVIRO_PLAYER_HEATBUFFER_INCREASE / (heatBufferMax * ((-GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
1122 heatBuffer.Add(-heatBufferValueCorrection);
1123 m_HeatBufferCapPrevious = heatBufferCap;
1124 }
1125
1126 float increaseRate = 0.0;
1127 float decreaseRate = 0.0;
1128
1129 {
1130 increaseRate = GameConstants.ENVIRO_PLAYER_HEATBUFFER_INCREASE / (heatBufferMax * (( -GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
1131 decreaseRate = GameConstants.ENVIRO_PLAYER_HEATBUFFER_DECREASE / (heatBufferMax * (( GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
1132
1133 float decreaseRateByHeatBufferStageCoef = 1;
1134
1135 if (heatBufferMax > HeatBufferMdfr.STAGE_THRESHOLDS[1])
1136 {
1137 float heatBufferMaxInversed = Math.InverseLerp(HeatBufferMdfr.STAGE_THRESHOLDS[1], 1.0, heatBufferMax);
1138 switch (m_Player.GetHeatBufferStage())
1139 {
1140 case 2:
1141 decreaseRateByHeatBufferStageCoef = Math.Lerp(
1144 heatBufferMaxInversed,
1145 );
1146 break;
1147 case 1:
1148 decreaseRateByHeatBufferStageCoef = Math.Lerp(
1151 heatBufferMaxInversed,
1152 );
1153 break;
1154 }
1155 }
1156 else
1157 {
1158 decreaseRateByHeatBufferStageCoef = GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[1][0];
1159 }
1160
1161 decreaseRate *= decreaseRateByHeatBufferStageCoef;
1162
1163 if (m_IsInWater)
1165 }
1166
1168 {
1169 if (m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1170 {
1171 if (m_HeatBufferTimer >= 1.0)
1172 heatBuffer.Add(-decreaseRate);
1173 else
1174 m_HeatBufferTimer = 1.0;
1175 }
1176 else
1177 {
1178 m_HeatBufferTimer = 0.0;
1179 if (applicableHeatbuffer > 0.0)
1180 heatBuffer.Add(-decreaseRate);
1181 else if (applicableHeatbuffer != 0.0 && !m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1182 heatBuffer.Set(0.0);
1183 }
1184 }
1185 else
1186 {
1187 if (m_HeatComfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING && m_UTSAverageTemperature > 0) // m_UTSAverageTemperature can be negative
1188 {
1189 if (applicableHeatbuffer < heatBufferMax)
1190 {
1191 heatBuffer.Add(increaseRate);
1192 m_HeatBufferCapPrevious = heatBufferCap;
1193 }
1194 }
1195 else if (applicableHeatbuffer > 0.0)
1196 heatBuffer.Add(-decreaseRate);
1197 else if (applicableHeatbuffer != 0.0 && !m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1198 heatBuffer.Set(0.0);
1199
1200 m_HeatBufferTimer = 0.0;
1201 }
1202 }
1203 }
map m_Player
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:1205
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
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/DayZ/constants.c:765
const float ENVIRO_PLAYER_HEATBUFFER_WATEREFFECT
impact of enviro temperature on player (lower value = higher, cannot be zero or below!...
Определения 3_Game/DayZ/constants.c:761
static const float ENVIRO_HEATCOMFORT_WEIGHT_SUMMARY
don't forget to update the weights from above if you are adding/removing them
Определения 3_Game/DayZ/constants.c:754
const float ENVIRO_PLAYER_HEATBUFFER_DECREASE
impact of water contact on player's heatbuffer
Определения 3_Game/DayZ/constants.c:762
const float ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT
How much heat buffer increases per one enviro tick.
Определения 3_Game/DayZ/constants.c:764
const float ENVIRO_PLAYER_HEATBUFFER_INCREASE
How much heat buffer decreases per one enviro tick.
Определения 3_Game/DayZ/constants.c:763
static ref array< ref TFloatArray > ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT
Minimal heatbuffer capacity of naked character.
Определения 3_Game/DayZ/constants.c:768
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_UTSAverageTemperature, m_WaterLevel, PlayerStat(), HeatBufferMdfr::STAGE_THRESHOLDS и PlayerConstants::THRESHOLD_HEAT_COMFORT_MINUS_WARNING.

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