refactor!: File Manager (#1633)
* feat(vscode): added launch.json to dbg * feat(file_manager): Make use of a global instance * feat(file_manager): Allow for file and folder instances to be empty * refactor(GlobalsService): Update code of global service (untested)
This commit is contained in:
@ -86,7 +86,7 @@ namespace big
|
||||
|
||||
big::folder creator_storage_service::check_jobs_folder()
|
||||
{
|
||||
const auto folder = g_file_manager->get_project_folder("./jobs");
|
||||
const auto folder = g_file_manager.get_project_folder("./jobs");
|
||||
|
||||
return folder;
|
||||
}
|
||||
|
@ -4,37 +4,30 @@
|
||||
|
||||
namespace big
|
||||
{
|
||||
globals_service::globals_service()
|
||||
{
|
||||
g_globals_service = this;
|
||||
}
|
||||
globals_service::globals_service() :
|
||||
m_globals_file(g_file_manager.get_project_file("./globals.json"))
|
||||
{ }
|
||||
|
||||
globals_service::~globals_service()
|
||||
{
|
||||
g_globals_service = nullptr;
|
||||
|
||||
m_running = false;
|
||||
|
||||
this->save();
|
||||
save();
|
||||
}
|
||||
|
||||
void globals_service::build(nlohmann::json& data)
|
||||
void globals_service::build()
|
||||
{
|
||||
m_globals.clear();
|
||||
|
||||
for (auto& offset : data)
|
||||
m_globals.push_back(global(offset));
|
||||
|
||||
for (auto& global : m_globals)
|
||||
global.build_cache();
|
||||
}
|
||||
|
||||
bool globals_service::load()
|
||||
{
|
||||
std::string path = std::getenv("appdata");
|
||||
path += this->file_location;
|
||||
m_globals_file;
|
||||
|
||||
std::ifstream file(path);
|
||||
std::ifstream file(m_globals_file.get_path(), std::ios::binary);
|
||||
|
||||
if (!file.is_open())
|
||||
return false;
|
||||
@ -42,9 +35,10 @@ namespace big
|
||||
try
|
||||
{
|
||||
nlohmann::json j;
|
||||
j << file;
|
||||
file >> j;
|
||||
m_globals = j.get<global_vec>();
|
||||
|
||||
this->build(j);
|
||||
build();
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
@ -66,13 +60,9 @@ namespace big
|
||||
|
||||
void globals_service::save()
|
||||
{
|
||||
nlohmann::json j = nlohmann::json::array();
|
||||
for (auto& global : m_globals)
|
||||
j.push_back(global.to_json());
|
||||
nlohmann::json j = m_globals;
|
||||
|
||||
std::string path = std::getenv("appdata");
|
||||
path += this->file_location;
|
||||
std::ofstream file(path, std::ios::out | std::ios::trunc);
|
||||
std::ofstream file(m_globals_file.get_path(), std::ios::binary | std::ios::out | std::ios::trunc);
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -5,14 +5,10 @@ namespace big
|
||||
{
|
||||
struct global_offset
|
||||
{
|
||||
global_offset(nlohmann::json data)
|
||||
{
|
||||
m_offset = data["offset"];
|
||||
|
||||
if (data.contains("size"))
|
||||
m_size = data["size"];
|
||||
}
|
||||
int m_offset = 0;
|
||||
int m_size = 0;
|
||||
|
||||
global_offset() = default;
|
||||
global_offset(int offset, int size = 0)
|
||||
{
|
||||
m_offset = offset;
|
||||
@ -25,22 +21,8 @@ namespace big
|
||||
{
|
||||
return m_size ? internal_cache.at(m_offset, m_size) : internal_cache.at(m_offset);
|
||||
}
|
||||
|
||||
nlohmann::json to_json()
|
||||
{
|
||||
nlohmann::json j;
|
||||
|
||||
j["offset"] = m_offset;
|
||||
if (m_size)
|
||||
j["size"] = m_size;
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
private:
|
||||
int m_offset = 0;
|
||||
int m_size = 0;
|
||||
};
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(global_offset, m_offset, m_size)
|
||||
|
||||
struct global
|
||||
{
|
||||
@ -50,30 +32,19 @@ namespace big
|
||||
std::vector<global_offset> m_offsets;
|
||||
int m_value;
|
||||
|
||||
global(nlohmann::json data)
|
||||
global() = default;
|
||||
global(const char* name, const int base_address, const bool freeze, const int (*offsets)[2], int offset_count) :
|
||||
m_name(name),
|
||||
m_base_address(base_address),
|
||||
m_freeze(freeze)
|
||||
{
|
||||
m_internal_id = ++m_instance_count;
|
||||
|
||||
m_base_address = data["base_address"];
|
||||
m_freeze = data["freeze"];
|
||||
m_name = data["name"];
|
||||
m_value = data["value"];
|
||||
|
||||
for (auto& offset : data["offsets"])
|
||||
m_offsets.push_back(global_offset(offset));
|
||||
}
|
||||
|
||||
global(const char* name, const int base_address, const bool freeze, const int (*offsets)[2], int offset_count)
|
||||
{
|
||||
m_internal_id = ++m_instance_count;
|
||||
|
||||
m_base_address = base_address;
|
||||
m_freeze = freeze;
|
||||
m_name = std::string(name);
|
||||
m_value = 0;
|
||||
|
||||
for (int i = 0; i < offset_count; i++)
|
||||
m_offsets.push_back(global_offset(offsets[i][0], offsets[i][1]));
|
||||
for (int i = 0; i < offset_count; ++i)
|
||||
{
|
||||
const auto offset = offsets[i];
|
||||
m_offsets.push_back({ offset[0], offset[1] });
|
||||
}
|
||||
}
|
||||
|
||||
void build_cache()
|
||||
@ -105,22 +76,6 @@ namespace big
|
||||
this->write();
|
||||
}
|
||||
|
||||
nlohmann::json to_json()
|
||||
{
|
||||
nlohmann::json j;
|
||||
|
||||
j["base_address"] = m_base_address;
|
||||
j["freeze"] = m_freeze;
|
||||
j["name"] = m_name;
|
||||
j["value"] = m_value;
|
||||
|
||||
j["offsets"] = nlohmann::json::array();
|
||||
for (auto& offset : m_offsets)
|
||||
j["offsets"].push_back(offset.to_json());
|
||||
|
||||
return j;
|
||||
}
|
||||
|
||||
void write()
|
||||
{
|
||||
*m_internal_addr = m_value;
|
||||
@ -132,10 +87,12 @@ namespace big
|
||||
int m_internal_id;
|
||||
int* m_internal_addr;
|
||||
};
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(global, m_base_address, m_freeze, m_offsets, m_name, m_value)
|
||||
|
||||
using global_vec = std::vector<global>;
|
||||
class globals_service
|
||||
{
|
||||
const char* file_location = "\\BigBaseV2\\globals.json";
|
||||
file m_globals_file;
|
||||
|
||||
public:
|
||||
globals_service();
|
||||
@ -145,13 +102,13 @@ namespace big
|
||||
void loop();
|
||||
void save();
|
||||
|
||||
std::vector<global> m_globals;
|
||||
global_vec m_globals;
|
||||
bool m_running = false;
|
||||
;
|
||||
|
||||
private:
|
||||
void build(nlohmann::json& data);
|
||||
void build();
|
||||
|
||||
};
|
||||
|
||||
inline globals_service* g_globals_service{};
|
||||
inline auto g_globals_service = globals_service();
|
||||
}
|
@ -30,8 +30,8 @@ namespace big
|
||||
}
|
||||
|
||||
gta_data_service::gta_data_service() :
|
||||
m_peds_cache(g_file_manager->get_project_file("./cache/peds.bin"), 5),
|
||||
m_vehicles_cache(g_file_manager->get_project_file("./cache/vehicles.bin"), 4),
|
||||
m_peds_cache(g_file_manager.get_project_file("./cache/peds.bin"), 5),
|
||||
m_vehicles_cache(g_file_manager.get_project_file("./cache/vehicles.bin"), 4),
|
||||
m_update_state(eGtaDataUpdateState::IDLE)
|
||||
{
|
||||
if (!is_cache_up_to_date())
|
||||
@ -161,7 +161,7 @@ namespace big
|
||||
m_peds_cache.load();
|
||||
m_vehicles_cache.load();
|
||||
|
||||
auto weapons_file = g_file_manager->get_project_file("./cache/weapons.json");
|
||||
auto weapons_file = g_file_manager.get_project_file("./cache/weapons.json");
|
||||
if (weapons_file.exists())
|
||||
{
|
||||
std::ifstream file(weapons_file.get_path());
|
||||
@ -593,7 +593,7 @@ namespace big
|
||||
m_weapons_cache.weapon_components.insert({weapon_component.m_name, weapon_component});
|
||||
}
|
||||
|
||||
auto weapons_file = big::g_file_manager->get_project_file("./cache/weapons.json");
|
||||
auto weapons_file = g_file_manager.get_project_file("./cache/weapons.json");
|
||||
std::ofstream file(weapons_file.get_path());
|
||||
try
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ namespace big
|
||||
|
||||
std::filesystem::path locals_service::get_path()
|
||||
{
|
||||
return g_file_manager->get_project_file("locals.json").get_path();
|
||||
return g_file_manager.get_project_file("locals.json").get_path();
|
||||
}
|
||||
|
||||
bool locals_service::load()
|
||||
|
@ -11,7 +11,7 @@ namespace big
|
||||
g.player_db.update_player_online_states);
|
||||
|
||||
player_database_service::player_database_service() :
|
||||
m_file_path(g_file_manager->get_project_file("./players.json").get_path())
|
||||
m_file_path(g_file_manager.get_project_file("./players.json").get_path())
|
||||
{
|
||||
load();
|
||||
g_player_database_service = this;
|
||||
|
@ -5,7 +5,7 @@ namespace big
|
||||
|
||||
std::filesystem::path squad_spawner::get_file_path()
|
||||
{
|
||||
return g_file_manager->get_project_folder("squad_spawner").get_path();
|
||||
return g_file_manager.get_project_folder("squad_spawner").get_path();
|
||||
}
|
||||
|
||||
bool squad_spawner::fetch_squads()
|
||||
|
@ -17,7 +17,7 @@ namespace big
|
||||
|
||||
void translation_service::init()
|
||||
{
|
||||
m_translation_directory = std::make_unique<folder>(g_file_manager->get_project_folder("./translations").get_path());
|
||||
m_translation_directory = std::make_unique<folder>(g_file_manager.get_project_folder("./translations").get_path());
|
||||
|
||||
bool loaded_remote_index = false;
|
||||
for (size_t i = 0; i < 5 && !loaded_remote_index; i++)
|
||||
|
@ -12,7 +12,7 @@
|
||||
namespace big
|
||||
{
|
||||
tunables_service::tunables_service() :
|
||||
m_cache_file(g_file_manager->get_project_file("./cache/tunables.bin"), 1)
|
||||
m_cache_file(g_file_manager.get_project_file("./cache/tunables.bin"), 1)
|
||||
{
|
||||
m_cache_file.load();
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
namespace big
|
||||
{
|
||||
handling_service::handling_service() :
|
||||
m_profiles_folder(g_file_manager->get_project_folder("./handling_profiles"))
|
||||
m_profiles_folder(g_file_manager.get_project_folder("./handling_profiles"))
|
||||
{
|
||||
g_handling_service = this;
|
||||
|
||||
|
@ -514,7 +514,7 @@ namespace big
|
||||
|
||||
big::folder persist_car_service::check_vehicle_folder()
|
||||
{
|
||||
const auto folder = g_file_manager->get_project_folder("./saved_json_vehicles");
|
||||
const auto folder = g_file_manager.get_project_folder("./saved_json_vehicles");
|
||||
|
||||
return folder;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ namespace big
|
||||
|
||||
void xml_vehicles_service::fetch_xml_files()
|
||||
{
|
||||
auto folder_path = g_file_manager->get_project_folder("xml_vehicles").get_path();
|
||||
auto folder_path = g_file_manager.get_project_folder("xml_vehicles").get_path();
|
||||
|
||||
try
|
||||
{
|
||||
|
Reference in New Issue
Block a user