Incorporate folders into the Persist Vehicles feature. (#2042)

This commit is contained in:
gir489
2023-08-27 15:32:14 -04:00
committed by GitHub
parent 2924335196
commit ac41a7175b
4 changed files with 71 additions and 24 deletions

View File

@ -9,7 +9,7 @@
namespace big
{
void persist_car_service::save_vehicle(Vehicle vehicle, std::string_view file_name)
void persist_car_service::save_vehicle(Vehicle vehicle, std::string_view file_name, std::string folder_name)
{
if (!ENTITY::DOES_ENTITY_EXIST(vehicle) || !ENTITY::IS_ENTITY_A_VEHICLE(vehicle))
{
@ -18,7 +18,7 @@ namespace big
return;
}
const auto file = check_vehicle_folder().get_file(file_name);
const auto file = check_vehicle_folder(folder_name).get_file(file_name);
std::ofstream file_stream(file.get_path(), std::ios::out | std::ios::trunc);
@ -27,9 +27,9 @@ namespace big
file_stream.close();
}
Vehicle persist_car_service::load_vehicle(std::string_view file_name)
Vehicle persist_car_service::load_vehicle(std::string_view file_name, std::string folder_name)
{
const auto file = check_vehicle_folder().get_file(file_name);
const auto file = check_vehicle_folder(folder_name).get_file(file_name);
std::ifstream file_stream(file.get_path());
@ -49,11 +49,11 @@ namespace big
return spawn_vehicle_full(vehicle_json, self::ped);
}
std::vector<std::string> persist_car_service::list_files()
std::vector<std::string> persist_car_service::list_files(std::string folder_name)
{
std::vector<std::string> file_paths;
const auto file_path = check_vehicle_folder();
const auto file_path = check_vehicle_folder(folder_name);
for (const auto& directory_entry : std::filesystem::directory_iterator(file_path.get_path()))
if (directory_entry.path().extension() == ".json")
file_paths.push_back(directory_entry.path().filename().generic_string());
@ -61,6 +61,20 @@ namespace big
return file_paths;
}
std::vector<std::string> persist_car_service::list_sub_folders()
{
std::vector<std::string> folders;
const auto file_path = check_vehicle_folder();
for (const auto& directory_entry : std::filesystem::directory_iterator(file_path.get_path()))
if (directory_entry.is_directory())
folders.push_back(directory_entry.path().filename().generic_string());
return folders;
}
Vehicle persist_car_service::clone_ped_car(Ped ped, Vehicle vehicle)
{
return spawn_vehicle_full(get_full_vehicle_json(vehicle), ped);
@ -513,10 +527,8 @@ namespace big
return vehicle_json;
}
big::folder persist_car_service::check_vehicle_folder()
big::folder persist_car_service::check_vehicle_folder(std::string folder_name)
{
const auto folder = g_file_manager.get_project_folder("./saved_json_vehicles");
return folder;
return g_file_manager.get_project_folder("./saved_json_vehicles/" + folder_name);
}
}

View File

@ -7,11 +7,12 @@ namespace big
class persist_car_service
{
public:
static std::vector<std::string> list_files();
static std::vector<std::string> list_files(std::string folder_name = "");
static std::vector<std::string> list_sub_folders();
static Vehicle clone_ped_car(Ped ped, Vehicle vehicle);
static void save_vehicle(Vehicle vehicle, std::string_view file_name);
static Vehicle load_vehicle(std::string_view file_name);
static void save_vehicle(Vehicle vehicle, std::string_view file_name, std::string folder_name);
static Vehicle load_vehicle(std::string_view file_name, std::string folder_name = "");
private:
static constexpr auto model_attachment_key = "model_attachment";
@ -76,6 +77,6 @@ namespace big
static nlohmann::json get_vehicle_json(Vehicle vehicle);
static big::folder check_vehicle_folder();
static big::folder check_vehicle_folder(std::string folder_name = "");
};
}