16TFLOAT TScheduler::s_MaxTimeDeltaAllowed = 0.25f;
17TFLOAT TScheduler::s_DebugSlowMaxTimeDeltaAllowed = 1.0f;
23 m_MaxDeltaTime = 0.25f;
25 m_fnDeltaTimeCalculator =
TNULL;
26 m_UseDebugDeltaTime =
TFALSE;
27 m_DebugDeltaTime = 0.01f;
28 m_UseDebugDeltaTimeMult =
TFALSE;
29 m_DebugDeltaTimeMult = 1.0f;
44 m_TaskTree.InsertAtRoot( pTask );
46 if ( pParent !=
TNULL )
48 m_TaskTree.Remove( pTask,
TFALSE );
49 m_TaskTree.Insert( pParent, pTask );
63 m_DeltaTime = fDeltaTime;
64 m_TotalTime += fDeltaTime;
68 if ( m_DeltaTime >= 0.0f )
70 if ( m_DeltaTime >= m_MaxDeltaTime )
72 m_DeltaTime = m_MaxDeltaTime;
80 if ( m_fnDeltaTimeCalculator )
82 m_DeltaTime = m_fnDeltaTimeCalculator( m_DeltaTime );
85 if ( m_UseDebugDeltaTime )
87 m_DeltaTime = m_DebugDeltaTime;
90 if ( m_UseDebugDeltaTimeMult )
92 m_DeltaTime *= m_DebugDeltaTimeMult;
95 DestroyDyingTasks( m_TaskTree.ChildOfRoot() );
96 UpdateActiveTasks( m_TaskTree.ChildOfRoot() );
99void TScheduler::DeleteTaskAtomic(
TTask* task )
107 taskParent = task->
Parent();
118 TTask* node = task->
Child()->Child();
120 while ( node !=
TNULL )
123 DeleteTaskAtomic( node );
130 m_TaskTree.Remove( task,
TFALSE );
133 if ( taskParent !=
TNULL )
140void TScheduler::DestroyDyingTasks(
TTask* task )
144 TTask* currentTask = task->
Prev();
146 while ( currentTask !=
TNULL )
148 TTask* nextTask = ( currentTask->
Prev() != task ) ? currentTask->
Prev() :
TNULL;
154 DestroyDyingTasks( currentTask->
Child() );
162 currentTask = nextTask;
167void TScheduler::UpdateActiveTasks(
TTask* task )
169 TTask* currentTask = task;
171 while ( currentTask !=
TNULL )
173 TTask* nextTask = ( currentTask->
Next() != task ) ? currentTask->
Next() :
TNULL;
178 recurse = currentTask->
OnUpdate( m_DeltaTime );
181 if ( currentTask->
Child() !=
TNULL && recurse )
183 UpdateActiveTasks( currentTask->
Child() );
186 currentTask = nextTask;
193 m_UseDebugDeltaTimeMult = useDebugDeltaTimeMult;
194 m_DebugDeltaTimeMult = debugDeltaTimeMult;
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
#define TDEFINE_CLASS_NORUNTIME(...)
TSystemManager g_oSystemManager
TFORCEINLINE void Clip(T &rVal, const T &Min, const T &Max)
class TObject * CreateObject() const
TBOOL IsA(TClass *pClass)
TBOOL IsChildOfDefaultRoot() const
void SetDebugDeltaTimeMult(TBOOL useDebugDeltaTimeMult, TFLOAT debugDeltaTimeMult=1.0f)
void DeleteTask(TTask *a_pTask)
TTask * CreateTask(TClass *a_pClass, TTask *a_pParent=nullptr)
virtual void OnChildDied(TClass *a_pClass, TTask *a_pDeletedTask)
virtual TBOOL OnUpdate(TFLOAT a_fDeltaTime)
virtual Toshi::TClass * GetClass() override
virtual TBOOL OnChildDying(TTask *child)