OpenBarnyard
 
Loading...
Searching...
No Matches
TScheduler Class Reference

#include <TScheduler.h>

Inheritance diagram for TScheduler:
TObject

Public Types

using ThisClass = TScheduler
 
using BaseClass = TObject
 
using t_DeltaTimeCalculator = TFLOAT ( * )( TFLOAT a_fRealDT )
 
- Public Types inherited from TObject
enum  { IsTObject = TTRUE }
 

Public Member Functions

virtual Toshi::TClass * GetClass () override
 
 TScheduler ()
 
 ~TScheduler ()
 
TTaskCreateTask (TClass *a_pClass, TTask *a_pParent=nullptr)
 
template<class T>
T * CreateTask (TTask *a_pParent=nullptr)
 
void Update ()
 
TFLOATGetDebugDeltaTime ()
 
TFLOAT GetDebugDeltaTime () const
 
TFLOATGetDebugDeltaTimeMult ()
 
TFLOAT GetDebugDeltaTimeMult () const
 
void SetDebugDeltaTimeMult (TBOOL useDebugDeltaTimeMult, TFLOAT debugDeltaTimeMult=1.0f)
 
void SetDebugDeltaTime (TBOOL useDebugDeltaTime, TFLOAT debugDeltaTime=0.0f)
 
void SetDebugPause (TBOOL pause)
 
void SetDebugSlowTime (TBOOL slowTime)
 
TFLOAT GetCurrentDeltaTime () const
 
TFLOAT GetTotalTime () const
 
TUINT GetFrameCount () const
 
TNodeTree< TTask > * GetTree ()
 
void DeleteTask (TTask *a_pTask)
 
void DestroyTask (TTask *a_pTask)
 
- Public Member Functions inherited from TObject
virtual void Delete ()
 
virtual ~TObject ()
 
TBOOL IsExactly (TClass *a_pClass)
 
TBOOL IsA (TClass *a_pClass)
 

Static Public Member Functions

static Toshi::TObject * CreateTObject ()
 
static Toshi::TObject * CreateTObjectInPlace (void *a_pPtr)
 
static void InitialiseClass ()
 
static void DeinitialiseClass ()
 
static TFORCEINLINE Toshi::TClass * GetClassStatic ()
 
- Static Public Member Functions inherited from TObject
static Toshi::TObject * CreateTObject ()
 
static Toshi::TObject * CreateTObjectInPlace (void *a_pPtr)
 
static void InitialiseClass ()
 
static void DeinitialiseClass ()
 
static TFORCEINLINE TClassGetClassStatic ()
 

Static Public Attributes

static constexpr Toshi::TClass * PARENTCLASS = & TObject::ms_oClass
 
static Toshi::TClass ms_oClass = Toshi::TClass( "TScheduler", TScheduler::PARENTCLASS, TScheduler::CreateTObject, TScheduler::CreateTObjectInPlace, TScheduler::InitialiseClass, TScheduler::DeinitialiseClass, 0, 1, sizeof( TScheduler ), alignof( TScheduler ) )
 
- Static Public Attributes inherited from TObject
static constexpr Toshi::TClass * PARENTCLASS = TNULL
 
static constinit Toshi::TClass ms_oClass = Toshi::TClass( "TObject", TObject::CreateTObject, TObject::CreateTObjectInPlace, TObject::InitialiseClass, TObject::DeinitialiseClass, 0, 2, sizeof( TObject ), alignof( TObject ) )
 

Detailed Description

Definition at line 11 of file TScheduler.h.

Member Typedef Documentation

◆ BaseClass

Definition at line 14 of file TScheduler.h.

◆ t_DeltaTimeCalculator

using TScheduler::t_DeltaTimeCalculator = TFLOAT ( * )( TFLOAT a_fRealDT )

Definition at line 17 of file TScheduler.h.

◆ ThisClass

Definition at line 14 of file TScheduler.h.

Constructor & Destructor Documentation

◆ TScheduler()

TScheduler::TScheduler ( )

Definition at line 19 of file TScheduler.cpp.

20{
21 m_DeltaTime = 0.0f;
22 m_TotalTime = 0.0f;
23 m_MaxDeltaTime = 0.25f;
24 m_uiNumFrames = 0;
25 m_fnDeltaTimeCalculator = TNULL;
26 m_UseDebugDeltaTime = TFALSE;
27 m_DebugDeltaTime = 0.01f;
28 m_UseDebugDeltaTimeMult = TFALSE;
29 m_DebugDeltaTimeMult = 1.0f;
30}
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24

