2017-01-20 14:36:52 +01:00
|
|
|
#pragma once
|
|
|
|
|
2015-12-29 02:52:31 +01:00
|
|
|
namespace Components
|
|
|
|
{
|
|
|
|
class Component
|
|
|
|
{
|
|
|
|
public:
|
2022-06-13 17:32:45 +02:00
|
|
|
Component() = default;
|
|
|
|
virtual ~Component() = default;
|
2016-08-15 16:40:30 +02:00
|
|
|
|
2016-09-16 11:04:28 +02:00
|
|
|
#if defined(DEBUG) || defined(FORCE_UNIT_TESTS)
|
2017-05-31 12:02:14 +02:00
|
|
|
virtual std::string getName()
|
|
|
|
{
|
|
|
|
std::string name = typeid(*this).name();
|
|
|
|
Utils::String::Replace(name, "class Components::", "");
|
|
|
|
return name;
|
|
|
|
};
|
2016-08-15 16:40:30 +02:00
|
|
|
#endif
|
|
|
|
|
2017-01-23 22:06:50 +01:00
|
|
|
// It's illegal to spawn threads in DLLMain, and apparently it causes problems if they are destroyed there as well.
|
|
|
|
// This method is called before DLLMain (if possible) and should to destroy threads.
|
|
|
|
// It's not 100% guaranteed that it's called outside DLLMain, as it depends on the game, but it's 100% guaranteed, that it is called at all.
|
2022-05-05 15:03:14 +01:00
|
|
|
virtual void preDestroy() {}
|
|
|
|
virtual bool unitTest() { return true; } // Unit testing entry
|
2015-12-29 02:52:31 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
class Loader
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
static void Initialize();
|
|
|
|
static void Uninitialize();
|
2017-01-23 22:06:50 +01:00
|
|
|
static void PreDestroy();
|
2017-02-24 13:30:31 +01:00
|
|
|
static void PreDestroyNoPostGame();
|
2016-02-04 21:58:49 +01:00
|
|
|
static bool PerformUnitTests();
|
2017-07-03 15:40:32 +02:00
|
|
|
static bool IsPerformingUnitTests();
|
2015-12-29 02:52:31 +01:00
|
|
|
static void Register(Component* component);
|
|
|
|
|
2016-09-03 15:52:40 +02:00
|
|
|
static bool IsPregame();
|
2017-02-24 13:30:31 +01:00
|
|
|
static bool IsPostgame();
|
2017-06-04 13:46:50 +02:00
|
|
|
static bool IsUninitializing();
|
2016-09-03 15:52:40 +02:00
|
|
|
|
2017-05-31 12:02:14 +02:00
|
|
|
template <typename T>
|
|
|
|
static T* GetInstance()
|
|
|
|
{
|
|
|
|
for (auto& component : Loader::Components)
|
|
|
|
{
|
|
|
|
if (typeid(*component) == typeid(T))
|
|
|
|
{
|
|
|
|
return reinterpret_cast<T*>(component);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2015-12-29 02:52:31 +01:00
|
|
|
private:
|
2016-09-03 15:52:40 +02:00
|
|
|
static bool Pregame;
|
2017-01-23 22:06:50 +01:00
|
|
|
static bool Postgame;
|
2017-06-04 13:46:50 +02:00
|
|
|
static bool Uninitializing;
|
2015-12-29 02:52:31 +01:00
|
|
|
static std::vector<Component*> Components;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2017-05-31 15:45:12 +02:00
|
|
|
#include "Modules/Scheduler.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/Auth.hpp"
|
|
|
|
#include "Modules/Bans.hpp"
|
|
|
|
#include "Modules/Bots.hpp"
|
|
|
|
#include "Modules/Dvar.hpp"
|
|
|
|
#include "Modules/Lean.hpp"
|
|
|
|
#include "Modules/Maps.hpp"
|
|
|
|
#include "Modules/News.hpp"
|
|
|
|
#include "Modules/Flags.hpp"
|
|
|
|
#include "Modules/Menus.hpp"
|
|
|
|
#include "Modules/Toast.hpp"
|
|
|
|
#include "Modules/Zones.hpp"
|
|
|
|
#include "Modules/D3D9Ex.hpp"
|
|
|
|
#include "Modules/Script.hpp"
|
|
|
|
#include "Modules/Weapon.hpp"
|
|
|
|
#include "Modules/Window.hpp"
|
|
|
|
#include "Modules/Command.hpp"
|
|
|
|
#include "Modules/Console.hpp"
|
|
|
|
#include "Modules/UIScript.hpp"
|
|
|
|
#include "Modules/ModList.hpp"
|
2017-02-25 15:32:15 +01:00
|
|
|
#include "Modules/Monitor.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/Network.hpp"
|
|
|
|
#include "Modules/Theatre.hpp"
|
2017-05-15 21:57:45 +02:00
|
|
|
#include "Modules/QuickPatch.hpp"
|
2022-04-19 15:26:29 +02:00
|
|
|
#include "Modules/Security.hpp"
|
2018-10-09 10:53:15 +02:00
|
|
|
#include "Modules/Node.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/RCon.hpp"
|
|
|
|
#include "Modules/Party.hpp" // Destroys the order, but requires network classes :D
|
|
|
|
#include "Modules/Logger.hpp"
|
2017-01-25 22:39:00 +01:00
|
|
|
#include "Modules/Friends.hpp"
|
2017-02-12 19:38:56 +01:00
|
|
|
#include "Modules/IPCPipe.hpp"
|
2019-12-28 11:43:41 +01:00
|
|
|
#include "Modules/MapDump.hpp"
|
2018-10-09 10:53:15 +02:00
|
|
|
#include "Modules/Session.hpp"
|
2017-06-14 12:06:04 +02:00
|
|
|
#include "Modules/ClanTags.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/Download.hpp"
|
|
|
|
#include "Modules/Playlist.hpp"
|
|
|
|
#include "Modules/RawFiles.hpp"
|
|
|
|
#include "Modules/Renderer.hpp"
|
|
|
|
#include "Modules/UIFeeder.hpp"
|
2017-02-04 18:42:12 +01:00
|
|
|
#include "Modules/Changelog.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/Dedicated.hpp"
|
|
|
|
#include "Modules/Discovery.hpp"
|
|
|
|
#include "Modules/Exception.hpp"
|
|
|
|
#include "Modules/FastFiles.hpp"
|
|
|
|
#include "Modules/FrameTime.hpp"
|
|
|
|
#include "Modules/Gametypes.hpp"
|
|
|
|
#include "Modules/Materials.hpp"
|
|
|
|
#include "Modules/Singleton.hpp"
|
|
|
|
#include "Modules/Threading.hpp"
|
2017-05-30 13:45:19 +02:00
|
|
|
#include "Modules/CardTitles.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/FileSystem.hpp"
|
|
|
|
#include "Modules/ModelSurfs.hpp"
|
|
|
|
#include "Modules/PlayerName.hpp"
|
|
|
|
#include "Modules/ServerInfo.hpp"
|
|
|
|
#include "Modules/ServerList.hpp"
|
|
|
|
#include "Modules/SlowMotion.hpp"
|
|
|
|
#include "Modules/ArenaLength.hpp"
|
|
|
|
#include "Modules/StringTable.hpp"
|
|
|
|
#include "Modules/ZoneBuilder.hpp"
|
|
|
|
#include "Modules/AssetHandler.hpp"
|
|
|
|
#include "Modules/Localization.hpp"
|
|
|
|
#include "Modules/MusicalTalent.hpp"
|
2017-05-30 14:29:09 +02:00
|
|
|
#include "Modules/ServerCommands.hpp"
|
2017-01-20 14:36:52 +01:00
|
|
|
#include "Modules/StructuredData.hpp"
|
|
|
|
#include "Modules/ConnectProtocol.hpp"
|
2017-01-30 21:57:31 -05:00
|
|
|
#include "Modules/StartupMessages.hpp"
|
2017-02-26 01:36:37 +01:00
|
|
|
#include "Modules/Stats.hpp"
|
2021-08-14 00:27:19 +02:00
|
|
|
#include "Modules/SoundMutexFix.hpp"
|
2021-09-19 13:13:46 +02:00
|
|
|
#include "Modules/Chat.hpp"
|
2021-09-05 02:25:24 +02:00
|
|
|
#include "Modules/TextRenderer.hpp"
|
2021-11-07 11:09:00 +00:00
|
|
|
#include "Modules/Movement.hpp"
|
2021-11-29 12:26:53 +00:00
|
|
|
#include "Modules/Elevators.hpp"
|
2021-12-09 12:01:37 +00:00
|
|
|
#include "Modules/ClientCommand.hpp"
|
2022-06-30 21:37:47 +02:00
|
|
|
#include "Modules/VisionFile.hpp"
|
2021-08-21 15:15:42 +02:00
|
|
|
#include "Modules/Gamepad.hpp"
|
2022-01-23 19:32:20 +00:00
|
|
|
#include "Modules/ScriptExtension.hpp"
|
2022-04-15 14:50:22 +02:00
|
|
|
#include "Modules/Branding.hpp"
|
2022-06-13 18:08:44 +02:00
|
|
|
#include "Modules/Debug.hpp"
|
2022-04-29 16:56:51 +08:00
|
|
|
#include "Modules/RawMouse.hpp"
|
2022-05-03 17:57:36 +01:00
|
|
|
#include "Modules/Bullet.hpp"
|
2022-05-25 18:03:26 +02:00
|
|
|
#include "Modules/MapRotation.hpp"
|
2022-05-27 14:15:03 +02:00
|
|
|
#include "Modules/Ceg.hpp"
|
2022-06-04 10:56:14 +02:00
|
|
|
#include "Modules/UserInfo.hpp"
|
2022-06-13 20:16:57 +02:00
|
|
|
#include "Modules/Events.hpp"
|