From f1dc983766fac81993afb5c409525ad2d484528f Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 3 Nov 2024 19:51:59 +0300 Subject: [PATCH] add standard 'particles' atlas --- res/preload.json | 3 ++- src/presets/ParticlesPreset.cpp | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/res/preload.json b/res/preload.json index 72f96c6b..8971103f 100644 --- a/res/preload.json +++ b/res/preload.json @@ -27,6 +27,7 @@ ], "atlases": [ "blocks", - "items" + "items", + "particles" ] } diff --git a/src/presets/ParticlesPreset.cpp b/src/presets/ParticlesPreset.cpp index f832507d..1414083a 100644 --- a/src/presets/ParticlesPreset.cpp +++ b/src/presets/ParticlesPreset.cpp @@ -23,25 +23,27 @@ ParticleSpawnShape ParticleSpawnShape_from(std::string_view s) { dv::value ParticlesPreset::serialize() const { auto root = dv::object(); - root["texture"] = texture; + if (frames.empty()) { + root["texture"] = texture; + } else { + auto& arr = root.list("animation"); + for (const auto& frame : frames) { + arr.add(frame); + } + } root["collision"] = collision; root["lighting"] = lighting; root["max_distance"] = maxDistance; root["spawn_interval"] = spawnInterval; root["lifetime"] = lifetime; root["lifetime_spread"] = lifetimeSpread; + root["velocity"] = dv::to_value(velocity); root["acceleration"] = dv::to_value(acceleration); root["explosion"] = dv::to_value(explosion); root["size"] = dv::to_value(size); root["spawn_spread"] = dv::to_value(size); root["spawn_shape"] = to_string(spawnShape); root["random_sub_uv"] = randomSubUV; - if (!frames.empty()) { - auto& arr = root.list("animation"); - for (const auto& frame : frames) { - arr.add(frame); - } - } return root; } @@ -54,6 +56,9 @@ void ParticlesPreset::deserialize(const dv::value& src) { src.at("lifetime").get(lifetime); src.at("lifetime_spread").get(lifetimeSpread); src.at("random_sub_uv").get(randomSubUV); + if (src.has("velocity")) { + dv::get_vec(src["velocity"], velocity); + } if (src.has("acceleration")) { dv::get_vec(src["acceleration"], acceleration); }