Files
GTASource/game/frontend/TimeWarper.cpp
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

69 lines
1.7 KiB
C++

#include "TimeWarper.h"
#include "fwsys/timer.h"
#if __BANK
#include "bank/group.h"
#endif
//OPTIMISATIONS_OFF()
static BankFloat SLOWED_TIME_WARP = 0.1f;
//////////////////////////////////////////////////////////////////////////
void CTimeWarper::Reset(TW_Dir whichDir)
{
float fTargetWarp = (whichDir==TW_Normal) ? NORMAL_TIME_WARP : SLOWED_TIME_WARP;
if( WarpTime(fTargetWarp) )
{
m_TargetReachedCB.Call();
}
SetCallback(NullCB);
}
bool CTimeWarper::WarpTime(float fNewTime)
{
if( m_fLastTimeWarp != fNewTime )
{
fwTimer::SetTimeWarpUI(fNewTime);
m_fLastTimeWarp = fNewTime;
return false;
}
return true;
}
void CTimeWarper::SetTargetTimeWarp(TW_Dir whichDir)
{
float fTargetWarp = (whichDir==TW_Normal) ? NORMAL_TIME_WARP : SLOWED_TIME_WARP;
if( m_fLastTimeWarp != fTargetWarp )
{
u32 lastFrameTime = fwTimer::GetTimeInMilliseconds_NonScaledClipped() - fwTimer::GetPrevElapsedTimeInMilliseconds_NonScaledClipped();
float fTimeRate = ((NORMAL_TIME_WARP - SLOWED_TIME_WARP) / m_fLerpTimeMS) * float(lastFrameTime);
float fNewTime = m_fLastTimeWarp + Selectf(fTargetWarp-NORMAL_TIME_WARP, fTimeRate,-fTimeRate);
fNewTime = Clamp(fNewTime, SLOWED_TIME_WARP, NORMAL_TIME_WARP);
if( WarpTime(fNewTime) )
{
m_TargetReachedCB.Call();
SetCallback(NullCB);
}
}
else
{
m_TargetReachedCB.Call();
SetCallback(NullCB);
}
}
#if __BANK
void CTimeWarper::AddWidgets(bkGroup* pOwningGroup)
{
pOwningGroup->AddTitle("Time Warp");
pOwningGroup->AddSlider("Last Set", &m_fLastTimeWarp, 0.0f, 1.0f, 0.1f);
pOwningGroup->AddSlider("TUNE: Lerp Time", &m_fLerpTimeMS, 0, 10000, 100);
pOwningGroup->AddSlider("TUNE: Slow Warp", &SLOWED_TIME_WARP, 0.0f, 1.0f, 0.1f);
}
#endif