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

◆ DepleteStamina()

void StaminaHandler::DepleteStamina ( EStaminaModifiers modifier,
float dT = -1 )
inlineprotected

run cooldown right after depletion

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

971 {
972 #ifdef DIAG_DEVELOPER
973 if (m_StaminaDisabled)
974 return;
975 #endif
976 float val = 0.0;
977 float current_time = m_Player.GetSimulationTimeStamp();
978 float valueProgress;
979 StaminaModifier sm = m_StaminaModifiers.GetModifierData(modifier);
980
981 // select by modifier type and drain stamina
982 switch (sm.GetType())
983 {
984 case m_StaminaModifiers.FIXED:
985 if (dT == -1)
986 {
987 dT = 1;
988 }
989 m_StaminaDepletion = m_StaminaDepletion + sm.GetMaxValue() * dT;
990
991 break;
992
993 case m_StaminaModifiers.RANDOMIZED:
994 val = Math.RandomFloat(sm.GetMinValue(), sm.GetMaxValue());
996
997 break;
998
999 case m_StaminaModifiers.LINEAR:
1000 if (!sm.IsInUse())
1001 {
1002 sm.SetStartTime(current_time + sm.GetStartTimeAdjustment()/dT);
1003 sm.SetRunTimeTick(dT);
1004 sm.SetInUse(true);
1005 }
1006 valueProgress = Math.Clamp((current_time - sm.GetStartTime())/sm.GetDurationAdjusted(), 0, 1 );
1007 val = Math.Lerp(sm.GetMinValue(), sm.GetMaxValue(), valueProgress);
1009
1010 break;
1011
1012 case m_StaminaModifiers.EXPONENTIAL:
1013 StaminaModifierExponential smex;
1014 if (!Class.CastTo(smex,sm))
1015 {
1016 ErrorEx("StaminaModifierExponential not found for modifier type: " + sm.GetType());
1017 break;
1018 }
1019
1020 if (!smex.IsInUse())
1021 {
1022 smex.SetStartTime(current_time + smex.GetStartTimeAdjustment()/dT);
1023 smex.SetRunTimeTick(dT);
1024 smex.SetInUse(true);
1025 }
1026 valueProgress = Math.Clamp((current_time - smex.GetStartTime())/smex.GetDurationAdjusted(), 0, 1 );
1027 float exp;
1028 if (Math.AbsFloat(smex.GetBaseValue()) < 1)
1029 {
1030 exp = 1 - Math.Lerp(0, smex.GetExponent(), valueProgress);
1031 val = Math.Pow(smex.GetBaseValue(),exp);
1032 }
1033 else
1034 {
1035 exp = Math.Lerp(Math.Min(0, smex.GetExponent()), Math.Max(0, smex.GetExponent()), valueProgress);
1036 val = Math.Pow(smex.GetBaseValue(),exp) + smex.GetBaseValue() - 1;
1037 }
1038
1041
1042 break;
1043 }
1044
1046 SetCooldown(sm.GetCooldown(),modifier);
1047 m_StaminaDepletion = Math.Clamp(m_StaminaDepletion, 0, CfgGameplayHandler.GetStaminaMax());
1048
1050 }
void StaminaModifier(int type, float min, float max, float cooldown, float startTime=0, float duration=0)
Определения StaminaHandler.c:141
float m_StaminaDepletionMultiplier
Определения StaminaHandler.c:268
ref StaminaModifiers m_StaminaModifiers
Определения StaminaHandler.c:289
PlayerBase m_Player
Определения StaminaHandler.c:274
float m_StaminaDepletion
Определения StaminaHandler.c:267
void SetCooldown(float time, int modifier=-1)
set cooldown timer between each consume of stamina
Определения StaminaHandler.c:853
override float GetStartTimeAdjustment()
Определения StaminaHandler.c:188
float GetExponent()
Определения StaminaHandler.c:185
float GetMultiplier()
Определения StaminaHandler.c:186
float GetBaseValue()
Определения StaminaHandler.c:184
override float GetDurationAdjusted()
Определения StaminaHandler.c:190
enum ShapeType ErrorEx

Перекрестные ссылки Math::AbsFloat(), Class::CastTo(), Math::Clamp(), ErrorEx, StaminaModifierExponential::GetBaseValue(), StaminaModifierExponential::GetDurationAdjusted(), StaminaModifierExponential::GetExponent(), StaminaModifierExponential::GetMultiplier(), CfgGameplayHandler::GetStaminaMax(), StaminaModifierExponential::GetStartTimeAdjustment(), Math::Lerp(), m_Player, m_StaminaDepletion, m_StaminaDepletionMultiplier, m_StaminaModifiers, Math::Max(), Math::Min(), Math::Pow(), Math::RandomFloat(), SetCooldown() и StaminaModifier().