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

◆ ProcessHeatBuffer() [1/2]

void Environment::ProcessHeatBuffer ( EnvironmentSnapshotData data)
inlineprotected

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 строка 965

966 {
968 {
969 float applicableHeatbuffer = GetApplicableHeatbuffer();
970
972 float heatBufferCap = Math.InverseLerp(0.0, GameConstants.ENVIRO_HEATCOMFORT_WEIGHT_SUMMARY, data.m_ClothingHeatComfort);
973 float heatBufferMax = GameConstants.ENVIRO_PLAYER_HEATBUFFER_CAPACITY_MIN + heatBufferCap * (1 - GameConstants.ENVIRO_PLAYER_HEATBUFFER_CAPACITY_MIN);
974 m_Player.SetHeatBufferDynamicMax(heatBufferMax);
975
977 if (heatBufferCap < m_HeatBufferCapPrevious)
978 {
979 float heatBufferValueCorrection = GameConstants.ENVIRO_PLAYER_HEATBUFFER_INCREASE / (heatBufferMax * ((-GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
980 m_Player.GetStatHeatBuffer().Add(-heatBufferValueCorrection);
981 m_HeatBufferCapPrevious = heatBufferCap;
982 }
983
984 float increaseRate = 0.0;
985 float decreaseRate = 0.0;
986
987 {
988 increaseRate = GameConstants.ENVIRO_PLAYER_HEATBUFFER_INCREASE / (heatBufferMax * (( -GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
989 decreaseRate = GameConstants.ENVIRO_PLAYER_HEATBUFFER_DECREASE / (heatBufferMax * (( GameConstants.ENVIRO_PLAYER_HEATBUFFER_TEMP_AFFECT * data.m_TargetHeatComfort) + 1 ));
990
991 float decreaseRateByHeatBufferStageCoef = 1;
992
993 if (heatBufferMax > HeatBufferMdfr.STAGE_THRESHOLDS[1])
994 {
995 float heatBufferMaxInversed = Math.InverseLerp(HeatBufferMdfr.STAGE_THRESHOLDS[1], 1.0, heatBufferMax);
996 switch (m_Player.GetHeatBufferStage())
997 {
998 case 2:
999 decreaseRateByHeatBufferStageCoef = Math.Lerp(
1000 GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[2][0],
1001 GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[2][1],
1002 heatBufferMaxInversed,
1003 );
1004 break;
1005 case 1:
1006 decreaseRateByHeatBufferStageCoef = Math.Lerp(
1007 GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[1][0],
1008 GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[1][1],
1009 heatBufferMaxInversed,
1010 );
1011 break;
1012 }
1013 }
1014 else
1015 {
1016 decreaseRateByHeatBufferStageCoef = GameConstants.ENVIRO_PLAYER_HEATBUFFER_STAGE_RATELIMIT[1][0];
1017 }
1018
1019 decreaseRate *= decreaseRateByHeatBufferStageCoef;
1020
1021 if (m_IsInWater)
1022 decreaseRate *= GameConstants.ENVIRO_PLAYER_HEATBUFFER_WATEREFFECT * m_WaterLevel;
1023 }
1024
1026 {
1027 if (m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1028 {
1029 if (m_HeatBufferTimer >= 1.0)
1030 m_Player.GetStatHeatBuffer().Add(-decreaseRate);
1031 else
1032 m_HeatBufferTimer = 1.0;
1033 }
1034 else
1035 {
1036 m_HeatBufferTimer = 0.0;
1037 if (applicableHeatbuffer > 0.0)
1038 m_Player.GetStatHeatBuffer().Add(-decreaseRate);
1039 else if (applicableHeatbuffer != 0.0 && !m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1040 m_Player.GetStatHeatBuffer().Set(0.0);
1041 }
1042 }
1043 else
1044 {
1045 if (m_HeatComfort > PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING && m_UTSAverageTemperature > 0) // m_UTSAverageTemperature can be negative
1046 {
1047 if (applicableHeatbuffer < heatBufferMax)
1048 {
1049 m_Player.GetStatHeatBuffer().Add(increaseRate);
1050 m_HeatBufferCapPrevious = heatBufferCap;
1051 }
1052 }
1053 else if (applicableHeatbuffer > 0.0)
1054 m_Player.GetStatHeatBuffer().Add(-decreaseRate);
1055 else if (applicableHeatbuffer != 0.0 && !m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1056 m_Player.GetStatHeatBuffer().Set(0.0);
1057
1058 m_HeatBufferTimer = 0.0;
1059 }
1060 }
1061 }
EEnvironmentHeatcomfortBehaviorCategory
Определения Environment.c:2
int m_HeatComfortBehaviorCategory
Определения Environment.c:80
float GetApplicableHeatbuffer()
Определения Environment.c:1063
bool m_HasTemperatureSources
Определения Environment.c:74
float m_UTSAverageTemperature
Определения Environment.c:75
float m_WaterLevel
Определения Environment.c:54
float m_HeatBufferCapPrevious
reused as state toggle
Определения Environment.c:61
PlayerBase m_Player
Определения Environment.c:30
float m_HeatBufferTimer
Определения Environment.c:60
float m_HeatComfort
Определения Environment.c:35
bool m_IsInWater
Определения Environment.c:57
eModifiers
Определения eModifiers.c:2

Перекрестные ссылки 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, HeatBufferMdfr::STAGE_THRESHOLDS и PlayerConstants::THRESHOLD_HEAT_COMFORT_MINUS_WARNING.

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