Skip to content

Commit

Permalink
Merge pull request #52024 from V-Sekai/anim-length
Browse files Browse the repository at this point in the history
Calculate proper animation length.
  • Loading branch information
fire authored Aug 25, 2021
2 parents c89a5fb + ffe54af commit 24f562b
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 8 deletions.
15 changes: 7 additions & 8 deletions scene/resources/animation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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];

Expand Down Expand Up @@ -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();

Expand Down
3 changes: 3 additions & 0 deletions scene/resources/animation.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ class Animation : public Resource {
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 {
Expand Down

0 comments on commit 24f562b

Please sign in to comment.