210 lines
5.5 KiB
C++
Raw Normal View History

#include "STDInclude.hpp"
2015-12-23 14:45:53 +01:00
namespace Components
{
2016-09-03 15:52:40 +02:00
bool Loader::Pregame = true;
bool Loader::Postgame = false;
bool Loader::Uninitializing = false;
2015-12-23 14:45:53 +01:00
std::vector<Component*> Loader::Components;
2016-09-03 15:52:40 +02:00
bool Loader::IsPregame()
{
return Loader::Pregame;
}
2017-02-24 13:30:31 +01:00
bool Loader::IsPostgame()
{
return Loader::Postgame;
}
bool Loader::IsUninitializing()
{
return Loader::Uninitializing;
}
2015-12-23 14:45:53 +01:00
void Loader::Initialize()
{
2016-09-03 15:52:40 +02:00
Loader::Pregame = true;
Loader::Postgame = false;
Loader::Uninitializing = false;
2017-06-02 15:36:20 +02:00
Utils::Memory::GetAllocator()->clear();
2016-09-03 15:52:40 +02:00
2016-01-04 00:00:07 +01:00
Loader::Register(new Flags());
Loader::Register(new Singleton());
Loader::Register(new Exception()); // install our exception handler as early as posssible to get better debug dumps from startup crashes
2015-12-27 20:05:43 +01:00
2016-02-21 19:57:56 +01:00
Loader::Register(new Auth());
2016-08-15 16:40:30 +02:00
Loader::Register(new Bans());
Loader::Register(new Bots());
2015-12-23 14:45:53 +01:00
Loader::Register(new Dvar());
2016-08-16 20:36:52 +02:00
Loader::Register(new Lean());
2015-12-26 02:51:58 +01:00
Loader::Register(new Maps());
2015-12-31 00:55:08 +01:00
Loader::Register(new News());
2018-10-09 10:53:15 +02:00
Loader::Register(new Node());
2016-02-17 22:21:42 +01:00
Loader::Register(new RCon());
Loader::Register(new Stats());
2015-12-23 22:21:03 +01:00
Loader::Register(new Menus());
2016-06-24 14:49:46 +02:00
Loader::Register(new Toast());
2015-12-25 21:42:35 +01:00
Loader::Register(new Party());
2016-09-18 15:10:23 +02:00
Loader::Register(new Zones());
2016-01-12 00:48:27 +01:00
Loader::Register(new D3D9Ex());
2015-12-23 22:21:03 +01:00
Loader::Register(new Logger());
2016-05-29 16:16:15 +02:00
Loader::Register(new Script());
2016-01-12 14:27:48 +01:00
Loader::Register(new Weapon());
2015-12-23 14:45:53 +01:00
Loader::Register(new Window());
Loader::Register(new Command());
Loader::Register(new Console());
Loader::Register(new Friends());
2017-02-12 19:38:56 +01:00
Loader::Register(new IPCPipe());
2019-12-28 11:43:41 +01:00
Loader::Register(new MapDump());
2016-06-08 17:28:58 +02:00
Loader::Register(new ModList());
Loader::Register(new Monitor());
2015-12-24 16:55:38 +01:00
Loader::Register(new Network());
2018-10-09 10:53:15 +02:00
Loader::Register(new Session());
2016-01-09 20:56:28 +01:00
Loader::Register(new Theatre());
//Loader::Register(new ClanTags());
2016-01-09 03:21:59 +01:00
Loader::Register(new Download());
2016-01-02 02:28:09 +01:00
Loader::Register(new Playlist());
2015-12-23 14:45:53 +01:00
Loader::Register(new RawFiles());
2015-12-23 16:56:02 +01:00
Loader::Register(new Renderer());
2015-12-28 14:08:46 +01:00
Loader::Register(new UIFeeder());
Loader::Register(new UIScript());
2016-02-29 14:47:21 +01:00
Loader::Register(new AntiCheat());
2017-02-04 18:42:12 +01:00
Loader::Register(new Changelog());
2016-01-04 00:00:07 +01:00
Loader::Register(new Dedicated());
2016-01-03 19:28:47 +01:00
Loader::Register(new Discovery());
2016-01-04 00:00:07 +01:00
Loader::Register(new FastFiles());
Loader::Register(new FrameTime());
Loader::Register(new Gametypes());
2015-12-23 16:56:02 +01:00
Loader::Register(new Materials());
Loader::Register(new Scheduler());
Loader::Register(new Threading());
Loader::Register(new CardTitles());
2015-12-24 03:26:46 +01:00
Loader::Register(new FileSystem());
Loader::Register(new ModelSurfs());
2016-09-05 19:55:47 +02:00
Loader::Register(new PlayerName());
2015-12-23 14:45:53 +01:00
Loader::Register(new QuickPatch());
2016-01-08 02:20:55 +01:00
Loader::Register(new ServerInfo());
2015-12-28 04:02:30 +01:00
Loader::Register(new ServerList());
Loader::Register(new SlowMotion());
2016-10-26 18:57:43 +02:00
Loader::Register(new ArenaLength());
2016-01-12 21:17:55 +01:00
Loader::Register(new StringTable());
2016-01-05 00:49:34 +01:00
Loader::Register(new ZoneBuilder());
2015-12-23 22:21:03 +01:00
Loader::Register(new AssetHandler());
2015-12-25 23:17:29 +01:00
Loader::Register(new Localization());
2017-06-18 12:36:19 +02:00
//Loader::Register(new MusicalTalent());
Loader::Register(new ServerCommands());
2016-01-13 01:29:22 +01:00
Loader::Register(new StructuredData());
2015-12-30 00:16:33 +01:00
Loader::Register(new ConnectProtocol());
Loader::Register(new StartupMessages());
2021-08-14 00:27:19 +02:00
Loader::Register(new SoundMutexFix());
Loader::Register(new Gamepad());
Loader::Register(new Chat());
Loader::Register(new TextRenderer());
Loader::Register(new Movement());
2021-11-29 12:26:53 +00:00
Loader::Register(new Elevators());
Loader::Register(new ClientCommand());
2022-01-23 19:32:20 +00:00
Loader::Register(new ScriptExtension());
2016-09-03 15:52:40 +02:00
Loader::Pregame = false;
2015-12-23 14:45:53 +01:00
}
void Loader::Uninitialize()
{
Loader::Uninitializing = true;
2017-02-24 13:30:31 +01:00
Loader::PreDestroyNoPostGame();
2016-01-28 21:37:48 +01:00
std::reverse(Loader::Components.begin(), Loader::Components.end());
2015-12-23 14:45:53 +01:00
for (auto component : Loader::Components)
{
2016-08-14 16:18:44 +02:00
#ifdef DEBUG
2017-07-03 15:40:32 +02:00
if (!Loader::IsPerformingUnitTests())
2016-09-16 11:04:28 +02:00
{
Logger::Print("Unregistering component: %s\n", component->getName().data());
2016-09-16 11:04:28 +02:00
}
2016-08-14 16:18:44 +02:00
#endif
2015-12-23 14:45:53 +01:00
delete component;
}
Loader::Components.clear();
2017-06-02 15:36:20 +02:00
Utils::Memory::GetAllocator()->clear();
Loader::Uninitializing = false;
2015-12-23 14:45:53 +01:00
}
void Loader::PreDestroy()
{
if (!Loader::Postgame)
{
Loader::Postgame = true;
2017-02-24 13:30:31 +01:00
auto components = Loader::Components;
std::reverse(components.begin(), components.end());
for (auto component : components)
{
component->preDestroy();
}
}
}
2017-02-24 13:30:31 +01:00
void Loader::PreDestroyNoPostGame()
{
if (!Loader::Postgame)
{
auto components = Loader::Components;
std::reverse(components.begin(), components.end());
for (auto component : components)
{
component->preDestroy();
}
Loader::Postgame = true;
}
}
bool Loader::PerformUnitTests()
{
bool result = true;
Logger::Print("Performing unit tests for components:\n");
for (auto component : Loader::Components)
{
2016-09-16 11:04:28 +02:00
#if defined(DEBUG) || defined(FORCE_UNIT_TESTS)
Logger::Print("Testing '%s'...\n", component->getName().data());
2016-08-15 17:07:32 +02:00
#endif
auto startTime = std::chrono::high_resolution_clock::now();
bool testRes = component->unitTest();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - startTime).count();
2016-02-18 21:33:19 +01:00
Logger::Print("Test done (%llims): %s\n\n", duration, (testRes ? "Success" : "Error"));
result &= testRes;
}
return result;
}
2017-07-12 11:37:23 +02:00
bool Loader::IsPerformingUnitTests()
{
2016-02-19 23:57:06 +01:00
#if defined(DEBUG) || defined(FORCE_UNIT_TESTS)
return Flags::HasFlag("tests");
#else
return false;
#endif
}
2015-12-23 14:45:53 +01:00
void Loader::Register(Component* component)
{
if (component)
{
#if defined(DEBUG) || defined(FORCE_UNIT_TESTS)
2017-07-03 15:40:32 +02:00
if (!Loader::IsPerformingUnitTests())
2016-09-16 11:04:28 +02:00
{
Logger::Print("Component registered: %s\n", component->getName().data());
2016-09-16 11:04:28 +02:00
}
2016-08-14 16:18:44 +02:00
#endif
2015-12-23 14:45:53 +01:00
Loader::Components.push_back(component);
}
}
}