DayZ 1.29
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
UniversalTemperatureSourceLambdaBaseImpl.c
См. документацию.
2{
3 override void DryItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array<EntityAI> nearestObjects)
4 {
5 float distanceToTemperatureSource;
6
7 foreach (Object nearestObject : nearestObjects)
8 {
9 ItemBase nearestItem = ItemBase.Cast(nearestObject);
10 ItemBase temperatureSource = ItemBase.Cast(pSettings.m_Parent);
11
13 if (nearestItem && nearestItem.HasWetness() && nearestItem != pSettings.m_Parent && !nearestItem.IsInherited(Man) && !nearestItem.IsUniversalTemperatureSource())
14 {
15 distanceToTemperatureSource = vector.Distance(nearestItem.GetPosition(), position);
16 distanceToTemperatureSource = Math.Max(distanceToTemperatureSource, 0.001);
17 distanceToTemperatureSource = 1 / distanceToTemperatureSource;
18 distanceToTemperatureSource = Math.Clamp(distanceToTemperatureSource, 0.0, 1.0);
19
20 float dryValue = 0;
21
22 if (nearestItem.GetWet() >= GameConstants.STATE_DAMP)
23 {
24 dryValue = (-1 * m_ExecuteInterval * nearestItem.GetDryingIncrement("groundHeatSource")) * pSettings.m_ItemDryModifier * distanceToTemperatureSource;
25 Math.Clamp(dryValue, nearestItem.GetWetMin(), nearestItem.GetWetMax());
26 nearestItem.AddWet(dryValue);
27 }
28
29 array<EntityAI> cargoEntities = new array<EntityAI>();
30 nearestItem.GetInventory().EnumerateInventory(InventoryTraversalType.INORDER, cargoEntities);
31 foreach (EntityAI cargoEntity : cargoEntities)
32 {
33 ItemBase cargoItem = ItemBase.Cast(cargoEntity);
34 if (cargoItem)
35 {
36 dryValue = 0;
37 if (cargoItem.GetWet() >= GameConstants.STATE_DAMP)
38 {
39 dryValue = (-1 * m_ExecuteInterval * cargoItem.GetDryingIncrement("groundHeatSource")) * pSettings.m_ItemDryModifier * distanceToTemperatureSource;
40 Math.Clamp(dryValue, cargoItem.GetWetMin(), cargoItem.GetWetMax());
41 cargoItem.AddWet(dryValue);
42 }
43 }
44 }
45 }
46 }
47 }
48
49 override void WarmAndCoolItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array<EntityAI> nearestObjects)
50 {
51 float distanceToTemperatureSource;
52 float tempTarget = pSettings.m_TemperatureItemCap;
53 EntityAI nearestEntity;
54
55 foreach (Object nearestObject : nearestObjects)
56 {
57 if (Class.CastTo(nearestEntity,nearestObject) && nearestEntity != pSettings.m_Parent && !nearestEntity.IsSelfAdjustingTemperature())
58 {
59 float temperatureDifference = tempTarget - nearestEntity.GetTemperature();
60
61 distanceToTemperatureSource = vector.Distance(nearestEntity.GetPosition(), position);
62 distanceToTemperatureSource = Math.Max(distanceToTemperatureSource, 0.1);
63
64 float time = m_ExecuteInterval;
65 if (m_ExecuteInterval == -1) //bogus time in the first execute
66 time = 1;
67
68 float distFactor = 1;
69 if (vector.Distance(nearestEntity.GetPosition(), position) > pSettings.m_RangeFull)
70 {
71 distFactor = Math.InverseLerp(pSettings.m_RangeMax,pSettings.m_RangeFull,distanceToTemperatureSource);
72 distFactor = Math.Max(distFactor, 0.0);
73 }
74
75 TemperatureDataInterpolated dta = new TemperatureDataInterpolated(tempTarget,ETemperatureAccessTypes.ACCESS_UTS,time,pSettings.m_TemperatureItemCoef * distFactor);
76
77 if (nearestEntity.GetInventory())
78 {
79 UpdateVicinityTemperatureRecursive(nearestEntity,dta);
80 }
81 else if (nearestEntity.CanHaveTemperature() && !nearestEntity.IsSelfAdjustingTemperature())
82 {
83 dta.m_HeatPermeabilityCoef = nearestEntity.GetHeatPermeabilityCoef();
84
85 if (Math.AbsFloat(temperatureDifference) >= GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD || !nearestEntity.IsFreezeThawProgressFinished()) //ignoring insignificant increments
86 nearestEntity.SetTemperatureEx(dta);
87 else
88 nearestEntity.RefreshTemperatureAccess(dta);
89 }
90 }
91 }
92 }
93
94 protected void UpdateVicinityTemperatureRecursive(EntityAI ent, TemperatureData dta, float heatPermeabilityCoef = 1.0)
95 {
96 float heatPermCoef = heatPermeabilityCoef;
97 heatPermCoef *= ent.GetHeatPermeabilityCoef();
98 dta.m_HeatPermeabilityCoef = heatPermCoef;
99
100 //handle temperature of this entity
101 if (ent.CanHaveTemperature() && !ent.IsSelfAdjustingTemperature())
102 {
103 float temperatureDifference = dta.m_AdjustedTarget - ent.GetTemperature();
104 if (Math.AbsFloat(temperatureDifference) >= GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD || !ent.IsFreezeThawProgressFinished()) //ignoring insignificant increments
105 ent.SetTemperatureEx(dta);
106 else
107 ent.RefreshTemperatureAccess(dta);
108 }
109
110 // go through any attachments and cargo, recursive
111 int inventoryAttCount = ent.GetInventory().AttachmentCount();
112 for (int inAttIdx = 0; inAttIdx < inventoryAttCount; ++inAttIdx)
113 {
114 EntityAI attachmentEnt;
115 if (Class.CastTo(attachmentEnt,ent.GetInventory().GetAttachmentFromIndex(inAttIdx)))
116 {
117 UpdateVicinityTemperatureRecursive(attachmentEnt,dta,heatPermCoef);
118 }
119 }
120
121 CargoBase cargo = ent.GetInventory().GetCargo();
122 if (cargo)
123 {
124 int inventoryItemCount = cargo.GetItemCount();
125 for (int j = 0; j < inventoryItemCount; ++j)
126 {
127 EntityAI cargoEnt;
128 if (Class.CastTo(cargoEnt, cargo.GetItem(j)))
129 {
130 UpdateVicinityTemperatureRecursive(cargoEnt, dta, heatPermCoef);
131 }
132 }
133 }
134 }
135
136 override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
137 {
138 resultValues.m_TemperatureItem = pSettings.m_TemperatureItemCap;
139 resultValues.m_TemperatureHeatcomfort = pSettings.m_TemperatureCap;
140
141 vector pos = pSettings.m_Position;
142 if (pSettings.m_Parent != null)
143 pos = pSettings.m_Parent.GetPosition();
144
145 // Define half-size (range)
146 float halfRange = pSettings.m_RangeMax;
147
148 // Calculate min and max positions of the box
149 vector minPos = pos - Vector(halfRange, halfRange / 2, halfRange);
150 vector maxPos = pos + Vector(halfRange, halfRange / 2, halfRange);
151
152 array<EntityAI> nearestObjects = {};
153 DayZPlayerUtils.SceneGetEntitiesInBox(minPos, maxPos, nearestObjects, QueryFlags.DYNAMIC);
154
155 for (int i = nearestObjects.Count() - 1; i >= 0; --i)
156 {
157 EntityAI entity = nearestObjects[i];
158 if (entity)
159 {
160 vector objPos = entity.GetPosition();
161 float distance = vector.Distance(objPos, pos);
162 if (distance > pSettings.m_RangeMax)
163 nearestObjects.Remove(i);
164 }
165 }
166
167 if (nearestObjects.Count() > 0)
168 {
169 DryItemsInVicinity(pSettings, pos, nearestObjects);
170 WarmAndCoolItemsInVicinity(pSettings, pos, nearestObjects);
171 }
172 }
173
176 {
177 vector pos = pSettings.m_Position;
178 if (pSettings.m_Parent != null)
179 pos = pSettings.m_Parent.GetPosition();
180
181 // Define half-size (range)
182 float halfRange = pSettings.m_RangeMax;
183
184 // Calculate min and max positions of the box
185 vector minPos = pos - Vector(halfRange, halfRange / 2, halfRange);
186 vector maxPos = pos + Vector(halfRange, halfRange / 2, halfRange);
187
188 array<EntityAI> nearestObjects = {};
189 DayZPlayerUtils.SceneGetEntitiesInBox(minPos, maxPos, nearestObjects, QueryFlags.DYNAMIC);
190
191 for (int i = nearestObjects.Count() - 1; i >= 0; --i)
192 {
193 EntityAI entity = nearestObjects[i];
194 if (entity)
195 {
196 vector objPos = entity.GetPosition();
197 float distance = vector.Distance(objPos, pos);
198 if (distance > pSettings.m_RangeMax)
199 nearestObjects.Remove(i);
200 }
201 }
202
203 DryItemsInVicinity(pSettings, pos, nearestObjects);
204 }
205}
206
207class UniversalTemperatureSourceLambdaConstant : UniversalTemperatureSourceLambdaBaseImpl {}
209{
212 m_AffectsPlayer = false;
213 }
214}
215
void DayZPlayerUtils()
cannot be instantiated
Определения DayZPlayerUtils.c:465
QueryFlags
Определения DayZPlayerUtils.c:2
ETemperatureAccessTypes
Определения TemperatureAccessConstants.c:2
UniversalTemperatureSourceLambdaBaseImpl UniversalTemperatureSourceLambdaBase UniversalTemperatureSourceLambdaEngine()
proto native int GetItemCount()
proto native EntityAI GetItem(int index)
represents base for cargo storage for entities
Определения Cargo.c:7
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения EnMath.c:7
Определения ObjectTyped.c:2
float m_AdjustedTarget
Определения TemperatureData.c:6
float m_HeatPermeabilityCoef
Определения TemperatureData.c:9
Определения TemperatureData.c:2
override void WarmAndCoolItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array< EntityAI > nearestObjects)
override void DryItemsInVicinity(UniversalTemperatureSourceSettings pSettings)
DEPRECATED.
override void DryItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array< EntityAI > nearestObjects)
void UpdateVicinityTemperatureRecursive(EntityAI ent, TemperatureData dta, float heatPermeabilityCoef=1.0)
override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
vector m_Position
if the stats can be overriden by coefficient/variables from WorldData (currently TemperatureCap only)
Определения UniversalTemperatureSource.c:19
float m_RangeFull
temperature cap that will limit the return value from GetTemperature method
Определения UniversalTemperatureSource.c:7
float m_TemperatureCap
used to determine speed of temperature change, and some temperature subsystems
Определения UniversalTemperatureSource.c:6
float m_ItemDryModifier
maximum range where the receiver can get some temperature
Определения UniversalTemperatureSource.c:9
float m_TemperatureItemCoef
max temperature 'non-IsSelfAdjustingTemperature' entity in vicinity will get per update (cap);
Определения UniversalTemperatureSource.c:5
float m_RangeMax
range where the full temperature is given to receiver
Определения UniversalTemperatureSource.c:8
float m_TemperatureItemCap
how often the Update is ticking
Определения UniversalTemperatureSource.c:4
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:119
InventoryTraversalType
tree traversal type, for more see http://en.wikipedia.org/wiki/Tree_traversal
Определения gameplay.c:6
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
static const float TEMPERATURE_SENSITIVITY_THRESHOLD
Определения 3_Game/DayZ/constants.c:943
const float STATE_DAMP
Определения 3_Game/DayZ/constants.c:878
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Max(float x, float y)
Returns bigger of two given values.
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 proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
static proto float AbsFloat(float f)
Returns absolute value.