◆ ~TScheduler()

TScheduler::~TScheduler ( )

Definition at line 32 of file TScheduler.cpp.

33{
34 DestroyAllTasks();
35}

Member Function Documentation

◆ CreateTask() [1/2]

TTask * TScheduler::CreateTask ( TClass * a_pClass,
TTask * a_pParent = nullptr )

Definition at line 37 of file TScheduler.cpp.

38{
39 TASSERT( pClass->IsA( &TGetClass( TTask ) ) );
40
41 TTask* pTask = static_cast<TTask*>( pClass->CreateObject() );
42 TASSERT( pTask != TNULL );
43
44 m_TaskTree.InsertAtRoot( pTask );
45
46 if ( pParent != TNULL )
47 {
48 m_TaskTree.Remove( pTask, TFALSE );
49 m_TaskTree.Insert( pParent, pTask );
50 }
51
52 return pTask;
53}
#define TASSERT(X,...)
Definition Defines.h:138
#define TGetClass(CLASS)
Definition TObject.h:13

◆ CreateTask() [2/2]

template<class T>
T * TScheduler::CreateTask ( TTask * a_pParent = nullptr)
inline

Definition at line 26 of file TScheduler.h.

27 {
28 return TSTATICCAST( T, CreateTask( &TGetClass( T ), a_pParent ) );
29 }
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
TTask * CreateTask(TClass *a_pClass, TTask *a_pParent=nullptr)

◆ CreateTObject()

Toshi::TObject * TScheduler::CreateTObject ( )
static

Definition at line 14 of file TScheduler.cpp.

◆ CreateTObjectInPlace()

Toshi::TObject * TScheduler::CreateTObjectInPlace ( void * a_pPtr)
static

Definition at line 14 of file TScheduler.cpp.

◆ DeinitialiseClass()

void TScheduler::DeinitialiseClass ( )
static

Definition at line 14 of file TScheduler.cpp.

◆ DeleteTask()

void TScheduler::DeleteTask ( TTask * a_pTask)
inline

Definition at line 82 of file TScheduler.h.

83 {
84 a_pTask->OnPreDestroy();
85 DeleteTaskRecurse( a_pTask->Child() );
86 DeleteTaskAtomic( a_pTask );
87 }
T * Child() const
Definition TNodeTree.h:37
virtual void OnPreDestroy()
Definition TTask.cpp:85

◆ DestroyTask()

void TScheduler::DestroyTask ( TTask * a_pTask)
inline

Definition at line 89 of file TScheduler.h.

90 {
91 TASSERT( a_pTask->IsDying() );
92 a_pTask->OnPreDestroy();
93
94 DeleteTaskRecurse( a_pTask->Child() );
95 DeleteTaskAtomic( a_pTask->Child() );
96 }
TBOOL IsDying() const
Definition TTask.h:50

◆ GetClass()

Toshi::TClass * TScheduler::GetClass ( )
overridevirtual

Reimplemented from TObject.

Definition at line 14 of file TScheduler.cpp.

◆ GetClassStatic()

static TFORCEINLINE Toshi::TClass * TScheduler::GetClassStatic ( )
inlinestatic

Definition at line 14 of file TScheduler.h.

◆ GetCurrentDeltaTime()

TFLOAT TScheduler::GetCurrentDeltaTime ( ) const
inline

Definition at line 62 of file TScheduler.h.

63 {
64 return m_DeltaTime;
65 }

◆ GetDebugDeltaTime() [1/2]

TFLOAT & TScheduler::GetDebugDeltaTime ( )
inline

Definition at line 33 of file TScheduler.h.

33{ return m_DebugDeltaTime; }

◆ GetDebugDeltaTime() [2/2]

TFLOAT TScheduler::GetDebugDeltaTime ( ) const
inline

Definition at line 34 of file TScheduler.h.

34{ return m_DebugDeltaTime; }

◆ GetDebugDeltaTimeMult() [1/2]

TFLOAT & TScheduler::GetDebugDeltaTimeMult ( )
inline

Definition at line 36 of file TScheduler.h.

36{ return m_DebugDeltaTimeMult; }

◆ GetDebugDeltaTimeMult() [2/2]

TFLOAT TScheduler::GetDebugDeltaTimeMult ( ) const
inline

Definition at line 37 of file TScheduler.h.

37{ return m_DebugDeltaTimeMult; }

◆ GetFrameCount()

TUINT TScheduler::GetFrameCount ( ) const
inline

Definition at line 72 of file TScheduler.h.

73 {
74 return m_uiNumFrames;
75 }

