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

◆ HandleFreezingProgression()

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

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

2557 {
2558 float progressVal = m_FreezeThawProgress;
2559 float progressDelta = 1;
2560
2561 if (deltaHeat > 0)
2562 progressDelta = -1;
2563
2564 if (data.m_UpdateTimeInfo == -1)
2565 progressDelta = (-deltaHeat / GameConstants.TEMPERATURE_RATE_AVERAGE_ABS) * GameConstants.TEMPERATURE_FREEZETHAW_LEGACY_COEF; //reverse-calculate the progress if actual time is not available
2566 else
2567 progressDelta *= data.m_UpdateTimeInfo;
2568
2569 if (progressDelta == 0)
2570 return;
2571
2572 float changeTimeDefault;
2573 float changeTimeMin;
2574 float changeTime;
2575
2576 if (!m_IsFrozen)
2577 {
2578 changeTimeDefault = GetTemperatureFreezeTime();
2579 changeTimeMin = GameConstants.TEMPERATURE_TIME_FREEZE_MIN;
2580 }
2581 else
2582 {
2583 changeTimeDefault = GetTemperatureThawTime();
2584 changeTimeMin = GameConstants.TEMPERATURE_TIME_THAW_MIN;
2585 }
2586
2587 float coef = data.m_UpdateTimeCoef;
2588 if (deltaHeat < 0) //use cooling coef when freezing (mostly just to make sure)
2589 coef = GameConstants.TEMP_COEF_COOLING_GLOBAL;
2590
2591 if (coef != 0)
2592 changeTimeDefault *= 1/coef;
2593
2594 changeTime = Math.Lerp(Math.Max(changeTimeDefault,changeTimeMin),changeTimeMin,data.m_InterpolatedFraction);
2595 progressVal = progressVal + progressDelta / changeTime;
2596
2597 float remnantTemp = 0;
2598 if (!m_IsFrozen && progressVal >= 1)
2599 {
2600 SetFrozen(true);
2601 if (progressVal > 1.0)
2602 {
2603 if (data.m_UpdateTimeInfo == -1)
2604 remnantTemp = (progressVal - 1) * changeTime * GameConstants.TEMPERATURE_RATE_AVERAGE_ABS * -1;
2605 else
2606 remnantTemp = (((progressVal - 1) * changeTime) / progressDelta) * deltaHeat;
2607 }
2608 }
2609 else if (m_IsFrozen && progressVal <= 0)
2610 {
2611 SetFrozen(false);
2612 if (progressVal < 0.0)
2613 {
2614 if (data.m_UpdateTimeInfo == -1)
2615 remnantTemp = -progressVal * changeTime * GameConstants.TEMPERATURE_RATE_AVERAGE_ABS;
2616 else
2617 remnantTemp = ((-progressVal * changeTime) / progressDelta) * deltaHeat;
2618 }
2619 }
2620 else
2621 {
2622 if ((progressDelta < 0 && !m_IsFrozen) || (progressDelta > 0 && m_IsFrozen))
2623 progressVal = (progressDelta * GameConstants.TEMPERATURE_FREEZETHAW_ACCELERATION_COEF) / changeTime + m_FreezeThawProgress;
2624
2625 SetFreezeThawProgress(Math.Clamp(progressVal,0,1));
2626 }
2627
2628 if (remnantTemp >= GameConstants.TEMPERATURE_SENSITIVITY_THRESHOLD)//discards tiny values
2629 SetTemperatureDirect(GetTemperature() + remnantTemp);
2630
2631 #ifdef DEVELOPER
2632 if (progressVal > 0 && progressVal < 1)
2633 {
2634 m_LastFTChangeTime = changeTime;
2635 if (!m_IsFrozen)
2636 m_PresumedTimeRemaining = (1 - progressVal) * changeTime;
2637 else
2638 m_PresumedTimeRemaining = progressVal * changeTime;
2639 }
2640 #endif
2641 }
float GetTemperatureFreezeTime()
void SetFrozen(bool frozen)
void SetFreezeThawProgress(float val)
0->1 when freezing, 1->0 when thawing
bool m_IsFrozen
float GetTemperatureThawTime()
float GetTemperature()
float m_FreezeThawProgress
void SetTemperatureDirect(float value, bool allow_client=false)
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().