mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
Merge pull request #109685 from nikitalita/fix-gltf-infinite-loop
Fix infinite loop in GLTFDocument::_convert_animation_node_track
This commit is contained in:
@@ -7788,9 +7788,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
while (true) {
|
while (true) {
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
|
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
p_gltf_node_track.scale_track.values.push_back(scale);
|
p_gltf_node_track.scale_track.values.push_back(scale);
|
||||||
p_gltf_node_track.scale_track.times.push_back(time);
|
p_gltf_node_track.scale_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s scale track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -7823,9 +7826,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
while (true) {
|
while (true) {
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &scale);
|
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &scale);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
p_gltf_node_track.position_track.values.push_back(scale);
|
p_gltf_node_track.position_track.values.push_back(scale);
|
||||||
p_gltf_node_track.position_track.times.push_back(time);
|
p_gltf_node_track.position_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s position track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -7858,9 +7864,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
while (true) {
|
while (true) {
|
||||||
Quaternion rotation;
|
Quaternion rotation;
|
||||||
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
|
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
p_gltf_node_track.rotation_track.values.push_back(rotation);
|
p_gltf_node_track.rotation_track.values.push_back(rotation);
|
||||||
p_gltf_node_track.rotation_track.times.push_back(time);
|
p_gltf_node_track.rotation_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s value rotation track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -7900,9 +7909,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
while (true) {
|
while (true) {
|
||||||
Vector3 position;
|
Vector3 position;
|
||||||
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
|
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
p_gltf_node_track.position_track.values.push_back(position);
|
p_gltf_node_track.position_track.values.push_back(position);
|
||||||
p_gltf_node_track.position_track.times.push_back(time);
|
p_gltf_node_track.position_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s value position track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -7933,9 +7945,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
while (true) {
|
while (true) {
|
||||||
Quaternion rotation;
|
Quaternion rotation;
|
||||||
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
|
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
p_gltf_node_track.rotation_track.values.push_back(rotation);
|
p_gltf_node_track.rotation_track.values.push_back(rotation);
|
||||||
p_gltf_node_track.rotation_track.times.push_back(time);
|
p_gltf_node_track.rotation_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s value rotation track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -7976,9 +7991,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
while (true) {
|
while (true) {
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
|
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
p_gltf_node_track.scale_track.values.push_back(scale);
|
p_gltf_node_track.scale_track.values.push_back(scale);
|
||||||
p_gltf_node_track.scale_track.times.push_back(time);
|
p_gltf_node_track.scale_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s scale track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -8021,17 +8039,22 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
|
|||||||
Quaternion rotation;
|
Quaternion rotation;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
|
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
|
err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
|
||||||
ERR_CONTINUE(err != OK);
|
if (err == OK) {
|
||||||
err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
|
err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
|
||||||
ERR_CONTINUE(err != OK);
|
}
|
||||||
p_gltf_node_track.position_track.values.push_back(position);
|
}
|
||||||
p_gltf_node_track.position_track.times.push_back(time);
|
if (err == OK) {
|
||||||
p_gltf_node_track.rotation_track.values.push_back(rotation);
|
p_gltf_node_track.position_track.values.push_back(position);
|
||||||
p_gltf_node_track.rotation_track.times.push_back(time);
|
p_gltf_node_track.position_track.times.push_back(time);
|
||||||
p_gltf_node_track.scale_track.values.push_back(scale);
|
p_gltf_node_track.rotation_track.values.push_back(rotation);
|
||||||
p_gltf_node_track.scale_track.times.push_back(time);
|
p_gltf_node_track.rotation_track.times.push_back(time);
|
||||||
|
p_gltf_node_track.scale_track.values.push_back(scale);
|
||||||
|
p_gltf_node_track.scale_track.times.push_back(time);
|
||||||
|
} else {
|
||||||
|
ERR_PRINT(vformat("Error interpolating animation %s transform track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
|
||||||
|
}
|
||||||
if (last) {
|
if (last) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user