DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
UniversalTemperatureSourceLambdaBaseImpl.c
Go to the documentation of this file.
2{
4 {
5 float distance;
6 array<Object> nearestObjects = new array<Object>();
7
8 vector pos = pSettings.m_Position;
9 if (pSettings.m_Parent != null)
10 pos = pSettings.m_Parent.GetPosition();
11
12 GetGame().GetObjectsAtPosition(pos, pSettings.m_RangeMax, nearestObjects, null);
13 foreach (Object nearestObject : nearestObjects)
14 {
15 ItemBase nearestItem = ItemBase.Cast(nearestObject);
17 if (nearestItem && nearestItem.HasWetness() && nearestItem != pSettings.m_Parent && !nearestItem.IsInherited(Man))
18 {
19 distance = vector.Distance(nearestItem.GetPosition(), pSettings.m_Position);
20 distance = Math.Max(distance, 0.1); //min distance cannot be 0 (division by zero)
21
22 float dryModifier = 0;
23
24 if (nearestItem.GetWet() >= GameConstants.STATE_DAMP)
25 {
26 dryModifier = (-1 * pSettings.m_UpdateInterval * nearestItem.GetDryingIncrement("groundHeatSource")) / distance;
27 Math.Clamp(dryModifier, nearestItem.GetWetMin(), nearestItem.GetWetMax());
28 nearestItem.AddWet(dryModifier);
29 }
30
31 array<EntityAI> cargoEntities = new array<EntityAI>();
32 nearestItem.GetInventory().EnumerateInventory(InventoryTraversalType.INORDER, cargoEntities);
33 foreach (EntityAI cargoEntity : cargoEntities)
34 {
35 ItemBase cargoItem = ItemBase.Cast(cargoEntity);
36 if (cargoItem)
37 {
38 dryModifier = 0;
39 if (cargoItem.GetWet() >= GameConstants.STATE_DAMP)
40 {
41 dryModifier = (-1 * pSettings.m_UpdateInterval * cargoItem.GetDryingIncrement("groundHeatSource")) / distance;
42 Math.Clamp(dryModifier, cargoItem.GetWetMin(), cargoItem.GetWetMax());
43 cargoItem.AddWet(dryModifier);
44 }
45 }
46 }
47 }
48 }
49 }
50}
51
52class UniversalTemperatureSourceLambdaConstant : UniversalTemperatureSourceLambdaBaseImpl
53{
54 override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
55 {
56 resultValues.m_Temperature = pSettings.m_TemperatureMax;
57
58 DryItemsInVicinity(pSettings);
59 }
60}
61
63{
64 override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
65 {
66 resultValues.m_Temperature = pSettings.m_TemperatureMax;
67 }
68}
proto native void GetObjectsAtPosition(vector pos, float radius, out array< Object > objects, out array< CargoBase > proxyCargos)
Returns list of all objects in circle "radius" around position "pos".
Definition EnMath.c:7
void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
override void DryItemsInVicinity(UniversalTemperatureSourceSettings pSettings)
override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
float m_TemperatureMax
min temperature you can get from the TemperatureSource
vector m_Position
if the temperature generated is also set as Temperature Stat on Item itself
float m_RangeMax
range where the full temperature is given to receiver
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.
InventoryTraversalType
tree traversal type, for more see http://en.wikipedia.org/wiki/Tree_traversal
Definition gameplay.c:6
proto native CGame GetGame()
const float STATE_DAMP
Definition constants.c:769
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'.