int main(int argc, char* args []) {
	// Initialize Logger
	Utils::ILoggingManager *loggingManager = new Utils::LoggingManager("./Logs/Client.log");
	Utils::Logger logger = loggingManager->CreateLogger("Loader");

	logger.LogHighlight("Initializing all Engine Modules...");

	// Initialize Engine
	Core::Engine engine(loggingManager);
	
	// Set up Content Module
	Content::Content *content = new Content::Content(*loggingManager);
	engine.SetContent(content);

	// Set up Context Module
	Context::IContext *context = GLFWContext::LoadContext();
	engine.SetContext(context);

	// Set up Graphics Module
	Graphics::IGraphics *graphics = OpenGLGraphics::LoadGraphics(context->GetMainWindow(), *content);
	engine.SetGraphics(graphics);

	// Set up Input Module
	Input::Input *input = new Input::Input(*context, *graphics);
	engine.SetInput(input);

	// Set up Network Module
	Network::INetwork *network = RakNetNetwork::LoadNetwork(*loggingManager);
	engine.SetNetwork(network);

	// Set up GUI Module
	GUI::IGUI *gui = CoherentUIOpenGLUI::LoadGUI(*loggingManager, *input);
	engine.SetGUI(gui);

	// Set up State Engine
	StateEngine::StateEngine *stateEngine = new StateEngine::StateEngine(engine);
	engine.SetStateEngine(stateEngine);

	logger.LogHighlight("All Engine Modules Initialized");
	logger.LogHighlight("Queueing Default State Initialization...");

	// Set Default State
	MainMenuState::SwitchToState(*stateEngine);

	logger.LogHighlight("Executing Main Loop...");

	// Run Engine
	engine.Execute();
}
int main(int argc, char* args [])
{
	// Initialize Logger
	Utils::ILoggingManager *loggingManager = new Utils::LoggingManager();
	Utils::Logger logger = loggingManager->CreateLogger("Loader");

	logger.LogHighlight("Initializing all engine modules...");

	// Initialize Engine
	Core::Engine engine(loggingManager);
	
	// Set up Content Module
	Content::IContent *content = DefaultContent::LoadContent();
	engine.SetContent(content);

	// Set up Context Module
	Context::IContext *context = GLFWContext::LoadContext();
	engine.SetContext(context);

	// Set up Graphics Module
	Graphics::IGraphics *graphics = OpenGLGraphics::LoadGraphics(context->GetMainWindow(), *content);
	engine.SetGraphics(graphics);

	// Set up Input Module
	Input::IInput *input = DefaultInput::LoadInput(*context);
	engine.SetInput(input);

	// Set up Network Module
	Network::INetwork *network = RakNetNetwork::LoadNetwork(loggingManager->CreateLogger("Network"));
	engine.SetNetwork(network);

	// Set up State Engine
	StateEngine::IStateEngine *stateEngine = DefaultStateEngine::LoadStateEngine(engine);
	engine.SetStateEngine(stateEngine);

	logger.LogHighlight("All engine modules initialized!");
	logger.LogHighlight("Initializing default state...");

	// Set Default State
	MainMenuState::ImmediateSwitchToState(*stateEngine);

	logger.LogHighlight("Default state initialized!");

	// Run Engine
	engine.Execute();
}
	RakNetNetwork::RakNetNetwork(Utils::ILoggingManager &logManager) :
		m_Logger(logManager.CreateLogger("Network")),
		m_Peer(nullptr),

		m_WorldServerGUID(),

		m_Factory(*this),
		m_PacketHandlers()
	{
	}
	Physics::Physics(Utils::ILoggingManager &logManager, std::unique_ptr<IBroadphase> broadphase) :
		m_Logger(logManager.CreateLogger("Physics")),

		m_Broadphase(std::move(broadphase)),

		m_DynamicRigidBodies()
	{
		// Log Initialiation
		m_Logger.LogInfo("Physics Initialized");
	}
int main(int argc, char* args []) {
	// Initialize Logger
	Utils::ILoggingManager *loggingManager = new Utils::LoggingManager("./Logs/WorldServer.log");
	Utils::Logger logger = loggingManager->CreateLogger("Loader");

	logger.LogHighlight("Initializing all World Server Modules...");

	// Set up Network Module
	Server::Network::INetwork *network = Server::RakNetNetwork::LoadNetwork(*loggingManager, 6789, 16);

	logger.LogHighlight("All Engine Modules Initialized");
	logger.LogHighlight("Initializing World Server...");

	// Initialize World Server
	Server::Core::WorldServer worldServer(loggingManager, network);

	logger.LogHighlight("World Server Initialized");

	// Run World Server
	worldServer.Execute();
}
	LogHandler::LogHandler(Utils::ILoggingManager &logManager) :
		m_Logger(logManager.CreateLogger("Coherent"))
	{}
	Content::Content(Utils::ILoggingManager &logManager) :
		m_Logger(logManager.CreateLogger("Content")),
		m_ContentList()
	{
		m_Logger.LogInfo("Content Initialized");
	}