OpenBarnyard
 
Loading...
Searching...
No Matches
AppBoot.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include <Toshi/Toshi.h>
3#include <Toshi/TScheduler.h>
4#include <Toshi/TPString8.h>
5
7
10
12
13#ifdef TOSHI_SKU_WINDOWS
17#endif // TOSHI_SKU_WINDOWS
18
19#include "AppBoot.h"
21#include "Tasks/ADummyTask.h"
23#include "GUI/AGUI2.h"
24
25//-----------------------------------------------------------------------------
26// Enables memory debugging.
27// Note: Should be the last include!
28//-----------------------------------------------------------------------------
29#include <Core/TMemoryDebugOn.h>
30
32
34
35#ifndef TOSHI_FINAL
36# define TOSHI_ENTRY int main( int argc, TCHAR** argv )
37#else
38# define TOSHI_ENTRY int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, INT cmdShow )
39#endif
40
41static const TCHAR* GetOSName( OSVERSIONINFOEX& osVersionInfo )
42{
43 TBOOL isWorkstation = osVersionInfo.wProductType == VER_NT_WORKSTATION;
44
45 if ( osVersionInfo.dwMajorVersion == 10 )
46 return isWorkstation ? "Windows 10" : "Windows Server 2016";
47
48 if ( osVersionInfo.dwMajorVersion == 6 )
49 {
50 if ( osVersionInfo.dwMinorVersion == 0 )
51 return isWorkstation ? "Windows Vista" : "Windows Server 2008";
52
53 if ( osVersionInfo.dwMinorVersion == 1 )
54 return isWorkstation ? "Windows 7" : "Windows Server 2008 R2";
55
56 if ( osVersionInfo.dwMinorVersion == 2 )
57 return isWorkstation ? "Windows 8" : "Windows Server 2012";
58
59 if ( osVersionInfo.dwMinorVersion == 3 )
60 return isWorkstation ? "Windows 8.1" : "Windows Server 2012 R2";
61 }
62
63 return "unknown";
64}
65
67{
68 static AToshiClassReferenceHelper s_ToshiClassReferencer;
69 static TMemoryInitialiser s_MemoryInitialiser;
70
71 TCHAR* szCommandLine = GetCommandLineA();
72
73 TUtil::TOSHIParams toshiParams;
74 toshiParams.szCommandLine = szCommandLine;
75 toshiParams.szLogFileName = "barnyard";
76
77 TUtil::ToshiCreate( toshiParams );
78
79 g_oSystemManager.SetQuitCallback( []() {
81 exit( 0 );
82 } );
83
85 TUtil::Log( "Build Version %s\n", "0.28" );
86
87 OSVERSIONINFOEX osVersionInfo = { sizeof( osVersionInfo ) };
88
89 const TCHAR* osName = "unknown";
90 HMODULE ntdll = GetModuleHandleW( L"ntdll.dll" );
91
92 if ( ntdll != NULL )
93 {
94 typedef void( WINAPI * t_RtlGetVersion )( OSVERSIONINFOEX* );
95 auto RtlGetVersion = TREINTERPRETCAST( t_RtlGetVersion, GetProcAddress( ntdll, "RtlGetVersion" ) );
96
97 if ( RtlGetVersion != NULL )
98 {
99 RtlGetVersion( &osVersionInfo );
100 osName = GetOSName( osVersionInfo );
101 }
102 }
103
104 TUtil::Log( "Command Line: %s\n", szCommandLine );
105 TUtil::Log( "OS Name: %s\n", osName );
106 TUtil::Log( "OS Version: %d.%d Build:%d %s\n", osVersionInfo.dwMajorVersion, osVersionInfo.dwMinorVersion, osVersionInfo.dwBuildNumber, osVersionInfo.szCSDVersion );
107
108 TUtil::GetGlobalMutex() = CreateMutexA( NULL, TTRUE, "BARNYARD" );
109
110 if ( GetLastError() == ERROR_ALREADY_EXISTS )
111 {
112 MessageBoxA( NULL, "Game is already running", "Barnyard", MB_OK );
113 return 0;
114 }
115
116 if ( g_oTheApp.Create( "The Barnyard - (c) Blue Tongue Entertainment", 0, 0 ) )
117 {
118 g_oTheApp.Execute();
119 }
120
122
123 return 0;
124}
125
126// $Barnyard: FUNCTION 00404390
127static TBOOL CreateStringPool()
128{
129 auto pStringPool = new TPString8Pool( 1024, 0, AMemory::GetAllocator( AMemory::POOL_StringPool ), TNULL );
130
131 TUtil::SetTPStringPool( pStringPool );
132 pStringPool->InitialiseStatic();
133
134 return TTRUE;
135}
136
137// $Barnyard: FUNCTION 00404370
138// $Barnyard: FUNCTION 00404010
142
143// $Barnyard: FUNCTION 004045a0
145{
146 TINFO( "Starting Barnyard...\n" );
147
148 // Create string pool before anything else
149 if ( !CreateStringPool() )
150 return TFALSE;
151
152 ALocaleManager* pLocaleManager = T2Locale::CreateSingleton<ALocaleManager>();
153
154 // Intialise free lists for rendering objects
155 TPooledString8::SetupFreeList( 0, 0 ); // prevent the freelist from being used
159
160 TTODO( "Create some instances of some classes" );
161
163 pLocaleManager->SetLanguage( ALocaleManager::Lang_EnglishUK );
164
165 auto pScheduler = g_oSystemManager.GetScheduler();
166
167 m_pRenderTask = pScheduler->CreateTask<ADummyTask>();
168 m_pRenderTask->Create();
169 m_pRenderTask->Activate( TTRUE );
170 m_pRenderTask->SetName( "RenderTask" );
171
172 m_pUpdate3Task = pScheduler->CreateTask<ADummyTask>();
173 m_pUpdate3Task->Create();
174 m_pUpdate3Task->Activate( TTRUE );
175 m_pUpdate3Task->SetName( "Update3" );
176
177 m_pUpdate2Task = pScheduler->CreateTask<ADummyTask>();
178 m_pUpdate2Task->Create();
179 m_pUpdate2Task->Activate( TTRUE );
180 m_pUpdate2Task->SetName( "Update2" );
181
182 m_pUpdate1Task = pScheduler->CreateTask<ADummyTask>();
183 m_pUpdate1Task->Create();
184 m_pUpdate1Task->Activate( TTRUE );
185 m_pUpdate1Task->SetName( "Update1" );
186
187 m_pInputTask = pScheduler->CreateTask<ADummyTask>();
188 m_pInputTask->Create();
189 m_pInputTask->Activate( TTRUE );
190 m_pInputTask->SetName( "InputTask" );
191
192 m_pRootTask = pScheduler->CreateTask<ARootTask>();
193
194 if ( m_pRootTask != TNULL )
195 {
196 if ( TFALSE == m_pRootTask->Create() )
197 return TFALSE;
198
199 m_pRootTask->Activate( TTRUE );
200 }
201
202 return TApplication::OnCreate( argc, argv );
203}
Input system interface for the Toshi engine.
Rendering system interface for the Toshi engine.
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TINFO(...)
Definition Defines.h:151
#define TTODO(DESC)
Definition Defines.h:134
Main header file for the Toshi game engine.
char TCHAR
Definition Typedefs.h:20
#define TNULL
Definition Typedefs.h:23
#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
#define TOSHI_ENTRY
Definition AppBoot.cpp:36
TSystemManager g_oSystemManager
Definition TSystem.cpp:15
static void SetupFreeList(TINT a_iCapacity, TINT a_iGrowSize)
static void SetupFreeList(TINT a_iCapacity, TINT a_iGrowSize)
static void SetupFreeList(TINT a_iCapacity, TINT a_iGrowSize)
static void Initialise()
virtual TBOOL OnCreate(TINT argc, TCHAR **argv)
static void SetupFreeList(TINT a_iCapacity, TINT a_iGrowSize)
Definition TPString8.h:26
static void Log(const TCHAR *a_szFormat,...)
Definition TUtil.cpp:65
static TBOOL ToshiCreate(const TOSHIParams &a_rToshiParams)
Definition TUtil.cpp:149
static TPString8Pool * SetTPStringPool(TPString8Pool *a_pStringPool)
Definition TUtil.h:121
static TMutex & GetGlobalMutex()
Definition TUtil.h:119
static void ToshiDestroy()
Definition TUtil.cpp:167
const TCHAR * szCommandLine
Definition TUtil.h:61
const TCHAR * szLogFileName
Definition TUtil.h:62
ADummyTask * m_pUpdate3Task
Definition AppBoot.h:21
ADummyTask * m_pUpdate1Task
Definition AppBoot.h:19
ADummyTask * m_pRenderTask
Definition AppBoot.h:22
ARootTask * m_pRootTask
Definition AppBoot.h:17
ADummyTask * m_pUpdate2Task
Definition AppBoot.h:20
virtual TBOOL OnCreate(int argc, TCHAR **argv) override
Definition AppBoot.cpp:144
ADummyTask * m_pInputTask
Definition AppBoot.h:18
@ POOL_StringPool
Definition AMemory.h:34
static Toshi::T2Allocator * GetAllocator(POOL a_ePool)
Definition AMemory.cpp:31
static void CreatePool(POOL a_ePool)
Definition AMemory.cpp:12