persist car: add safety so that old json files work fine (#485)

* persist car: add safety so that old json files work fine

* remove unused include
This commit is contained in:
Quentin E. / iDeath 2022-10-20 00:50:24 +02:00 committed by GitHub
parent 688f05fa03
commit 91ae0512fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -14,7 +14,9 @@ namespace big
bool is_invincible; bool is_invincible;
}; };
static void to_json(nlohmann::json& j, const model_attachment& attachment) {
static void to_json(nlohmann::json& j, const model_attachment& attachment)
{
j = nlohmann::json{ {"model_hash", attachment.model_hash}, j = nlohmann::json{ {"model_hash", attachment.model_hash},
{"position_x", attachment.position.x}, {"position_y", attachment.position.y}, {"position_z", attachment.position.z}, {"position_x", attachment.position.x}, {"position_y", attachment.position.y}, {"position_z", attachment.position.z},
@ -25,12 +27,34 @@ namespace big
}; };
}; };
static void from_json(const nlohmann::json& j, model_attachment& attachment) {
j.at("model_hash").get_to(attachment.model_hash); template <typename ValueType>
j.at("position_x").get_to(attachment.position.x); j.at("position_y").get_to(attachment.position.y); j.at("position_z").get_to(attachment.position.z); static void set_from_key_or_default(const nlohmann::json& j, const char* key, ValueType& value, ValueType default_value = {})
j.at("rotation_x").get_to(attachment.rotation.x); j.at("rotation_y").get_to(attachment.rotation.y); j.at("rotation_z").get_to(attachment.rotation.z); {
j.at("has_collision").get_to(attachment.has_collision); if (j.contains(key))
j.at("is_visible").get_to(attachment.is_visible); {
j.at("is_invincible").get_to(attachment.is_invincible); j.at(key).get_to(value);
}
else
{
value = default_value;
}
}
static void from_json(const nlohmann::json& j, model_attachment& attachment)
{
set_from_key_or_default(j, "model_hash", attachment.model_hash);
set_from_key_or_default(j, "position_x", attachment.position.x);
set_from_key_or_default(j, "position_y", attachment.position.y);
set_from_key_or_default(j, "position_z", attachment.position.z);
set_from_key_or_default(j, "rotation_x", attachment.rotation.x);
set_from_key_or_default(j, "rotation_y", attachment.rotation.y);
set_from_key_or_default(j, "rotation_z", attachment.rotation.z);
set_from_key_or_default(j, "has_collision", attachment.has_collision);
set_from_key_or_default(j, "is_visible", attachment.is_visible, true);
set_from_key_or_default(j, "is_invincible", attachment.is_invincible);
} }
}; };