CI: Fix godot regression project test

Fix crash and memory leak in `SpringBoneSimulator3D`
Fix crash in `GraphEdit`
This commit is contained in:
LuoZhihao 2025-03-26 17:33:18 +08:00
parent 6b5b84c0c5
commit 4b9650f54e
4 changed files with 27 additions and 4 deletions

View file

@ -607,6 +607,7 @@ void SpringBoneSimulator3D::set_radius(int p_index, float p_radius) {
}
float SpringBoneSimulator3D::get_radius(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
return settings[p_index]->radius;
}
@ -640,6 +641,7 @@ void SpringBoneSimulator3D::set_stiffness(int p_index, float p_stiffness) {
}
float SpringBoneSimulator3D::get_stiffness(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
return settings[p_index]->stiffness;
}
@ -762,8 +764,15 @@ SpringBoneSimulator3D::RotationAxis SpringBoneSimulator3D::get_rotation_axis(int
void SpringBoneSimulator3D::set_setting_count(int p_count) {
ERR_FAIL_COND(p_count < 0);
int delta = p_count - settings.size() + 1;
int delta = p_count - settings.size();
if (delta < 0) {
for (int i = delta; i < 0; i++) {
memdelete(settings[settings.size() + i]);
}
}
settings.resize(p_count);
delta++;
if (delta > 1) {
for (int i = 1; i < delta; i++) {
settings.write[p_count - i] = memnew(SpringBone3DSetting);
@ -949,8 +958,14 @@ void SpringBoneSimulator3D::set_joint_count(int p_index, int p_count) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_COND(p_count < 0);
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
int delta = p_count - joints.size() + 1;
int delta = p_count - joints.size();
if (delta < 0) {
for (int i = delta; i < 0; i++) {
memdelete(joints[joints.size() + i]);
}
}
joints.resize(p_count);
delta++;
if (delta > 1) {
for (int i = 1; i < delta; i++) {
joints.write[p_count - i] = memnew(SpringBone3DJointSetting);
@ -1659,3 +1674,7 @@ Quaternion SpringBoneSimulator3D::get_from_to_rotation(const Vector3 &p_from, co
}
return Quaternion(axis.normalized(), angle);
}
SpringBoneSimulator3D::~SpringBoneSimulator3D() {
clear_settings();
}