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

◆ ProcessHeatComfort()

void Environment::ProcessHeatComfort ( )
inlineprotected

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

Heat Comfort Penalty

heatcomfort body parts penalties

Stomach temperature influence to heatcomfort

uses the raw targetHeatComfort data

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

838 {
839 float hcPenaltyTotal
840
841 // NEW body parts => splitted
842 float hcBodyPartTotal, hcBodyPart;
843 float hBodyPartTotal, hBodyPart;
844
845 float heatComfortSum = 0.0;
846 float heatItems = 0.0;
847
848 LogItemHeat("====================");
849 BodyPartHeatProperties(InventorySlots.HEADGEAR, GameConstants.ENVIRO_HEATCOMFORT_HEADGEAR_WEIGHT, hcBodyPart, hBodyPart);
850 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
851 BodyPartHeatProperties(InventorySlots.MASK, GameConstants.ENVIRO_HEATCOMFORT_MASK_WEIGHT, hcBodyPart, hBodyPart);
852 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
853 BodyPartHeatProperties(InventorySlots.VEST, GameConstants.ENVIRO_HEATCOMFORT_VEST_WEIGHT, hcBodyPart, hBodyPart);
854 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
855 BodyPartHeatProperties(InventorySlots.BODY, GameConstants.ENVIRO_HEATCOMFORT_BODY_WEIGHT, hcBodyPart, hBodyPart);
856 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
857 BodyPartHeatProperties(InventorySlots.BACK, GameConstants.ENVIRO_HEATCOMFORT_BACK_WEIGHT, hcBodyPart, hBodyPart);
858 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
859 BodyPartHeatProperties(InventorySlots.GLOVES, GameConstants.ENVIRO_HEATCOMFORT_GLOVES_WEIGHT, hcBodyPart, hBodyPart);
860 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
861 BodyPartHeatProperties(InventorySlots.LEGS, GameConstants.ENVIRO_HEATCOMFORT_LEGS_WEIGHT, hcBodyPart, hBodyPart);
862 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
863 BodyPartHeatProperties(InventorySlots.FEET, GameConstants.ENVIRO_HEATCOMFORT_FEET_WEIGHT, hcBodyPart, hBodyPart);
864 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
865 BodyPartHeatProperties(InventorySlots.HIPS, GameConstants.ENVIRO_HEATCOMFORT_HIPS_WEIGHT, hcBodyPart, hBodyPart);
866 hcBodyPartTotal += hcBodyPart; hBodyPartTotal += hBodyPart;
867
868 hcPenaltyTotal += NakedBodyPartHeatComfortPenalty(InventorySlots.HEADGEAR, GameConstants.ENVIRO_HEATCOMFORT_HEADGEAR_WEIGHT);
869 hcPenaltyTotal += NakedBodyPartHeatComfortPenalty(InventorySlots.MASK, GameConstants.ENVIRO_HEATCOMFORT_MASK_WEIGHT);
870 hcPenaltyTotal += NakedBodyPartHeatComfortPenalty(InventorySlots.BODY, GameConstants.ENVIRO_HEATCOMFORT_BODY_WEIGHT);
871 hcPenaltyTotal += NakedBodyPartHeatComfortPenalty(InventorySlots.GLOVES, GameConstants.ENVIRO_HEATCOMFORT_GLOVES_WEIGHT);
872 hcPenaltyTotal += NakedBodyPartHeatComfortPenalty(InventorySlots.LEGS, GameConstants.ENVIRO_HEATCOMFORT_LEGS_WEIGHT);
873 hcPenaltyTotal += NakedBodyPartHeatComfortPenalty(InventorySlots.FEET, GameConstants.ENVIRO_HEATCOMFORT_FEET_WEIGHT);
874
875 heatItems = hBodyPartTotal;
876 heatComfortSum = hcBodyPartTotal;
877 heatComfortSum += hcPenaltyTotal;
878
880 {
881 if (m_Player.GetStomach().GetStomachVolume() > 0.0)
882 {
883 float stomachContentTemperature = m_Player.GetStomach().GetStomachTemperature();
884 if (stomachContentTemperature < GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_LOWER_LIMIT)
885 {
886 stomachContentTemperature = Math.Remap(
887 -10.0,
888 GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_LOWER_LIMIT,
889 -GameConstants.ENVIRO_STOMACH_WEIGHT,
890 0.0,
891 stomachContentTemperature,
892 );
893 }
894 else if (stomachContentTemperature > GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_UPPER_LIMIT)
895 {
896 stomachContentTemperature = Math.Remap(
897 GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_UPPER_LIMIT,
898 70.0,
899 0.0,
900 GameConstants.ENVIRO_STOMACH_WEIGHT,
901 stomachContentTemperature,
902 );
903 }
904 else
905 stomachContentTemperature = 0.0;
906
907 heatComfortSum += stomachContentTemperature * GameConstants.ENVIRO_STOMACH_WEIGHT;
908 }
909 }
910
911 float targetHeatComfort = (heatComfortSum + heatItems + (GetPlayerHeat() / 100)) + EnvTempToCoef(m_EnvironmentTemperature);
912
914 m_EnvironmentSnapshot.m_ClothingHeatComfort = hcBodyPartTotal;
915 m_EnvironmentSnapshot.m_TargetHeatComfort = targetHeatComfort;
917
918 if (m_Player.GetModifiersManager().IsModifierActive(eModifiers.MDF_HEATBUFFER))
919 targetHeatComfort = Math.Clamp(targetHeatComfort, 0.0, m_Player.GetStatHeatComfort().GetMax());
920 else
921 targetHeatComfort = Math.Clamp(targetHeatComfort, m_Player.GetStatHeatComfort().GetMin(), m_Player.GetStatHeatComfort().GetMax());
922
923 targetHeatComfort = Math.Round(targetHeatComfort * 100) * 0.01;
924
925 float dynamicHeatComfort;
926
927 {
928 float direction = 1.0;
929 if (targetHeatComfort < 0.0)
930 direction = -1.0;
931
932 if (Math.AbsFloat(targetHeatComfort - m_HeatComfort) <= GameConstants.ENVIRO_HEATCOMFORT_MAX_STEP_SIZE)
933 dynamicHeatComfort = m_AverageHeatComfortBuffer.Add(targetHeatComfort);
934 else
935 dynamicHeatComfort = m_AverageHeatComfortBuffer.Add((Math.AbsFloat(targetHeatComfort) - GameConstants.ENVIRO_HEATCOMFORT_MAX_STEP_SIZE) * direction);
936 }
937
938 dynamicHeatComfort = Math.Round(dynamicHeatComfort * 100) * 0.01;
939
940 m_HeatComfort = dynamicHeatComfort;
941
942 SetTargetHeatComfort(targetHeatComfort);
943 m_Player.GetStatHeatComfort().Set(m_HeatComfort);
944 }
float GetPlayerHeat()
Returns heat player generated based on player's movement speed (for now)
Определения Environment.c:269
float NakedBodyPartHeatComfortPenalty(int pBodyPartSlotId, float pCoef)
Определения Environment.c:1272
void LogItemHeat(string message, bool indented=false)
Определения Environment.c:1544
float m_EnvironmentTemperature
Определения Environment.c:45
float EnvTempToCoef(float pTemp)
Определения Environment.c:1189
ref SimpleMovingAverage< float > m_AverageHeatComfortBuffer
Определения Environment.c:78
ref EnvironmentSnapshotData m_EnvironmentSnapshot
Определения Environment.c:1561
void BodyPartHeatProperties(int pBodyPartId, float pCoef, out float pHeatComfort, out float pHeat)
returns enhanced heat comfort for given body part
Определения Environment.c:1195
PlayerBase m_Player
Определения Environment.c:30
void SetTargetHeatComfort(float value)
Определения Environment.c:946
float m_HeatComfort
Определения Environment.c:35
void ProcessHeatBuffer(EnvironmentSnapshotData data)
Определения Environment.c:965
eModifiers
Определения eModifiers.c:2

Перекрестные ссылки 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, LogItemHeat(), m_AverageHeatComfortBuffer, m_EnvironmentSnapshot, m_EnvironmentTemperature, m_HeatComfort, m_Player, NakedBodyPartHeatComfortPenalty(), ProcessHeatBuffer(), Math::Remap(), Math::Round() и SetTargetHeatComfort().

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