5 float distanceToTemperatureSource;
7 foreach (
Object nearestObject : nearestObjects)
12 if (nearestItem && nearestItem.HasWetness() && nearestItem != pSettings.m_Parent && !nearestItem.IsInherited(Man) && !nearestItem.IsUniversalTemperatureSource())
14 distanceToTemperatureSource =
vector.Distance(nearestItem.GetPosition(), position);
15 distanceToTemperatureSource =
Math.Max(distanceToTemperatureSource, 0.3);
17 float dryModifier = 0;
21 dryModifier = (-1 *
m_ExecuteInterval * nearestItem.GetDryingIncrement(
"groundHeatSource")) / distanceToTemperatureSource;
22 Math.Clamp(dryModifier, nearestItem.GetWetMin(), nearestItem.GetWetMax());
23 nearestItem.AddWet(dryModifier);
28 foreach (
EntityAI cargoEntity : cargoEntities)
36 dryModifier = (-1 *
m_ExecuteInterval * cargoItem.GetDryingIncrement(
"groundHeatSource")) / distanceToTemperatureSource;
37 Math.Clamp(dryModifier, cargoItem.GetWetMin(), cargoItem.GetWetMax());
38 cargoItem.AddWet(dryModifier);
48 float distanceToTemperatureSource;
49 float tempTarget = pSettings.m_TemperatureItemCap;
52 foreach (
Object nearestObject : nearestObjects)
54 if (
Class.CastTo(nearestEntity,nearestObject) && nearestEntity != pSettings.m_Parent && !nearestEntity.IsSelfAdjustingTemperature())
56 float temperatureDifference = tempTarget - nearestEntity.GetTemperature();
58 distanceToTemperatureSource =
vector.Distance(nearestEntity.GetPosition(), position);
59 distanceToTemperatureSource =
Math.Max(distanceToTemperatureSource, 0.1);
66 if (
vector.Distance(nearestEntity.GetPosition(), position) > pSettings.m_RangeFull)
68 distFactor =
Math.InverseLerp(pSettings.m_RangeMax,pSettings.m_RangeFull,distanceToTemperatureSource);
69 distFactor =
Math.Max(distFactor, 0.0);
72 TemperatureDataInterpolated dta =
new TemperatureDataInterpolated(tempTarget,
ETemperatureAccessTypes.ACCESS_UTS,time,pSettings.m_TemperatureItemCoef * distFactor);
74 if (nearestEntity.GetInventory())
78 else if (nearestEntity.CanHaveTemperature() && !nearestEntity.IsSelfAdjustingTemperature())
80 dta.m_HeatPermeabilityCoef = nearestEntity.GetHeatPermeabilityCoef();
82 if (
Math.AbsFloat(temperatureDifference) >=
GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD || !nearestEntity.IsFreezeThawProgressFinished())
83 nearestEntity.SetTemperatureEx(dta);
85 nearestEntity.RefreshTemperatureAccess(dta);
93 float heatPermCoef = heatPermeabilityCoef;
94 heatPermCoef *= ent.GetHeatPermeabilityCoef();
95 dta.m_HeatPermeabilityCoef = heatPermCoef;
98 if (ent.CanHaveTemperature() && !ent.IsSelfAdjustingTemperature())
100 float temperatureDifference = dta.m_AdjustedTarget - ent.GetTemperature();
101 if (
Math.AbsFloat(temperatureDifference) >=
GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD || !ent.IsFreezeThawProgressFinished())
102 ent.SetTemperatureEx(dta);
104 ent.RefreshTemperatureAccess(dta);
108 int inventoryAttCount = ent.GetInventory().AttachmentCount();
109 if (inventoryAttCount > 0)
112 for (
int inAttIdx = 0; inAttIdx < inventoryAttCount; ++inAttIdx)
114 if (
Class.CastTo(attachmentEnt,ent.GetInventory().GetAttachmentFromIndex(inAttIdx)))
121 if (ent.GetInventory().GetCargo())
123 int inventoryItemCount = ent.GetInventory().GetCargo().GetItemCount();
124 if (inventoryItemCount > 0)
127 for (
int j = 0; j < inventoryItemCount; ++j)
129 if (
Class.CastTo(cargoEnt,ent.GetInventory().GetCargo().GetItem(j)))
140 resultValues.m_TemperatureItem = pSettings.m_TemperatureItemCap;
141 resultValues.m_TemperatureHeatcomfort = pSettings.m_TemperatureCap;
143 vector pos = pSettings.m_Position;
144 if (pSettings.m_Parent != null)
145 pos = pSettings.m_Parent.GetPosition();
148 float halfRange = pSettings.m_RangeMax;
151 vector minPos = pos -
Vector(halfRange, halfRange / 2, halfRange);
152 vector maxPos = pos +
Vector(halfRange, halfRange / 2, halfRange);
155 DayZPlayerUtils.SceneGetEntitiesInBox(minPos, maxPos, nearestObjects,
QueryFlags.DYNAMIC);
157 for (
int i = nearestObjects.Count() - 1; i >= 0; --i)
159 EntityAI entity = nearestObjects[i];
162 vector objPos = entity.GetPosition();
163 float distance =
vector.Distance(objPos, pos);
164 if (distance > pSettings.m_RangeMax)
165 nearestObjects.Remove(i);
169 if (nearestObjects.Count() > 0)
171 DryItemsInVicinity(pSettings, pos, nearestObjects);
172 WarmAndCoolItemsInVicinity(pSettings, pos, nearestObjects);
179 vector pos = pSettings.m_Position;
180 if (pSettings.m_Parent != null)
181 pos = pSettings.m_Parent.GetPosition();
184 float halfRange = pSettings.m_RangeMax;
187 vector minPos = pos -
Vector(halfRange, halfRange / 2, halfRange);
188 vector maxPos = pos +
Vector(halfRange, halfRange / 2, halfRange);
191 DayZPlayerUtils.SceneGetEntitiesInBox(minPos, maxPos, nearestObjects,
QueryFlags.DYNAMIC);
193 for (
int i = nearestObjects.Count() - 1; i >= 0; --i)
195 EntityAI entity = nearestObjects[i];
198 vector objPos = entity.GetPosition();
199 float distance =
vector.Distance(objPos, pos);
200 if (distance > pSettings.m_RangeMax)
201 nearestObjects.Remove(i);
205 DryItemsInVicinity(pSettings, pos, nearestObjects);
214 m_AffectsPlayer =
false;
proto native vector Vector(float x, float y, float z)
Vector constructor from components.