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

◆ ProcessHeatComfort()

void ProcessHeatComfort ( )
protected

Calculates and process player's heatcomfort related to defined body parts.

Heat Comfort Penalty

heatcomfort body parts penalties

Stomach temperature influence to heatcomfort

uses the raw targetHeatComfort data

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

974 {
975 float hcPenaltyTotal
976
977 // NEW body parts => splitted
978 float hcBodyPartTotal, hcBodyPart;
979 float hBodyPartTotal, hBodyPart;
980
981 float heatComfortSum = 0.0;
982 float heatItems = 0.0;
983
984 #ifdef ENABLE_LOGGING
985 LogItemHeat("====================");
986 #endif
988 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
990 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
992 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
994 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
996 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
998 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
1000 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
1002 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
1004 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
1005
1012
1013 heatItems = hBodyPartTotal;
1014 heatComfortSum = hcBodyPartTotal;
1015 heatComfortSum += hcPenaltyTotal;
1016
1018 {
1019 if (m_Player.GetStomach().GetStomachVolume() > 0.0)
1020 {
1021 float stomachContentTemperature = m_Player.GetStomach().GetStomachTemperature();
1022 if (stomachContentTemperature < GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_LOWER_LIMIT)
1023 {
1024 stomachContentTemperature = Math.Remap(
1025 -10.0,
1028 0.0,
1029 stomachContentTemperature,
1030 );
1031 }
1032 else if (stomachContentTemperature > GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_UPPER_LIMIT)
1033 {
1034 stomachContentTemperature = Math.Remap(
1036 70.0,
1037 0.0,
1039 stomachContentTemperature,
1040 );
1041 }
1042 else
1043 stomachContentTemperature = 0.0;
1044
1045 heatComfortSum += stomachContentTemperature * GameConstants.ENVIRO_STOMACH_WEIGHT;
1046 }
1047 }
1048
1049 float targetHeatComfort = (heatComfortSum + heatItems + (GetPlayerHeat() / 100)) + EnvTempToCoef(m_EnvironmentTemperature);
1050
1052 m_EnvironmentSnapshot.m_ClothingHeatComfort = hcBodyPartTotal;
1053 m_EnvironmentSnapshot.m_TargetHeatComfort = targetHeatComfort;
1055
1056 if (m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
1057 targetHeatComfort = Math.Clamp(targetHeatComfort, 0.0, m_Player.GetStatHeatComfort().GetMax());
1058 else
1059 targetHeatComfort = Math.Clamp(targetHeatComfort, m_Player.GetStatHeatComfort().GetMin(), m_Player.GetStatHeatComfort().GetMax());
1060
1061 targetHeatComfort = Math.Round(targetHeatComfort * 100) * 0.01;
1062
1063 float dynamicHeatComfort;
1064
1065 {
1066 float direction = 1.0;
1067 if (targetHeatComfort < 0.0)
1068 direction = -1.0;
1069
1071 dynamicHeatComfort = m_AverageHeatComfortBuffer.Add(targetHeatComfort);
1072 else
1073 dynamicHeatComfort = m_AverageHeatComfortBuffer.Add((Math.AbsFloat(targetHeatComfort) - GameConstants.ENVIRO_HEATCOMFORT_MAX_STEP_SIZE) * direction);
1074 }
1075
1076 dynamicHeatComfort = Math.Round(dynamicHeatComfort * 100) * 0.01;
1077
1078 m_HeatComfort = dynamicHeatComfort;
1079
1080 SetTargetHeatComfort(targetHeatComfort);
1081 m_Player.GetStatHeatComfort().Set(m_HeatComfort);
1082 }
map m_Player
ref EnvironmentSnapshotData m_EnvironmentSnapshot
Определения Environment.c:1769
void SetTargetHeatComfort(float value)
Определения Environment.c:1084
float m_EnvironmentTemperature
Определения Environment.c:58
ref SimpleMovingAverage< float > m_AverageHeatComfortBuffer
Определения Environment.c:91
float m_HeatComfort
Определения Environment.c:48
float EnvTempToCoef(float pTemp)
Определения Environment.c:1344
void BodyPartHeatProperties(int pBodyPartId, float pCoef, out float pHeatComfort, out float pHeat)
Iterate through given body part and calculates heatcofort and item heat value.
Определения Environment.c:1356
float NakedBodyPartHeatComfortPenalty(int pBodyPartSlotId, float pCoef)
Calculates penalty value for heatcomfort - this simulates uncovered body part reaction.
Определения Environment.c:1455
float GetPlayerHeat()
Character's heat (calculated from movement speed multiplied by constant)
Определения Environment.c:295
void ProcessHeatBuffer(EnvironmentSnapshotData data)
Определения Environment.c:1105
provides access to slot configuration
Определения InventorySlots.c:6
Определения EnMath.c:7
eModifiers
Определения eModifiers.c:2
static const float ENVIRO_HEATCOMFORT_VEST_WEIGHT
Определения 3_Game/DayZ/constants.c:746
const float ENVIRO_HEATCOMFORT_MAX_STEP_SIZE
when is sun highest on sky
Определения 3_Game/DayZ/constants.c:742
static const float ENVIRO_HEATCOMFORT_HIPS_WEIGHT
Определения 3_Game/DayZ/constants.c:752
const float ENVIRO_STOMACH_WEIGHT
Определения 3_Game/DayZ/constants.c:756
static const float ENVIRO_HEATCOMFORT_LEGS_WEIGHT
Определения 3_Game/DayZ/constants.c:750
static const float ENVIRO_HEATCOMFORT_GLOVES_WEIGHT
Определения 3_Game/DayZ/constants.c:749
static const float ENVIRO_HEATCOMFORT_FEET_WEIGHT
Определения 3_Game/DayZ/constants.c:751
const float ITEM_TEMPERATURE_NEUTRAL_ZONE_UPPER_LIMIT
Определения 3_Game/DayZ/constants.c:807
const float ITEM_TEMPERATURE_NEUTRAL_ZONE_LOWER_LIMIT
damage per second dealt to attachment by fire
Определения 3_Game/DayZ/constants.c:806
static const float ENVIRO_HEATCOMFORT_BODY_WEIGHT
Определения 3_Game/DayZ/constants.c:747
static const float ENVIRO_HEATCOMFORT_BACK_WEIGHT
Определения 3_Game/DayZ/constants.c:748
static const float ENVIRO_HEATCOMFORT_HEADGEAR_WEIGHT
max step of dynamic heatcomfort change (applies if diff between target and dynamic HC is bigger than ...
Определения 3_Game/DayZ/constants.c:744
static const float ENVIRO_HEATCOMFORT_MASK_WEIGHT
how much this body part affects final heatcomfort
Определения 3_Game/DayZ/constants.c:745
static proto float Round(float f)
Returns mathematical round of value.
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static float Remap(float inputMin, float inputMax, float outputMin, float outputMax, float inputValue, bool clampedOutput=true)
Returns given value remaped from input range into output range.
Определения EnMath.c:740
static proto float AbsFloat(float f)
Returns absolute value.

Перекрестные ссылки Math::AbsFloat(), BodyPartHeatProperties(), Math::Clamp(), GameConstants::ENVIRO_HEATCOMFORT_BACK_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_BODY_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_FEET_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_GLOVES_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_HEADGEAR_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_HIPS_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_LEGS_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_MASK_WEIGHT, GameConstants::ENVIRO_HEATCOMFORT_MAX_STEP_SIZE, GameConstants::ENVIRO_HEATCOMFORT_VEST_WEIGHT, GameConstants::ENVIRO_STOMACH_WEIGHT, EnvTempToCoef(), GetPlayerHeat(), GameConstants::ITEM_TEMPERATURE_NEUTRAL_ZONE_LOWER_LIMIT, GameConstants::ITEM_TEMPERATURE_NEUTRAL_ZONE_UPPER_LIMIT, m_AverageHeatComfortBuffer, m_EnvironmentSnapshot, m_EnvironmentTemperature, m_HeatComfort, NakedBodyPartHeatComfortPenalty(), ProcessHeatBuffer(), Math::Remap(), Math::Round() и SetTargetHeatComfort().

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