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

◆ DepleteStaminaEx()

void StaminaHandler::DepleteStaminaEx ( EStaminaModifiers modifier,
float dT = -1,
float coef = 1.0 )
inlineprotected

run cooldown right after depletion

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

1145 {
1146 #ifdef DIAG_DEVELOPER
1147 if (m_StaminaDisabled)
1148 return;
1149 #endif
1150 float val = 0.0;
1151 float current_time = m_Player.GetSimulationTimeStamp();
1152 float valueProgress;
1153 StaminaModifier sm = m_StaminaModifiers.GetModifierData(modifier);
1154
1155 // select by modifier type and drain stamina
1156 switch (sm.GetType())
1157 {
1158 case m_StaminaModifiers.FIXED:
1159 if (dT == -1)
1160 {
1161 dT = 1;
1162 }
1163 m_StaminaDepletion += sm.GetMaxValue() * dT * coef;
1164
1165 break;
1166
1167 case m_StaminaModifiers.RANDOMIZED:
1168 val = Math.RandomFloat(sm.GetMinValue(), sm.GetMaxValue());
1169 m_StaminaDepletion += val * coef;
1170
1171 break;
1172
1173 case m_StaminaModifiers.LINEAR:
1174 if (!sm.IsInUse())
1175 {
1176 sm.SetStartTime(current_time + sm.GetStartTimeAdjustment()/dT);
1177 sm.SetRunTimeTick(dT);
1178 sm.SetInUse(true);
1179 }
1180 valueProgress = Math.Clamp((current_time - sm.GetStartTime())/sm.GetDurationAdjusted(), 0, 1 );
1181 val = Math.Lerp(sm.GetMinValue(), sm.GetMaxValue(), valueProgress);
1182 m_StaminaDepletion += val * coef;
1183
1184 break;
1185
1186 case m_StaminaModifiers.EXPONENTIAL:
1187 StaminaModifierExponential smex;
1188 if (!Class.CastTo(smex,sm))
1189 {
1190 ErrorEx("StaminaModifierExponential not found for modifier type: " + sm.GetType());
1191 break;
1192 }
1193
1194 if (!smex.IsInUse())
1195 {
1196 smex.SetStartTime(current_time + smex.GetStartTimeAdjustment()/dT);
1197 smex.SetRunTimeTick(dT);
1198 smex.SetInUse(true);
1199 }
1200 valueProgress = Math.Clamp((current_time - smex.GetStartTime())/smex.GetDurationAdjusted(), 0, 1 );
1201 float exp;
1202 if (Math.AbsFloat(smex.GetBaseValue()) < 1)
1203 {
1204 exp = 1 - Math.Lerp(0, smex.GetExponent(), valueProgress);
1205 val = Math.Pow(smex.GetBaseValue(),exp);
1206 }
1207 else
1208 {
1209 exp = Math.Lerp(Math.Min(0, smex.GetExponent()), Math.Max(0, smex.GetExponent()), valueProgress);
1210 val = Math.Pow(smex.GetBaseValue(),exp) + smex.GetBaseValue() - 1;
1211 }
1212
1213 m_StaminaDepletion += val * smex.GetMultiplier() * coef;
1214
1215 break;
1216 }
1217
1219 SetCooldown(sm.GetCooldown(),modifier);
1220
1222 m_StaminaDepletion = Math.Clamp(m_StaminaDepletion, 0, CfgGameplayHandler.GetStaminaMax());
1223 }
void StaminaModifier(int type, float min, float max, float cooldown, float startTime=0, float duration=0)
Определения StaminaHandler.c:141
float m_StaminaDepletionMultiplier
Определения StaminaHandler.c:279
ref StaminaModifiers m_StaminaModifiers
Определения StaminaHandler.c:298
PlayerBase m_Player
Определения StaminaHandler.c:285
float m_StaminaDepletion
Определения StaminaHandler.c:278
void SetCooldown(float time, int modifier=-1)
set cooldown timer between each consume of stamina
Определения StaminaHandler.c:1034
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().

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