Merge pull request #111378 from TokageItLab/loc-sp

Change Vector to LocalVector in SpringBoneSimulator3D
This commit is contained in:
Thaddeus Crews
2025-10-21 10:26:56 -05:00
2 changed files with 171 additions and 171 deletions

View File

@ -40,7 +40,7 @@ bool SpringBoneSimulator3D::_set(const StringName &p_path, const Variant &p_valu
if (path.begins_with("settings/")) {
int which = path.get_slicec('/', 1).to_int();
String what = path.get_slicec('/', 2);
ERR_FAIL_INDEX_V(which, settings.size(), false);
ERR_FAIL_INDEX_V(which, (int)settings.size(), false);
if (what == "root_bone_name") {
set_root_bone_name(which, p_value);
@ -164,7 +164,7 @@ bool SpringBoneSimulator3D::_get(const StringName &p_path, Variant &r_ret) const
if (path.begins_with("settings/")) {
int which = path.get_slicec('/', 1).to_int();
String what = path.get_slicec('/', 2);
ERR_FAIL_INDEX_V(which, settings.size(), false);
ERR_FAIL_INDEX_V(which, (int)settings.size(), false);
if (what == "root_bone_name") {
r_ret = get_root_bone_name(which);
@ -291,7 +291,7 @@ void SpringBoneSimulator3D::_get_property_list(List<PropertyInfo> *p_list) const
LocalVector<PropertyInfo> props;
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
String path = "settings/" + itos(i) + "/";
props.push_back(PropertyInfo(Variant::STRING, path + "root_bone_name", PROPERTY_HINT_ENUM_SUGGESTION, enum_hint));
props.push_back(PropertyInfo(Variant::INT, path + "root_bone", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR));
@ -317,7 +317,7 @@ void SpringBoneSimulator3D::_get_property_list(List<PropertyInfo> *p_list) const
props.push_back(PropertyInfo(Variant::OBJECT, path + "gravity/damping_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"));
props.push_back(PropertyInfo(Variant::VECTOR3, path + "gravity/direction"));
props.push_back(PropertyInfo(Variant::INT, path + "joint_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_ARRAY, "Joints," + path + "joints/,static,const"));
for (int j = 0; j < settings[i]->joints.size(); j++) {
for (uint32_t j = 0; j < settings[i]->joints.size(); j++) {
String joint_path = path + "joints/" + itos(j) + "/";
props.push_back(PropertyInfo(Variant::STRING, joint_path + "bone_name", PROPERTY_HINT_ENUM_SUGGESTION, enum_hint, PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_READ_ONLY | PROPERTY_USAGE_STORAGE));
props.push_back(PropertyInfo(Variant::INT, joint_path + "bone", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR | PROPERTY_USAGE_READ_ONLY));
@ -331,12 +331,12 @@ void SpringBoneSimulator3D::_get_property_list(List<PropertyInfo> *p_list) const
}
props.push_back(PropertyInfo(Variant::BOOL, path + "enable_all_child_collisions"));
props.push_back(PropertyInfo(Variant::INT, path + "exclude_collision_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_ARRAY, "Exclude Collisions," + path + "exclude_collisions/"));
for (int j = 0; j < settings[i]->exclude_collisions.size(); j++) {
for (uint32_t j = 0; j < settings[i]->exclude_collisions.size(); j++) {
String collision_path = path + "exclude_collisions/" + itos(j);
props.push_back(PropertyInfo(Variant::NODE_PATH, collision_path, PROPERTY_HINT_NODE_PATH_VALID_TYPES, "SpringBoneCollision3D"));
}
props.push_back(PropertyInfo(Variant::INT, path + "collision_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_ARRAY, "Collisions," + path + "collisions/"));
for (int j = 0; j < settings[i]->collisions.size(); j++) {
for (uint32_t j = 0; j < settings[i]->collisions.size(); j++) {
String collision_path = path + "collisions/" + itos(j);
props.push_back(PropertyInfo(Variant::NODE_PATH, collision_path, PROPERTY_HINT_NODE_PATH_VALID_TYPES, "SpringBoneCollision3D"));
}
@ -436,7 +436,7 @@ void SpringBoneSimulator3D::_notification(int p_what) {
// Setting.
void SpringBoneSimulator3D::set_root_bone_name(int p_index, const String &p_bone_name) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->root_bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -445,12 +445,12 @@ void SpringBoneSimulator3D::set_root_bone_name(int p_index, const String &p_bone
}
String SpringBoneSimulator3D::get_root_bone_name(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), String());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), String());
return settings[p_index]->root_bone_name;
}
void SpringBoneSimulator3D::set_root_bone(int p_index, int p_bone) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
bool changed = settings[p_index]->root_bone != p_bone;
settings[p_index]->root_bone = p_bone;
Skeleton3D *sk = get_skeleton();
@ -468,12 +468,12 @@ void SpringBoneSimulator3D::set_root_bone(int p_index, int p_bone) {
}
int SpringBoneSimulator3D::get_root_bone(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), -1);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), -1);
return settings[p_index]->root_bone;
}
void SpringBoneSimulator3D::set_end_bone_name(int p_index, const String &p_bone_name) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->end_bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -482,12 +482,12 @@ void SpringBoneSimulator3D::set_end_bone_name(int p_index, const String &p_bone_
}
String SpringBoneSimulator3D::get_end_bone_name(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), String());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), String());
return settings[p_index]->end_bone_name;
}
void SpringBoneSimulator3D::set_end_bone(int p_index, int p_bone) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
bool changed = settings[p_index]->end_bone != p_bone;
settings[p_index]->end_bone = p_bone;
Skeleton3D *sk = get_skeleton();
@ -505,41 +505,41 @@ void SpringBoneSimulator3D::set_end_bone(int p_index, int p_bone) {
}
int SpringBoneSimulator3D::get_end_bone(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), -1);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), -1);
return settings[p_index]->end_bone;
}
void SpringBoneSimulator3D::set_extend_end_bone(int p_index, bool p_enabled) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->extend_end_bone = p_enabled;
_make_joints_dirty(p_index);
notify_property_list_changed();
}
bool SpringBoneSimulator3D::is_end_bone_extended(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), false);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), false);
return settings[p_index]->extend_end_bone;
}
void SpringBoneSimulator3D::set_end_bone_direction(int p_index, BoneDirection p_bone_direction) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->end_bone_direction = p_bone_direction;
_make_joints_dirty(p_index);
}
SpringBoneSimulator3D::BoneDirection SpringBoneSimulator3D::get_end_bone_direction(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), BONE_DIRECTION_FROM_PARENT);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), BONE_DIRECTION_FROM_PARENT);
return settings[p_index]->end_bone_direction;
}
void SpringBoneSimulator3D::set_end_bone_length(int p_index, float p_length) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->end_bone_length = p_length;
_make_joints_dirty(p_index);
}
float SpringBoneSimulator3D::get_end_bone_length(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
return settings[p_index]->end_bone_length;
}
@ -558,7 +558,7 @@ Vector3 SpringBoneSimulator3D::get_end_bone_axis(int p_end_bone, BoneDirection p
}
void SpringBoneSimulator3D::set_center_from(int p_index, CenterFrom p_center_from) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
bool center_changed = settings[p_index]->center_from != p_center_from;
settings[p_index]->center_from = p_center_from;
if (center_changed) {
@ -568,12 +568,12 @@ void SpringBoneSimulator3D::set_center_from(int p_index, CenterFrom p_center_fro
}
SpringBoneSimulator3D::CenterFrom SpringBoneSimulator3D::get_center_from(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), CENTER_FROM_WORLD_ORIGIN);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), CENTER_FROM_WORLD_ORIGIN);
return settings[p_index]->center_from;
}
void SpringBoneSimulator3D::set_center_node(int p_index, const NodePath &p_node_path) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
bool center_changed = settings[p_index]->center_node != p_node_path;
settings[p_index]->center_node = p_node_path;
if (center_changed) {
@ -582,12 +582,12 @@ void SpringBoneSimulator3D::set_center_node(int p_index, const NodePath &p_node_
}
NodePath SpringBoneSimulator3D::get_center_node(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), NodePath());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), NodePath());
return settings[p_index]->center_node;
}
void SpringBoneSimulator3D::set_center_bone_name(int p_index, const String &p_bone_name) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->center_bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -596,12 +596,12 @@ void SpringBoneSimulator3D::set_center_bone_name(int p_index, const String &p_bo
}
String SpringBoneSimulator3D::get_center_bone_name(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), String());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), String());
return settings[p_index]->center_bone_name;
}
void SpringBoneSimulator3D::set_center_bone(int p_index, int p_bone) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
bool center_changed = settings[p_index]->center_bone != p_bone;
settings[p_index]->center_bone = p_bone;
Skeleton3D *sk = get_skeleton();
@ -619,12 +619,12 @@ void SpringBoneSimulator3D::set_center_bone(int p_index, int p_bone) {
}
int SpringBoneSimulator3D::get_center_bone(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), -1);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), -1);
return settings[p_index]->center_bone;
}
void SpringBoneSimulator3D::set_radius(int p_index, float p_radius) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -633,12 +633,12 @@ 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);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
return settings[p_index]->radius;
}
void SpringBoneSimulator3D::set_radius_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -653,12 +653,12 @@ void SpringBoneSimulator3D::set_radius_damping_curve(int p_index, const Ref<Curv
}
Ref<Curve> SpringBoneSimulator3D::get_radius_damping_curve(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Ref<Curve>());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Ref<Curve>());
return settings[p_index]->radius_damping_curve;
}
void SpringBoneSimulator3D::set_stiffness(int p_index, float p_stiffness) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -667,12 +667,12 @@ 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);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
return settings[p_index]->stiffness;
}
void SpringBoneSimulator3D::set_stiffness_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -687,12 +687,12 @@ void SpringBoneSimulator3D::set_stiffness_damping_curve(int p_index, const Ref<C
}
Ref<Curve> SpringBoneSimulator3D::get_stiffness_damping_curve(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Ref<Curve>());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Ref<Curve>());
return settings[p_index]->stiffness_damping_curve;
}
void SpringBoneSimulator3D::set_drag(int p_index, float p_drag) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -701,12 +701,12 @@ void SpringBoneSimulator3D::set_drag(int p_index, float p_drag) {
}
float SpringBoneSimulator3D::get_drag(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
return settings[p_index]->drag;
}
void SpringBoneSimulator3D::set_drag_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -721,12 +721,12 @@ void SpringBoneSimulator3D::set_drag_damping_curve(int p_index, const Ref<Curve>
}
Ref<Curve> SpringBoneSimulator3D::get_drag_damping_curve(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Ref<Curve>());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Ref<Curve>());
return settings[p_index]->drag_damping_curve;
}
void SpringBoneSimulator3D::set_gravity(int p_index, float p_gravity) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -735,12 +735,12 @@ void SpringBoneSimulator3D::set_gravity(int p_index, float p_gravity) {
}
float SpringBoneSimulator3D::get_gravity(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
return settings[p_index]->gravity;
}
void SpringBoneSimulator3D::set_gravity_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -755,12 +755,12 @@ void SpringBoneSimulator3D::set_gravity_damping_curve(int p_index, const Ref<Cur
}
Ref<Curve> SpringBoneSimulator3D::get_gravity_damping_curve(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Ref<Curve>());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Ref<Curve>());
return settings[p_index]->gravity_damping_curve;
}
void SpringBoneSimulator3D::set_gravity_direction(int p_index, const Vector3 &p_gravity_direction) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
ERR_FAIL_COND(p_gravity_direction.is_zero_approx());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
@ -770,12 +770,12 @@ void SpringBoneSimulator3D::set_gravity_direction(int p_index, const Vector3 &p_
}
Vector3 SpringBoneSimulator3D::get_gravity_direction(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Vector3(0, -1, 0));
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Vector3(0, -1, 0));
return settings[p_index]->gravity_direction;
}
void SpringBoneSimulator3D::set_rotation_axis(int p_index, RotationAxis p_axis) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index)) {
return; // Joint config is individual mode.
}
@ -785,12 +785,12 @@ void SpringBoneSimulator3D::set_rotation_axis(int p_index, RotationAxis p_axis)
}
SpringBoneSimulator3D::RotationAxis SpringBoneSimulator3D::get_rotation_axis(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), ROTATION_AXIS_ALL);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), ROTATION_AXIS_ALL);
return settings[p_index]->rotation_axis;
}
void SpringBoneSimulator3D::set_rotation_axis_vector(int p_index, const Vector3 &p_vector) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (is_config_individual(p_index) || settings[p_index]->rotation_axis != ROTATION_AXIS_CUSTOM) {
return; // Joint config is individual mode.
}
@ -799,7 +799,7 @@ void SpringBoneSimulator3D::set_rotation_axis_vector(int p_index, const Vector3
}
Vector3 SpringBoneSimulator3D::get_rotation_axis_vector(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Vector3());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Vector3());
Vector3 ret;
switch (settings[p_index]->rotation_axis) {
case ROTATION_AXIS_X:
@ -824,17 +824,17 @@ Vector3 SpringBoneSimulator3D::get_rotation_axis_vector(int p_index) const {
void SpringBoneSimulator3D::set_setting_count(int p_count) {
ERR_FAIL_COND(p_count < 0);
int delta = p_count - settings.size();
int delta = p_count - (int)settings.size();
if (delta < 0) {
for (int i = delta; i < 0; i++) {
memdelete(settings[settings.size() + i]);
memdelete(settings[(int)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);
settings[p_count - i] = memnew(SpringBone3DSetting);
}
}
notify_property_list_changed();
@ -851,21 +851,21 @@ void SpringBoneSimulator3D::clear_settings() {
// Individual joints.
void SpringBoneSimulator3D::set_individual_config(int p_index, bool p_enabled) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->individual_config = p_enabled;
_make_joints_dirty(p_index);
notify_property_list_changed();
}
bool SpringBoneSimulator3D::is_config_individual(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), false);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), false);
return settings[p_index]->individual_config;
}
void SpringBoneSimulator3D::set_joint_bone_name(int p_index, int p_joint, const String &p_bone_name) {
ERR_FAIL_INDEX(p_index, settings.size());
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -874,16 +874,16 @@ void SpringBoneSimulator3D::set_joint_bone_name(int p_index, int p_joint, const
}
String SpringBoneSimulator3D::get_joint_bone_name(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), String());
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), String());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), String());
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), String());
return joints[p_joint]->bone_name;
}
void SpringBoneSimulator3D::set_joint_bone(int p_index, int p_joint, int p_bone) {
ERR_FAIL_INDEX(p_index, settings.size());
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->bone = p_bone;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -897,19 +897,19 @@ void SpringBoneSimulator3D::set_joint_bone(int p_index, int p_joint, int p_bone)
}
int SpringBoneSimulator3D::get_joint_bone(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), -1);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), -1);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), -1);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), -1);
return joints[p_joint]->bone;
}
void SpringBoneSimulator3D::set_joint_radius(int p_index, int p_joint, float p_radius) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!is_config_individual(p_index)) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->radius = p_radius;
#ifdef TOOLS_ENABLED
update_gizmos();
@ -917,88 +917,88 @@ void SpringBoneSimulator3D::set_joint_radius(int p_index, int p_joint, float p_r
}
float SpringBoneSimulator3D::get_joint_radius(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->radius;
}
void SpringBoneSimulator3D::set_joint_stiffness(int p_index, int p_joint, float p_stiffness) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!is_config_individual(p_index)) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->stiffness = p_stiffness;
}
float SpringBoneSimulator3D::get_joint_stiffness(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->stiffness;
}
void SpringBoneSimulator3D::set_joint_drag(int p_index, int p_joint, float p_drag) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!is_config_individual(p_index)) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->drag = p_drag;
}
float SpringBoneSimulator3D::get_joint_drag(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->drag;
}
void SpringBoneSimulator3D::set_joint_gravity(int p_index, int p_joint, float p_gravity) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!is_config_individual(p_index)) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->gravity = p_gravity;
}
float SpringBoneSimulator3D::get_joint_gravity(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->gravity;
}
void SpringBoneSimulator3D::set_joint_gravity_direction(int p_index, int p_joint, const Vector3 &p_gravity_direction) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
ERR_FAIL_COND(p_gravity_direction.is_zero_approx());
if (!is_config_individual(p_index)) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->gravity_direction = p_gravity_direction;
}
Vector3 SpringBoneSimulator3D::get_joint_gravity_direction(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Vector3(0, -1, 0));
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), Vector3(0, -1, 0));
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Vector3(0, -1, 0));
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), Vector3(0, -1, 0));
return joints[p_joint]->gravity_direction;
}
void SpringBoneSimulator3D::set_joint_rotation_axis(int p_index, int p_joint, RotationAxis p_axis) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!is_config_individual(p_index)) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->rotation_axis = p_axis;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -1012,19 +1012,19 @@ void SpringBoneSimulator3D::set_joint_rotation_axis(int p_index, int p_joint, Ro
}
SpringBoneSimulator3D::RotationAxis SpringBoneSimulator3D::get_joint_rotation_axis(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), ROTATION_AXIS_ALL);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), ROTATION_AXIS_ALL);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), ROTATION_AXIS_ALL);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), ROTATION_AXIS_ALL);
return joints[p_joint]->rotation_axis;
}
void SpringBoneSimulator3D::set_joint_rotation_axis_vector(int p_index, int p_joint, const Vector3 &p_vector) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!is_config_individual(p_index) || settings[p_index]->rotation_axis != ROTATION_AXIS_CUSTOM) {
return; // Joints are read-only.
}
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size());
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->rotation_axis_vector = p_vector;
Skeleton3D *sk = get_skeleton();
if (sk) {
@ -1037,16 +1037,16 @@ void SpringBoneSimulator3D::set_joint_rotation_axis_vector(int p_index, int p_jo
}
Vector3 SpringBoneSimulator3D::get_joint_rotation_axis_vector(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Vector3());
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), Vector3());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Vector3());
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), Vector3());
return joints[p_joint]->get_rotation_axis_vector();
}
void SpringBoneSimulator3D::set_joint_count(int p_index, int p_count) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
ERR_FAIL_COND(p_count < 0);
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
int delta = p_count - joints.size();
if (delta < 0) {
for (int i = delta; i < 0; i++) {
@ -1057,39 +1057,39 @@ void SpringBoneSimulator3D::set_joint_count(int p_index, int p_count) {
delta++;
if (delta > 1) {
for (int i = 1; i < delta; i++) {
joints.write[p_count - i] = memnew(SpringBone3DJointSetting);
joints[p_count - i] = memnew(SpringBone3DJointSetting);
}
}
notify_property_list_changed();
}
int SpringBoneSimulator3D::get_joint_count(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
return joints.size();
}
// Individual collisions.
void SpringBoneSimulator3D::set_enable_all_child_collisions(int p_index, bool p_enabled) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->enable_all_child_collisions = p_enabled;
notify_property_list_changed();
}
bool SpringBoneSimulator3D::are_all_child_collisions_enabled(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), false);
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), false);
return settings[p_index]->enable_all_child_collisions;
}
void SpringBoneSimulator3D::set_exclude_collision_path(int p_index, int p_collision, const NodePath &p_node_path) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!are_all_child_collisions_enabled(p_index)) {
return; // Exclude collision list is disabled.
}
Vector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
ERR_FAIL_INDEX(p_collision, setting_exclude_collisions.size());
setting_exclude_collisions.write[p_collision] = NodePath(); // Reset first.
LocalVector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
ERR_FAIL_INDEX(p_collision, (int)setting_exclude_collisions.size());
setting_exclude_collisions[p_collision] = NodePath(); // Reset first.
if (is_inside_tree()) {
Node *node = get_node_or_null(p_node_path);
if (!node) {
@ -1102,36 +1102,36 @@ void SpringBoneSimulator3D::set_exclude_collision_path(int p_index, int p_collis
ERR_FAIL_EDMSG("Collision must be child of current SpringBoneSimulator3D.");
}
}
setting_exclude_collisions.write[p_collision] = p_node_path;
setting_exclude_collisions[p_collision] = p_node_path;
_make_collisions_dirty();
}
NodePath SpringBoneSimulator3D::get_exclude_collision_path(int p_index, int p_collision) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), NodePath());
Vector<NodePath> setting_exclude_collisions = settings[p_index]->exclude_collisions;
ERR_FAIL_INDEX_V(p_collision, setting_exclude_collisions.size(), NodePath());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), NodePath());
const LocalVector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
ERR_FAIL_INDEX_V(p_collision, (int)setting_exclude_collisions.size(), NodePath());
return setting_exclude_collisions[p_collision];
}
void SpringBoneSimulator3D::set_exclude_collision_count(int p_index, int p_count) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!are_all_child_collisions_enabled(p_index)) {
return; // Exclude collision list is disabled.
}
Vector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
LocalVector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
setting_exclude_collisions.resize(p_count);
_make_collisions_dirty();
notify_property_list_changed();
}
int SpringBoneSimulator3D::get_exclude_collision_count(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<NodePath> setting_exclude_collisions = settings[p_index]->exclude_collisions;
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
return setting_exclude_collisions.size();
}
void SpringBoneSimulator3D::clear_exclude_collisions(int p_index) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (!are_all_child_collisions_enabled(p_index)) {
return; // Exclude collision list is disabled.
}
@ -1139,13 +1139,13 @@ void SpringBoneSimulator3D::clear_exclude_collisions(int p_index) {
}
void SpringBoneSimulator3D::set_collision_path(int p_index, int p_collision, const NodePath &p_node_path) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (are_all_child_collisions_enabled(p_index)) {
return; // Collision list is disabled.
}
Vector<NodePath> &setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX(p_collision, setting_collisions.size());
setting_collisions.write[p_collision] = NodePath(); // Reset first.
LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX(p_collision, (int)setting_collisions.size());
setting_collisions[p_collision] = NodePath(); // Reset first.
if (is_inside_tree()) {
Node *node = get_node_or_null(p_node_path);
if (!node) {
@ -1158,36 +1158,36 @@ void SpringBoneSimulator3D::set_collision_path(int p_index, int p_collision, con
ERR_FAIL_EDMSG("Collision must be child of current SpringBoneSimulator3D.");
}
}
setting_collisions.write[p_collision] = p_node_path;
setting_collisions[p_collision] = p_node_path;
_make_collisions_dirty();
}
NodePath SpringBoneSimulator3D::get_collision_path(int p_index, int p_collision) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), NodePath());
Vector<NodePath> setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX_V(p_collision, setting_collisions.size(), NodePath());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), NodePath());
const LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX_V(p_collision, (int)setting_collisions.size(), NodePath());
return setting_collisions[p_collision];
}
void SpringBoneSimulator3D::set_collision_count(int p_index, int p_count) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (are_all_child_collisions_enabled(p_index)) {
return; // Collision list is disabled.
}
Vector<NodePath> &setting_collisions = settings[p_index]->collisions;
LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
setting_collisions.resize(p_count);
_make_collisions_dirty();
notify_property_list_changed();
}
int SpringBoneSimulator3D::get_collision_count(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0);
Vector<NodePath> setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
const LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
return setting_collisions.size();
}
void SpringBoneSimulator3D::clear_collisions(int p_index) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
if (are_all_child_collisions_enabled(p_index)) {
return; // Collision list is disabled.
}
@ -1195,7 +1195,7 @@ void SpringBoneSimulator3D::clear_collisions(int p_index) {
}
LocalVector<ObjectID> SpringBoneSimulator3D::get_valid_collision_instance_ids(int p_index) {
ERR_FAIL_INDEX_V(p_index, settings.size(), LocalVector<ObjectID>());
ERR_FAIL_INDEX_V(p_index, (int)settings.size(), LocalVector<ObjectID>());
if (collisions_dirty) {
_find_collisions();
}
@ -1345,7 +1345,7 @@ void SpringBoneSimulator3D::_skeleton_changed(Skeleton3D *p_old, Skeleton3D *p_n
}
void SpringBoneSimulator3D::_validate_bone_names() {
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
// Prior bone name.
if (!settings[i]->root_bone_name.is_empty()) {
set_root_bone_name(i, settings[i]->root_bone_name);
@ -1362,7 +1362,7 @@ void SpringBoneSimulator3D::_validate_bone_names() {
}
void SpringBoneSimulator3D::_make_joints_dirty(int p_index) {
ERR_FAIL_INDEX(p_index, settings.size());
ERR_FAIL_INDEX(p_index, (int)settings.size());
settings[p_index]->joints_dirty = true;
if (joints_dirty) {
return;
@ -1372,7 +1372,7 @@ void SpringBoneSimulator3D::_make_joints_dirty(int p_index) {
}
void SpringBoneSimulator3D::_make_all_joints_dirty() {
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
_update_joint_array(i);
}
}
@ -1396,8 +1396,8 @@ void SpringBoneSimulator3D::remove_child_notify(Node *p_child) {
}
void SpringBoneSimulator3D::_validate_rotation_axes(Skeleton3D *p_skeleton) const {
for (int i = 0; i < settings.size(); i++) {
for (int j = 0; j < settings[i]->joints.size(); j++) {
for (uint32_t i = 0; i < settings.size(); i++) {
for (uint32_t j = 0; j < settings[i]->joints.size(); j++) {
_validate_rotation_axis(p_skeleton, i, j);
}
}
@ -1410,7 +1410,7 @@ void SpringBoneSimulator3D::_validate_rotation_axis(Skeleton3D *p_skeleton, int
}
Vector3 rot = get_joint_rotation_axis_vector(p_index, p_joint).normalized();
Vector3 fwd;
if (p_joint < settings[p_index]->joints.size() - 1) {
if (p_joint < (int)settings[p_index]->joints.size() - 1) {
fwd = p_skeleton->get_bone_rest(settings[p_index]->joints[p_joint + 1]->bone).origin;
} else if (settings[p_index]->extend_end_bone) {
fwd = get_end_bone_axis(settings[p_index]->end_bone, settings[p_index]->end_bone_direction);
@ -1438,20 +1438,20 @@ void SpringBoneSimulator3D::_find_collisions() {
bool setting_updated = false;
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
LocalVector<ObjectID> &cache = settings[i]->cached_collisions;
cache.clear();
if (!settings[i]->enable_all_child_collisions) {
// Allow list.
Vector<NodePath> &setting_collisions = settings[i]->collisions;
for (int j = 0; j < setting_collisions.size(); j++) {
LocalVector<NodePath> &setting_collisions = settings[i]->collisions;
for (uint32_t j = 0; j < setting_collisions.size(); j++) {
Node *n = get_node_or_null(setting_collisions[j]);
if (!n) {
continue;
}
ObjectID id = n->get_instance_id();
if (!collisions.has(id)) {
setting_collisions.write[j] = NodePath(); // Clear path if not found.
setting_collisions[j] = NodePath(); // Clear path if not found.
} else {
cache.push_back(id);
}
@ -1459,8 +1459,8 @@ void SpringBoneSimulator3D::_find_collisions() {
} else {
// Deny list.
LocalVector<uint32_t> masks;
Vector<NodePath> &setting_exclude_collisions = settings[i]->exclude_collisions;
for (int j = 0; j < setting_exclude_collisions.size(); j++) {
LocalVector<NodePath> &setting_exclude_collisions = settings[i]->exclude_collisions;
for (uint32_t j = 0; j < setting_exclude_collisions.size(); j++) {
Node *n = get_node_or_null(setting_exclude_collisions[j]);
if (!n) {
continue;
@ -1468,7 +1468,7 @@ void SpringBoneSimulator3D::_find_collisions() {
ObjectID id = n->get_instance_id();
int find = collisions.find(id);
if (find < 0) {
setting_exclude_collisions.write[j] = NodePath(); // Clear path if not found.
setting_exclude_collisions[j] = NodePath(); // Clear path if not found.
} else {
masks.push_back((uint32_t)find);
}
@ -1538,7 +1538,7 @@ void SpringBoneSimulator3D::_update_joint_array(int p_index) {
ERR_FAIL_EDMSG("End bone must be the same as or a child of root bone.");
}
Vector<int> new_joints;
LocalVector<int> new_joints;
current_bone = settings[p_index]->end_bone;
while (current_bone != root_bone) {
new_joints.push_back(current_bone);
@ -1548,7 +1548,7 @@ void SpringBoneSimulator3D::_update_joint_array(int p_index) {
new_joints.reverse();
set_joint_count(p_index, new_joints.size());
for (int i = 0; i < new_joints.size(); i++) {
for (uint32_t i = 0; i < new_joints.size(); i++) {
set_joint_bone(p_index, i, new_joints[i]);
}
}
@ -1557,7 +1557,7 @@ void SpringBoneSimulator3D::_update_joints() {
if (!joints_dirty) {
return;
}
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
if (!settings[i]->joints_dirty) {
continue;
}
@ -1566,9 +1566,9 @@ void SpringBoneSimulator3D::_update_joints() {
settings[i]->joints_dirty = false;
continue; // Abort.
}
Vector<SpringBone3DJointSetting *> &joints = settings[i]->joints;
LocalVector<SpringBone3DJointSetting *> &joints = settings[i]->joints;
float unit = joints.size() > 0 ? (1.0 / float(joints.size() - 1)) : 0.0;
for (int j = 0; j < joints.size(); j++) {
for (uint32_t j = 0; j < joints.size(); j++) {
float offset = j * unit;
if (settings[i]->radius_damping_curve.is_valid()) {
@ -1636,7 +1636,7 @@ void SpringBoneSimulator3D::_process_modification(double p_delta) {
}
#endif //TOOLS_ENABLED
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
_init_joints(skeleton, settings[i]);
_process_joints(p_delta, skeleton, settings[i]->joints, get_valid_collision_instance_ids(i), settings[i]->cached_center, settings[i]->cached_inverted_center, settings[i]->cached_inverted_center.basis.get_rotation_quaternion());
}
@ -1652,7 +1652,7 @@ void SpringBoneSimulator3D::reset() {
}
_find_collisions();
_process_collisions();
for (int i = 0; i < settings.size(); i++) {
for (uint32_t i = 0; i < settings.size(); i++) {
settings[i]->simulation_dirty = true;
_init_joints(skeleton, settings[i]);
}
@ -1684,7 +1684,7 @@ void SpringBoneSimulator3D::_init_joints(Skeleton3D *p_skeleton, SpringBone3DSet
if (!setting->simulation_dirty) {
return;
}
for (int i = 0; i < setting->joints.size(); i++) {
for (uint32_t i = 0; i < setting->joints.size(); i++) {
if (setting->joints[i]->verlet) {
memdelete(setting->joints[i]->verlet);
setting->joints[i]->verlet = nullptr;
@ -1713,8 +1713,8 @@ void SpringBoneSimulator3D::_init_joints(Skeleton3D *p_skeleton, SpringBone3DSet
setting->simulation_dirty = false;
}
void SpringBoneSimulator3D::_process_joints(double p_delta, Skeleton3D *p_skeleton, Vector<SpringBone3DJointSetting *> &p_joints, const LocalVector<ObjectID> &p_collisions, const Transform3D &p_center_transform, const Transform3D &p_inverted_center_transform, const Quaternion &p_inverted_center_rotation) {
for (int i = 0; i < p_joints.size(); i++) {
void SpringBoneSimulator3D::_process_joints(double p_delta, Skeleton3D *p_skeleton, LocalVector<SpringBone3DJointSetting *> &p_joints, const LocalVector<ObjectID> &p_collisions, const Transform3D &p_center_transform, const Transform3D &p_inverted_center_transform, const Quaternion &p_inverted_center_rotation) {
for (uint32_t i = 0; i < p_joints.size(); i++) {
SpringBone3DVerletInfo *verlet = p_joints[i]->verlet;
if (!verlet) {
continue; // Means not extended end bone.

View File

@ -150,12 +150,12 @@ public:
Vector3 gravity_direction = Vector3(0, -1, 0);
RotationAxis rotation_axis = ROTATION_AXIS_ALL;
Vector3 rotation_axis_vector = Vector3(1, 0, 0);
Vector<SpringBone3DJointSetting *> joints;
LocalVector<SpringBone3DJointSetting *> joints;
// Cache into collisions.
bool enable_all_child_collisions = true;
Vector<NodePath> collisions;
Vector<NodePath> exclude_collisions;
LocalVector<NodePath> collisions;
LocalVector<NodePath> exclude_collisions;
LocalVector<ObjectID> cached_collisions;
// To process.
@ -165,7 +165,7 @@ public:
};
protected:
Vector<SpringBone3DSetting *> settings;
LocalVector<SpringBone3DSetting *> settings;
Vector3 external_force;
bool _get(const StringName &p_path, Variant &r_ret) const;
@ -183,7 +183,7 @@ protected:
virtual void _set_active(bool p_active) override;
virtual void _process_modification(double p_delta) override;
void _init_joints(Skeleton3D *p_skeleton, SpringBone3DSetting *p_setting);
void _process_joints(double p_delta, Skeleton3D *p_skeleton, Vector<SpringBone3DJointSetting *> &p_joints, const LocalVector<ObjectID> &p_collisions, const Transform3D &p_center_transform, const Transform3D &p_inverted_center_transform, const Quaternion &p_inverted_center_rotation);
void _process_joints(double p_delta, Skeleton3D *p_skeleton, LocalVector<SpringBone3DJointSetting *> &p_joints, const LocalVector<ObjectID> &p_collisions, const Transform3D &p_center_transform, const Transform3D &p_inverted_center_transform, const Quaternion &p_inverted_center_rotation);
void _make_joints_dirty(int p_index);
void _make_all_joints_dirty();