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

◆ DryItemsInVicinity() [1/2]

override void UniversalTemperatureSourceLambdaEngine::DryItemsInVicinity ( UniversalTemperatureSourceSettings pSettings)
protected

DEPRECATED.

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

332{
333 override void DryItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array<Object> nearestObjects)
334 {
335 float distanceToTemperatureSource;
336
337 foreach (Object nearestObject : nearestObjects)
338 {
339 ItemBase nearestItem = ItemBase.Cast(nearestObject);
340
342 if (nearestItem && nearestItem.HasWetness() && nearestItem != pSettings.m_Parent && !nearestItem.IsInherited(Man) && !nearestItem.IsUniversalTemperatureSource())
343 {
344 distanceToTemperatureSource = vector.Distance(nearestItem.GetPosition(), position);
345 distanceToTemperatureSource = Math.Max(distanceToTemperatureSource, 0.3); //min distance cannot be 0 (division by zero)
346
347 float dryModifier = 0;
348
349 if (nearestItem.GetWet() >= GameConstants.STATE_DAMP)
350 {
351 dryModifier = (-1 * m_ExecuteInterval * nearestItem.GetDryingIncrement("groundHeatSource")) / distanceToTemperatureSource;
352 Math.Clamp(dryModifier, nearestItem.GetWetMin(), nearestItem.GetWetMax());
353 nearestItem.AddWet(dryModifier);
354 }
355
356 array<EntityAI> cargoEntities = new array<EntityAI>();
357 nearestItem.GetInventory().EnumerateInventory(InventoryTraversalType.INORDER, cargoEntities);
358 foreach (EntityAI cargoEntity : cargoEntities)
359 {
360 ItemBase cargoItem = ItemBase.Cast(cargoEntity);
361 if (cargoItem)
362 {
363 dryModifier = 0;
364 if (cargoItem.GetWet() >= GameConstants.STATE_DAMP)
365 {
366 dryModifier = (-1 * m_ExecuteInterval * cargoItem.GetDryingIncrement("groundHeatSource")) / distanceToTemperatureSource;
367 Math.Clamp(dryModifier, cargoItem.GetWetMin(), cargoItem.GetWetMax());
368 cargoItem.AddWet(dryModifier);
369 }
370 }
371 }
372 }
373 }
374 }
375
376 override void WarmAndCoolItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array<Object> nearestObjects)
377 {
378 float distanceToTemperatureSource;
379 float tempTarget = pSettings.m_TemperatureItemCap;
380 EntityAI nearestEntity;
381
382 foreach (Object nearestObject : nearestObjects)
383 {
384 if (Class.CastTo(nearestEntity,nearestObject) && nearestEntity != pSettings.m_Parent && !nearestEntity.IsSelfAdjustingTemperature())
385 {
386 float temperatureDifference = tempTarget - nearestEntity.GetTemperature();
387
388 distanceToTemperatureSource = vector.Distance(nearestEntity.GetPosition(), position);
389 distanceToTemperatureSource = Math.Max(distanceToTemperatureSource, 0.1);
390
391 float time = m_ExecuteInterval;
392 if (m_ExecuteInterval == -1) //bogus time in the first execute
393 time = 1;
394
395 float distFactor = 1;
396 if (vector.Distance(nearestEntity.GetPosition(), position) > pSettings.m_RangeFull)
397 {
398 distFactor = Math.InverseLerp(pSettings.m_RangeMax,pSettings.m_RangeFull,distanceToTemperatureSource);
399 distFactor = Math.Max(distFactor, 0.0);
400 }
401
402 TemperatureDataInterpolated dta = new TemperatureDataInterpolated(tempTarget,ETemperatureAccessTypes.ACCESS_UTS,time,pSettings.m_TemperatureItemCoef * distFactor);
403
404 if (nearestEntity.GetInventory())
405 {
406 UpdateVicinityTemperatureRecursive(nearestEntity,dta);
407 }
408 else if (nearestEntity.CanHaveTemperature() && !nearestEntity.IsSelfAdjustingTemperature())
409 {
410 dta.m_HeatPermeabilityCoef = nearestEntity.GetHeatPermeabilityCoef();
411
412 if (Math.AbsFloat(temperatureDifference) >= GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD || !nearestEntity.IsFreezeThawProgressFinished()) //ignoring insignificant increments
413 nearestEntity.SetTemperatureEx(dta);
414 else
415 nearestEntity.RefreshTemperatureAccess(dta);
416 }
417 }
418 }
419 }
420
421 protected void UpdateVicinityTemperatureRecursive(EntityAI ent, TemperatureData dta, float heatPermeabilityCoef = 1.0)
422 {
423 float heatPermCoef = heatPermeabilityCoef;
424 heatPermCoef *= ent.GetHeatPermeabilityCoef();
425 dta.m_HeatPermeabilityCoef = heatPermCoef;
426
427 //handle temperature of this entity
428 if (ent.CanHaveTemperature() && !ent.IsSelfAdjustingTemperature())
429 {
430 float temperatureDifference = dta.m_AdjustedTarget - ent.GetTemperature();
431 if (Math.AbsFloat(temperatureDifference) >= GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD || !ent.IsFreezeThawProgressFinished()) //ignoring insignificant increments
432 ent.SetTemperatureEx(dta);
433 else
434 ent.RefreshTemperatureAccess(dta);
435 }
436
437 // go through any attachments and cargo, recursive
438 int inventoryAttCount = ent.GetInventory().AttachmentCount();
439 if (inventoryAttCount > 0)
440 {
441 EntityAI attachmentEnt;
442 for (int inAttIdx = 0; inAttIdx < inventoryAttCount; ++inAttIdx)
443 {
444 if (Class.CastTo(attachmentEnt,ent.GetInventory().GetAttachmentFromIndex(inAttIdx)))
445 {
446 UpdateVicinityTemperatureRecursive(attachmentEnt,dta,heatPermCoef);
447 }
448 }
449 }
450
451 if (ent.GetInventory().GetCargo())
452 {
453 int inventoryItemCount = ent.GetInventory().GetCargo().GetItemCount();
454 if (inventoryItemCount > 0)
455 {
456 EntityAI cargoEnt;
457 for (int j = 0; j < inventoryItemCount; ++j)
458 {
459 if (Class.CastTo(cargoEnt,ent.GetInventory().GetCargo().GetItem(j)))
460 {
461 UpdateVicinityTemperatureRecursive(cargoEnt,dta,heatPermCoef);
462 }
463 }
464 }
465 }
466 }
467
468 override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
469 {
470 resultValues.m_TemperatureItem = pSettings.m_TemperatureItemCap;
471 resultValues.m_TemperatureHeatcomfort = pSettings.m_TemperatureCap;
472
473 array<Object> nearestObjects = new array<Object>();
474
475 vector pos = pSettings.m_Position;
476 if (pSettings.m_Parent != null)
477 pos = pSettings.m_Parent.GetPosition();
478
479 GetGame().GetObjectsAtPosition(pos, pSettings.m_RangeMax, nearestObjects, null);
480 if (nearestObjects.Count() > 0)
481 {
482 DryItemsInVicinity(pSettings, pos, nearestObjects);
483 WarmAndCoolItemsInVicinity(pSettings, pos, nearestObjects);
484 }
485 }
486
489 {
490 array<Object> nearestObjects = new array<Object>();
491
492 vector pos = pSettings.m_Position;
493 if (pSettings.m_Parent != null)
494 pos = pSettings.m_Parent.GetPosition();
495
496 GetGame().GetObjectsAtPosition(pos, pSettings.m_RangeMax, nearestObjects, null);
497
498 DryItemsInVicinity(pSettings, pos, nearestObjects);
499 }
500}
501
502class UniversalTemperatureSourceLambdaConstant : UniversalTemperatureSourceLambdaBaseImpl {}
504{
506 {
507 m_AffectsPlayer = false;
508 }
509}
510
ETemperatureAccessTypes
Определения TemperatureAccessConstants.c:2
override void DryItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array< Object > nearestObjects)
void UpdateVicinityTemperatureRecursive(EntityAI ent, TemperatureData dta, float heatPermeabilityCoef=1.0)
UniversalTemperatureSourceLambdaBaseImpl UniversalTemperatureSourceLambdaBase UniversalTemperatureSourceLambdaEngine()
override void Execute(UniversalTemperatureSourceSettings pSettings, UniversalTemperatureSourceResult resultValues)
override void WarmAndCoolItemsInVicinity(UniversalTemperatureSourceSettings pSettings, vector position, out notnull array< Object > nearestObjects)
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".
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения Building.c:6
Определения constants.c:659
Определения InventoryItem.c:731
Определения EnMath.c:7
Определения ObjectTyped.c:2
float m_AdjustedTarget
Определения TemperatureData.c:6
float m_HeatPermeabilityCoef
Определения TemperatureData.c:9
Определения TemperatureData.c:2
vector m_Position
if the stats can be overriden by coefficient/variables from WorldData (currently TemperatureCap only)
Определения UniversalTemperatureSource.c:18
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_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:106
InventoryTraversalType
tree traversal type, for more see http://en.wikipedia.org/wiki/Tree_traversal
Определения gameplay.c:6
proto native CGame GetGame()
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
Определения constants.c:938
const float STATE_DAMP
Определения constants.c:873
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.