浏览代码

Merge pull request #52024 from V-Sekai/anim-length

Calculate proper animation length.
K. S. Ernest (iFire) Lee 4 年之前
父节点
当前提交
24f562bd1e
共有 2 个文件被更改,包括 10 次插入8 次删除
  1. 7 8
      scene/resources/animation.cpp
  2. 3 0
      scene/resources/animation.h

+ 7 - 8
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();
 

+ 3 - 0
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 {