◆ GetTotalTime()

TFLOAT TScheduler::GetTotalTime ( ) const
inline

Definition at line 67 of file TScheduler.h.

68 {
69 return m_TotalTime;
70 }

◆ GetTree()

TNodeTree< TTask > * TScheduler::GetTree ( )
inline

Definition at line 77 of file TScheduler.h.

78 {
79 return &m_TaskTree;
80 }

◆ InitialiseClass()

void TScheduler::InitialiseClass ( )
static

Definition at line 14 of file TScheduler.cpp.

◆ SetDebugDeltaTime()

void TScheduler::SetDebugDeltaTime ( TBOOL useDebugDeltaTime,
TFLOAT debugDeltaTime = 0.0f )
inline

Definition at line 41 of file TScheduler.h.

42 {
43 m_UseDebugDeltaTime = useDebugDeltaTime;
44 m_DebugDeltaTime = debugDeltaTime;
45 }

◆ SetDebugDeltaTimeMult()

void TScheduler::SetDebugDeltaTimeMult ( TBOOL useDebugDeltaTimeMult,
TFLOAT debugDeltaTimeMult = 1.0f )

Definition at line 191 of file TScheduler.cpp.

192{
193 m_UseDebugDeltaTimeMult = useDebugDeltaTimeMult;
194 m_DebugDeltaTimeMult = debugDeltaTimeMult;
195 TMath::Clip( m_DebugDeltaTimeMult, 0.0f, 100.0f );
196}
TFORCEINLINE void Clip(T &rVal, const T &Min, const T &Max)

◆ SetDebugPause()

void TScheduler::SetDebugPause ( TBOOL pause)
inline

Definition at line 47 of file TScheduler.h.

48 {
49 if ( pause )
50 {
51 m_DebugDeltaTime = 0.0f;
52 }
53
54 m_UseDebugDeltaTime = pause;
55 }

◆ SetDebugSlowTime()

void TScheduler::SetDebugSlowTime ( TBOOL slowTime)
inline

Definition at line 57 of file TScheduler.h.

58 {
59 m_MaxDeltaTime = slowTime ? s_DebugSlowMaxTimeDeltaAllowed : s_MaxTimeDeltaAllowed;
60 }

◆ Update()

void TScheduler::Update ( )

Definition at line 55 of file TScheduler.cpp.

56{
57 if ( !g_oSystemManager.ms_bWasEverUpdated )
58 {
59 g_oSystemManager.ms_bWasEverUpdated = TTRUE;
60 }
61
63 m_DeltaTime = fDeltaTime;
64 m_TotalTime += fDeltaTime;
65 m_uiNumFrames += 1;
66
67 // Control delta time
68 if ( m_DeltaTime >= 0.0f )
69 {
70 if ( m_DeltaTime >= m_MaxDeltaTime )
71 {
72 m_DeltaTime = m_MaxDeltaTime;
73 }
74 }
75 else
76 {
77 m_DeltaTime = 0.0f;
78 }
79
80 if ( m_fnDeltaTimeCalculator )
81 {
82 m_DeltaTime = m_fnDeltaTimeCalculator( m_DeltaTime );
83 }
84
85 if ( m_UseDebugDeltaTime )
86 {
87 m_DeltaTime = m_DebugDeltaTime;
88 }
89
90 if ( m_UseDebugDeltaTimeMult )
91 {
92 m_DeltaTime *= m_DebugDeltaTimeMult;
93 }
94
95 DestroyDyingTasks( m_TaskTree.ChildOfRoot() );
96 UpdateActiveTasks( m_TaskTree.ChildOfRoot() );
97}
TSystemManager g_oSystemManager
float TFLOAT
Definition Typedefs.h:4
#define TTRUE
Definition Typedefs.h:25
TFLOAT GetDelta() const
THPTimer & GetTimer()
Definition TSystem.h:150

Member Data Documentation

◆ ms_oClass

Toshi::TClass TScheduler::ms_oClass = Toshi::TClass( "TScheduler", TScheduler::PARENTCLASS, TScheduler::CreateTObject, TScheduler::CreateTObjectInPlace, TScheduler::InitialiseClass, TScheduler::DeinitialiseClass, 0, 1, sizeof( TScheduler ), alignof( TScheduler ) )
static

Definition at line 14 of file TScheduler.h.

◆ PARENTCLASS

Toshi::TClass* TScheduler::PARENTCLASS = & TObject::ms_oClass
staticconstexpr

Definition at line 14 of file TScheduler.h.


The documentation for this class was generated from the following files: