OpenBarnyard
 
Loading...
Searching...
No Matches
AGameStateController.cpp
Go to the documentation of this file.
1#include "pch.h"
3#include "Tasks/ARootTask.h"
4#include "GUI/AGUI2.h"
5#include "AppBoot.h"
6#include "ACheatActivator.h"
7
8//-----------------------------------------------------------------------------
9// Enables memory debugging.
10// Note: Should be the last include!
11//-----------------------------------------------------------------------------
12#include <Core/TMemoryDebugOn.h>
13
15
17
19 : m_UnkVector( m_VectorData, TARRAYSIZE( m_VectorData ), 0 )
20{
21 // Incomplete
22 m_eFlags = 0;
23 m_fOverlayGoal = 0.0f;
24}
25
27{
28 TASSERT( m_oStates.Size() == 0 );
29}
30
32{
33 InsertGameState( new AGameState );
34
35 TFLOAT fWidth, fHeight;
36 AGUI2::GetSingleton()->GetDimensions( fWidth, fHeight );
37
38 m_oOverlay.SetDimensions( fWidth, fHeight );
40 m_oOverlay.SetInFront();
41 m_oOverlay.Hide();
42
43 return TTRUE;
44}
45
47{
48 auto eFlags = m_eFlags;
49
50 if ( eFlags & 0x10 )
51 {
52 m_eFlags = eFlags & 0xffef;
53
54 if ( HASANYFLAG( eFlags, 0x1000 ) )
55 {
56 TTODO( "FUN_00424000(false)" );
57 return TTRUE;
58 }
59 else
60 {
61 TTODO( "FUN_00423de0((TCHAR *)0x0,true,(TPooledString8 *)0x0)" );
62 return TTRUE;
63 }
64 }
65
66 if ( m_oStates.Size() > 1 )
67 {
68 TTODO( "This section" );
69
70 if ( !HASANYFLAG( m_eFlags, 7 ) )
71 {
72 ( *m_oStates.Back() )->OnUpdate( a_fDeltaTime );
73 }
74 }
75
77 return TTRUE;
78}
79
81{
82 TASSERT( m_oStates.Size() == 1 );
83
84 auto pGameState = *m_oStates.Back();
85 m_oStates.PopBack();
86
87 pGameState->Destroy();
88}
89
90void AGameStateController::InsertGameState( AGameState* a_pGameState )
91{
94 );
95
96 m_oStates.PushBack( a_pGameState );
97 a_pGameState->OnInsertion();
98 a_pGameState->Activate();
99}
100
102{
103 if ( m_oStates.Size() > 1 )
104 {
105 auto pCurrentGameState = *m_oStates.Back();
106 m_oStates.PopBack();
107
108 pCurrentGameState->Destroy();
109 }
110
111 InsertGameState( a_pGameState );
112}
113
115{
116 if ( m_oStates.Size() > 1 )
117 {
118 ( *m_oStates.Back() )->Deactivate();
119 ( *m_oStates.Back() )->Suspend();
120 }
121
122 InsertGameState( a_pGameState );
123}
124
126{
127 auto pCurrentGameState = *m_oStates.Back();
128
129 TASSERT( a_pGameState == pCurrentGameState );
130 m_oStates.PopBack();
131
132 pCurrentGameState->Destroy();
133
134 if ( m_oStates.Size() == 1 && ARootTask::GetSingleton()->IsGameSystemCreated() )
135 {
136 g_oTheApp.Destroy();
137 return;
138 }
139
140 if ( m_oStates.Size() > 1 )
141 {
142 pCurrentGameState = *m_oStates.Back();
143 pCurrentGameState->OnResume( a_pGameState );
144 pCurrentGameState->Activate();
145 }
146}
147
149{
150 TASSERT( m_oStates.Size() > 1 );
151
152 if ( m_oStates.Size() > 1 )
153 {
154 PopState( *m_oStates.Back() );
155 }
156}
157
159{
160 TBOOL bAddOverlay = TFALSE;
161
162 if ( m_oStates.Size() > 1 && ( *m_oStates.Back() )->GetOverlay() != AGameState::OVERLAY_1 )
163 {
164 OverlayData* pOverlay = GetOverlayParams( ( *m_oStates.Back() )->GetOverlay() );
165 m_oOverlay.SetColour( TCOLOR_ALPHA( pOverlay->uiColorR, pOverlay->uiColorG, pOverlay->uiColorB, pOverlay->uiColorA ) );
166
167 bAddOverlay = TTRUE;
168 }
169
170 m_oOverlay.RemoveSelf();
171
172 if ( bAddOverlay )
173 {
174 AGUI2::GetRootElement()->AddChildTail( m_oOverlay );
175 m_oOverlay.Show();
176 }
177 else
178 {
179 m_oOverlay.Hide();
180 }
181}
182
184{
186 m_eFlags = 0;
187
188 TBOOL bIsFirst = TTRUE;
189
190 while ( 1 < m_oStates.Size() )
191 {
192 auto pGameState = *m_oStates.Back();
193 m_oStates.PopBack();
194
195 pGameState->Destroy( bIsFirst );
196 bIsFirst = TFALSE;
197 }
198}
199
201{
202 m_eFlags |= a_eFlags;
203 m_fSoundVolume = 1.0f;
204
205 if ( !( m_eFlags & 256 ) )
206 {
207 m_fOverlayGoal = 0.0f;
208 m_fOverlayAlpha = ( a_eFlags == 4 ) ? 1.0f : 0.0f;
209 }
210 else
211 {
212 m_fOverlayAlpha = m_fOverlayGoal;
213 m_eFlags &= 0xfeff;
214 }
215
216 OverlayData oData;
217 oData.uiColorA = TUINT8( m_fOverlayAlpha * 255.0f );
218 oData.uiColorR = 0;
219 oData.uiColorG = 0;
220 oData.uiColorB = 0;
222
223 ( *m_oStates.Back() )->SetOverlay( AGameState::OVERLAY_3 );
225}
226
228{
229 TASSERT( a_eOverlay < AGameState::OVERLAY_NUMOF );
230 ms_aOverlays[ a_eOverlay ] = a_rcParams;
231}
232
234{
235 TASSERT( a_eOverlay < AGameState::OVERLAY_NUMOF );
236 return &ms_aOverlays[ a_eOverlay ];
237}
238
240{
241 if ( m_eFlags & 1 )
242 {
243 return TTRUE;
244 }
245
246 if ( m_oStates.Size() <= 1 )
247 {
248 return TFALSE;
249 }
250
251 if ( ACheatActivator::IsSingletonCreated() )
252 {
253 TIMPLEMENT_D( "Cheat code activation" );
254 }
255
256 auto pGameState = *m_oStates.Back();
257
258 if ( pGameState->SendInputCommands( a_pEvent ) )
259 {
260 return TTRUE;
261 }
262 else
263 {
264 return pGameState->ProcessInput( a_pEvent );
265 }
266}
#define TASSERT(X,...)
Definition Defines.h:138
#define HASANYFLAG(STATE, FLAG)
Definition Defines.h:5
#define TIMPLEMENT_D(DESC)
Definition Defines.h:137
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TTODO(DESC)
Definition Defines.h:134
#define TARRAYSIZE(ARRAY)
Definition Defines.h:70
#define TCOLOR_ALPHA(R, G, B, A)
Definition TColor.h:5
#define TDEFINE_CLASS(...)
Definition TObject.h:120
uint16_t TUINT16
Definition Typedefs.h:15
uint8_t TUINT8
Definition Typedefs.h:17
float TFLOAT
Definition Typedefs.h:4
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
AApplication g_oTheApp
Definition AppBoot.cpp:31
@ AGUI2ATTACHMENT_BOTTOMCENTER
static void Throw(const T &a_rData)
TUINT OVERLAY
Definition AGameState.h:14
void Activate()
virtual void OnInsertion()
OverlayData * GetOverlayParams(AGameState::OVERLAY a_eOverlay)
virtual TBOOL OnUpdate(TFLOAT a_fDeltaTime) override
TBOOL ProcessInput(const Toshi::TInputInterface::InputEvent *a_pEvent)
virtual void OnDestroy() override
void PopState(AGameState *a_pGameState)
void ReplaceState(AGameState *a_pGameState)
void PushState(AGameState *a_pGameState)
void SetFlags(TUINT16 a_eFlags)
virtual TBOOL OnCreate() override
void SetOverlayParams(AGameState::OVERLAY a_eOverlay, const OverlayData &a_rcParams)
static AGUI2Element * GetRootElement()
Definition AGUI2.h:31
void AddChildTail(AGUI2Element &a_rElement)