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

◆ HandleFreezingProgression()

void Entity::HandleFreezingProgression ( float deltaHeat,
TemperatureData data )
inlineprotected

См. определение в файле 3_Game/Entities/EntityAI.c строка 2512

2513 {
2514 float progressVal = m_FreezeThawProgress;
2515 float progressDelta = 1;
2516
2517 if (deltaHeat > 0)
2518 progressDelta = -1;
2519
2520 if (data.m_UpdateTimeInfo == -1)
2521 progressDelta = (-deltaHeat / GameConstants.TEMPERATURE_RATE_AVERAGE_ABS) * GameConstants.TEMPERATURE_FREEZETHAW_LEGACY_COEF; //reverse-calculate the progress if actual time is not available
2522 else
2523 progressDelta *= data.m_UpdateTimeInfo;
2524
2525 if (progressDelta == 0)
2526 return;
2527
2528 float changeTimeDefault;
2529 float changeTimeMin;
2530 float changeTime;
2531
2532 if (!m_IsFrozen)
2533 {
2534 changeTimeDefault = GetTemperatureFreezeTime();
2535 changeTimeMin = GameConstants.TEMPERATURE_TIME_FREEZE_MIN;
2536 }
2537 else
2538 {
2539 changeTimeDefault = GetTemperatureThawTime();
2540 changeTimeMin = GameConstants.TEMPERATURE_TIME_THAW_MIN;
2541 }
2542
2543 float coef = data.m_UpdateTimeCoef;
2544 if (deltaHeat < 0) //use cooling coef when freezing (mostly just to make sure)
2545 coef = GameConstants.TEMP_COEF_COOLING_GLOBAL;
2546
2547 if (coef != 0)
2548 changeTimeDefault *= 1/coef;
2549
2550 changeTime = Math.Lerp(Math.Max(changeTimeDefault,changeTimeMin),changeTimeMin,data.m_InterpolatedFraction);
2551 progressVal = progressVal + progressDelta / changeTime;
2552
2553 float remnantTemp = 0;
2554 if (!m_IsFrozen && progressVal >= 1)
2555 {
2556 SetFrozen(true);
2557 if (progressVal > 1.0)
2558 {
2559 if (data.m_UpdateTimeInfo == -1)
2560 remnantTemp = (progressVal - 1) * changeTime * GameConstants.TEMPERATURE_RATE_AVERAGE_ABS * -1;
2561 else
2562 remnantTemp = (((progressVal - 1) * changeTime) / progressDelta) * deltaHeat;
2563 }
2564 }
2565 else if (m_IsFrozen && progressVal <= 0)
2566 {
2567 SetFrozen(false);
2568 if (progressVal < 0.0)
2569 {
2570 if (data.m_UpdateTimeInfo == -1)
2571 remnantTemp = -progressVal * changeTime * GameConstants.TEMPERATURE_RATE_AVERAGE_ABS;
2572 else
2573 remnantTemp = ((-progressVal * changeTime) / progressDelta) * deltaHeat;
2574 }
2575 }
2576 else
2577 {
2578 if ((progressDelta < 0 && !m_IsFrozen) || (progressDelta > 0 && m_IsFrozen))
2579 progressVal = (progressDelta * GameConstants.TEMPERATURE_FREEZETHAW_ACCELERATION_COEF) / changeTime + m_FreezeThawProgress;
2580
2581 SetFreezeThawProgress(Math.Clamp(progressVal,0,1));
2582 }
2583
2584 if (remnantTemp >= GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD)//discards tiny values
2585 SetTemperatureDirect(GetTemperature() + remnantTemp);
2586
2587 #ifdef DEVELOPER
2588 if (progressVal > 0 && progressVal < 1)
2589 {
2590 m_LastFTChangeTime = changeTime;
2591 if (!m_IsFrozen)
2592 m_PresumedTimeRemaining = (1 - progressVal) * changeTime;
2593 else
2594 m_PresumedTimeRemaining = progressVal * changeTime;
2595 }
2596 #endif
2597 }
float GetTemperatureFreezeTime()
Определения 3_Game/Entities/EntityAI.c:2458
void SetFrozen(bool frozen)
Определения 3_Game/Entities/EntityAI.c:2496
void SetFreezeThawProgress(float val)
0->1 when freezing, 1->0 when thawing
Определения 3_Game/Entities/EntityAI.c:2481
bool m_IsFrozen
Определения 3_Game/Entities/EntityAI.c:160
float GetTemperatureThawTime()
Определения 3_Game/Entities/EntityAI.c:2463
float GetTemperature()
Определения 3_Game/Entities/EntityAI.c:2413
float m_FreezeThawProgress
Определения 3_Game/Entities/EntityAI.c:162
void SetTemperatureDirect(float value, bool allow_client=false)
Определения 3_Game/Entities/EntityAI.c:2264
float m_InterpolatedFraction
Определения TemperatureData.c:12
float m_UpdateTimeInfo
Определения TemperatureData.c:7
float m_UpdateTimeCoef
Определения TemperatureData.c:8

Перекрестные ссылки Math::Clamp(), GetTemperature(), GetTemperatureFreezeTime(), GetTemperatureThawTime(), Math::Lerp(), m_FreezeThawProgress, TemperatureData::m_InterpolatedFraction, m_IsFrozen, TemperatureData::m_UpdateTimeCoef, TemperatureData::m_UpdateTimeInfo, Math::Max(), SetFreezeThawProgress(), SetFrozen(), SetTemperatureDirect(), GameConstants::TEMP_COEF_COOLING_GLOBAL, GameConstants::TEMPERATURE_FREEZETHAW_ACCELERATION_COEF, GameConstants::TEMPERATURE_FREEZETHAW_LEGACY_COEF, GameConstants::TEMPERATURE_RATE_AVERAGE_ABS, GameConstants::TEMPERATURE_SENSITIVITY_THRESHOLD, GameConstants::TEMPERATURE_TIME_FREEZE_MIN и GameConstants::TEMPERATURE_TIME_THAW_MIN.

Используется в SetTemperatureEx().