diff options
author | K. S. Ernest (iFire) Lee <fire@users.noreply.github.com> | 2021-08-24 19:29:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-24 19:29:02 -0700 |
commit | 24f562bd1e1ea5b7b4a5d2371729b97984bee460 (patch) | |
tree | 6e041e7c0ccc7cc9db48f7150a795a06072361d6 /scene/resources | |
parent | c89a5fb8be579936ea0b56bde520133cfa7664ae (diff) | |
parent | ffe54af0db209fb8c2dfd22c71c617fe92975590 (diff) |
Merge pull request #52024 from V-Sekai/anim-length
Calculate proper animation length.
Diffstat (limited to 'scene/resources')
-rw-r--r-- | scene/resources/animation.cpp | 15 | ||||
-rw-r--r-- | scene/resources/animation.h | 3 |
2 files changed, 10 insertions, 8 deletions
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 80e338c8e8..b4eec2530b 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -29,9 +29,9 @@ /*************************************************************************/ #include "animation.h" -#include "scene/scene_string_names.h" #include "core/math/geometry_3d.h" +#include "scene/scene_string_names.h" bool Animation::_set(const StringName &p_name, const Variant &p_value) { String name = p_name; @@ -79,17 +79,16 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) { TransformTrack *tt = static_cast<TransformTrack *>(tracks[track]); Vector<real_t> values = p_value; int vcount = values.size(); - ERR_FAIL_COND_V(vcount % 12, false); // should be multiple of 12 + ERR_FAIL_COND_V(vcount % TRANSFORM_TRACK_SIZE, false); const real_t *r = values.ptr(); - int transform3d_size = (int)sizeof(Transform3D); - - tt->transforms.resize(vcount / transform3d_size); + int64_t count = vcount / TRANSFORM_TRACK_SIZE; + tt->transforms.resize(count); - for (int i = 0; i < (vcount / transform3d_size); i++) { + for (int i = 0; i < count; i++) { TKey<TransformKey> &tk = tt->transforms.write[i]; - const real_t *ofs = &r[i * 12]; + const real_t *ofs = &r[i * TRANSFORM_TRACK_SIZE]; tk.time = ofs[0]; tk.transition = ofs[1]; @@ -356,7 +355,7 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const { if (track_get_type(track) == TYPE_TRANSFORM3D) { Vector<real_t> keys; int kk = track_get_key_count(track); - keys.resize(kk * sizeof(Transform3D)); + keys.resize(kk * TRANSFORM_TRACK_SIZE); real_t *w = keys.ptrw(); diff --git a/scene/resources/animation.h b/scene/resources/animation.h index 6227f6967f..9a410bd566 100644 --- a/scene/resources/animation.h +++ b/scene/resources/animation.h @@ -92,6 +92,9 @@ private: Vector3 scale; }; + // Not necessarily the same size as Transform3D. The amount of numbers in Animation::Key and TransformKey. + const int32_t TRANSFORM_TRACK_SIZE = 12; + /* TRANSFORM TRACK */ struct TransformTrack : public Track { |