Я пересоздал репозиторий из-за большого количества мусора в прошлом

This commit is contained in:
Jiga228
2025-09-14 15:00:44 +07:00
commit 78a25b305b
74 changed files with 3428 additions and 0 deletions
+139
View File
@@ -0,0 +1,139 @@
#include "CoreInstance.h"
#include "SystemCalls.h"
#include <exception>
#include <cstring>
#include <fstream>
#include <iostream>
CoreInstance::CoreInstance()
{
countCPU = System::getCountCPU();
memorySize = System::getMemorySize();
std::ifstream main_config_file(main_config);
if (main_config_file.fail())
throw std::runtime_error("Fail open main config file");
std::string line;
while (std::getline(main_config_file, line))
{
if (base_world.empty() && line.find(key_base_world) == 0)
{
size_t pos = line.find_first_of(':') + 1;
base_world = line.substr(pos, line.size() - pos);
// trim
while (base_world[0] == ' ')
base_world.erase(0, 1);
while (base_world[base_world.size() - 1] == ' ')
base_world.erase(base_world.size() - 2, base_world.size() - 1);
}
else if (modules_names.empty() && line.find(key_modules) == 0)
{
size_t pos = line.find(':') + 1;
line.erase(0, pos);
size_t end = line.find(',');
while (end != std::string::npos)
{
// trim
while (line[0] == ' ')
line.erase(0, 1);
std::string module_name = line.substr(0, end - 1);
// trim
while (module_name[module_name.size() - 1] == ' ')
module_name.erase(module_name.size() - 2, module_name.size() - 1);
modules_names.push_back(module_name);
line.erase(0, end);
end = line.find(',');
}
}
}
if (base_world.empty())
throw std::runtime_error("Fail read base world name");
}
CoreInstance::~CoreInstance()
{
if (game != nullptr)
delete game;
for (auto& module : modules)
System::QuitModule(module.handler);
modules.clear();
}
extern GameInstance* GameFactory(CoreInstance&);
void CoreInstance::start()
{
for (auto& name : modules_names)
{
try
{
void* handler = System::InitModule(name.c_str(), *this);
modules.push_back(Module {name.c_str(), handler});
} catch (const std::exception& e)
{
std::cout << e.what() << '\n';
}
}
for (auto& module : modules)
{
try
{
System::StartModule(module.handler);
} catch (const std::exception& e)
{
std::cout << e.what() << '\n';
}
}
game = GameFactory(*this);
if (game == nullptr)
throw std::runtime_error("Fail create game instance!");
game->start();
}
void* CoreInstance::getHandlerModule(const char* name) const
{
for (const auto& module : modules)
{
if (std::strcmp(module.name, name) == 0)
return module.handler;
}
throw std::runtime_error("Module not found");
}
void* CoreInstance::enableModule(const char* name)
{
for (const auto& module : modules)
{
if (std::strcmp(module.name, name) == 0)
throw std::runtime_error("Module already enabled");
}
void* module = System::InitModule(name, *this);
modules.push_back({ name, module });
return module;
}
void CoreInstance::disableModule(const char* name)
{
for (auto i = modules.cbegin(); i != modules.cend(); ++i)
{
if (std::strcmp(i->name, name) == 0)
{
System::QuitModule(i->handler);
modules.erase(i);
break;
}
}
throw std::runtime_error("Module not found");
}