Change Vector to LocalVector in SpringBone

This commit is contained in:
Silc Lizard (Tokage) Renew
2025-10-08 04:41:13 +09:00
parent 20430236e7
commit 830b141611
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/")) { if (path.begins_with("settings/")) {
int which = path.get_slicec('/', 1).to_int(); int which = path.get_slicec('/', 1).to_int();
String what = path.get_slicec('/', 2); 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") { if (what == "root_bone_name") {
set_root_bone_name(which, p_value); 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/")) { if (path.begins_with("settings/")) {
int which = path.get_slicec('/', 1).to_int(); int which = path.get_slicec('/', 1).to_int();
String what = path.get_slicec('/', 2); 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") { if (what == "root_bone_name") {
r_ret = get_root_bone_name(which); r_ret = get_root_bone_name(which);
@ -291,7 +291,7 @@ void SpringBoneSimulator3D::_get_property_list(List<PropertyInfo> *p_list) const
LocalVector<PropertyInfo> props; 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) + "/"; 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::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)); 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::OBJECT, path + "gravity/damping_curve", PROPERTY_HINT_RESOURCE_TYPE, "Curve"));
props.push_back(PropertyInfo(Variant::VECTOR3, path + "gravity/direction")); 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")); 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) + "/"; 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::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)); 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::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/")); 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); 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::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/")); 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); String collision_path = path + "collisions/" + itos(j);
props.push_back(PropertyInfo(Variant::NODE_PATH, collision_path, PROPERTY_HINT_NODE_PATH_VALID_TYPES, "SpringBoneCollision3D")); 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. // Setting.
void SpringBoneSimulator3D::set_root_bone_name(int p_index, const String &p_bone_name) { 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; settings[p_index]->root_bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { 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; return settings[p_index]->root_bone_name;
} }
void SpringBoneSimulator3D::set_root_bone(int p_index, int p_bone) { 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; bool changed = settings[p_index]->root_bone != p_bone;
settings[p_index]->root_bone = p_bone; settings[p_index]->root_bone = p_bone;
Skeleton3D *sk = get_skeleton(); 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 { 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; return settings[p_index]->root_bone;
} }
void SpringBoneSimulator3D::set_end_bone_name(int p_index, const String &p_bone_name) { 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; settings[p_index]->end_bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { 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; return settings[p_index]->end_bone_name;
} }
void SpringBoneSimulator3D::set_end_bone(int p_index, int p_bone) { 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; bool changed = settings[p_index]->end_bone != p_bone;
settings[p_index]->end_bone = p_bone; settings[p_index]->end_bone = p_bone;
Skeleton3D *sk = get_skeleton(); 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 { 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; return settings[p_index]->end_bone;
} }
void SpringBoneSimulator3D::set_extend_end_bone(int p_index, bool p_enabled) { 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; settings[p_index]->extend_end_bone = p_enabled;
_make_joints_dirty(p_index); _make_joints_dirty(p_index);
notify_property_list_changed(); notify_property_list_changed();
} }
bool SpringBoneSimulator3D::is_end_bone_extended(int p_index) const { 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; return settings[p_index]->extend_end_bone;
} }
void SpringBoneSimulator3D::set_end_bone_direction(int p_index, BoneDirection p_bone_direction) { 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; settings[p_index]->end_bone_direction = p_bone_direction;
_make_joints_dirty(p_index); _make_joints_dirty(p_index);
} }
SpringBoneSimulator3D::BoneDirection SpringBoneSimulator3D::get_end_bone_direction(int p_index) const { 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; return settings[p_index]->end_bone_direction;
} }
void SpringBoneSimulator3D::set_end_bone_length(int p_index, float p_length) { 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; settings[p_index]->end_bone_length = p_length;
_make_joints_dirty(p_index); _make_joints_dirty(p_index);
} }
float SpringBoneSimulator3D::get_end_bone_length(int p_index) const { 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; 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) { 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; bool center_changed = settings[p_index]->center_from != p_center_from;
settings[p_index]->center_from = p_center_from; settings[p_index]->center_from = p_center_from;
if (center_changed) { 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 { 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; return settings[p_index]->center_from;
} }
void SpringBoneSimulator3D::set_center_node(int p_index, const NodePath &p_node_path) { 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; bool center_changed = settings[p_index]->center_node != p_node_path;
settings[p_index]->center_node = p_node_path; settings[p_index]->center_node = p_node_path;
if (center_changed) { 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 { 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; return settings[p_index]->center_node;
} }
void SpringBoneSimulator3D::set_center_bone_name(int p_index, const String &p_bone_name) { 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; settings[p_index]->center_bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { 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; return settings[p_index]->center_bone_name;
} }
void SpringBoneSimulator3D::set_center_bone(int p_index, int p_bone) { 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; bool center_changed = settings[p_index]->center_bone != p_bone;
settings[p_index]->center_bone = p_bone; settings[p_index]->center_bone = p_bone;
Skeleton3D *sk = get_skeleton(); 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 { 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; return settings[p_index]->center_bone;
} }
void SpringBoneSimulator3D::set_radius(int p_index, float p_radius) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->radius;
} }
void SpringBoneSimulator3D::set_radius_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->radius_damping_curve;
} }
void SpringBoneSimulator3D::set_stiffness(int p_index, float p_stiffness) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->stiffness;
} }
void SpringBoneSimulator3D::set_stiffness_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->stiffness_damping_curve;
} }
void SpringBoneSimulator3D::set_drag(int p_index, float p_drag) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->drag;
} }
void SpringBoneSimulator3D::set_drag_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->drag_damping_curve;
} }
void SpringBoneSimulator3D::set_gravity(int p_index, float p_gravity) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->gravity;
} }
void SpringBoneSimulator3D::set_gravity_damping_curve(int p_index, const Ref<Curve> &p_damping_curve) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->gravity_damping_curve;
} }
void SpringBoneSimulator3D::set_gravity_direction(int p_index, const Vector3 &p_gravity_direction) { 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()); ERR_FAIL_COND(p_gravity_direction.is_zero_approx());
if (is_config_individual(p_index)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->gravity_direction;
} }
void SpringBoneSimulator3D::set_rotation_axis(int p_index, RotationAxis p_axis) { 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)) { if (is_config_individual(p_index)) {
return; // Joint config is individual mode. 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 { 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; return settings[p_index]->rotation_axis;
} }
void SpringBoneSimulator3D::set_rotation_axis_vector(int p_index, const Vector3 &p_vector) { 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) { if (is_config_individual(p_index) || settings[p_index]->rotation_axis != ROTATION_AXIS_CUSTOM) {
return; // Joint config is individual mode. 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 { 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; Vector3 ret;
switch (settings[p_index]->rotation_axis) { switch (settings[p_index]->rotation_axis) {
case ROTATION_AXIS_X: 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) { void SpringBoneSimulator3D::set_setting_count(int p_count) {
ERR_FAIL_COND(p_count < 0); ERR_FAIL_COND(p_count < 0);
int delta = p_count - settings.size(); int delta = p_count - (int)settings.size();
if (delta < 0) { if (delta < 0) {
for (int i = delta; i < 0; i++) { for (int i = delta; i < 0; i++) {
memdelete(settings[settings.size() + i]); memdelete(settings[(int)settings.size() + i]);
} }
} }
settings.resize(p_count); settings.resize(p_count);
delta++; delta++;
if (delta > 1) { if (delta > 1) {
for (int i = 1; i < delta; i++) { for (int i = 1; i < delta; i++) {
settings.write[p_count - i] = memnew(SpringBone3DSetting); settings[p_count - i] = memnew(SpringBone3DSetting);
} }
} }
notify_property_list_changed(); notify_property_list_changed();
@ -851,21 +851,21 @@ void SpringBoneSimulator3D::clear_settings() {
// Individual joints. // Individual joints.
void SpringBoneSimulator3D::set_individual_config(int p_index, bool p_enabled) { 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; settings[p_index]->individual_config = p_enabled;
_make_joints_dirty(p_index); _make_joints_dirty(p_index);
notify_property_list_changed(); notify_property_list_changed();
} }
bool SpringBoneSimulator3D::is_config_individual(int p_index) const { 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; return settings[p_index]->individual_config;
} }
void SpringBoneSimulator3D::set_joint_bone_name(int p_index, int p_joint, const String &p_bone_name) { void SpringBoneSimulator3D::set_joint_bone_name(int p_index, int p_joint, const String &p_bone_name) {
ERR_FAIL_INDEX(p_index, settings.size()); ERR_FAIL_INDEX(p_index, (int)settings.size());
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->bone_name = p_bone_name; joints[p_joint]->bone_name = p_bone_name;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { String SpringBoneSimulator3D::get_joint_bone_name(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), String()); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), String());
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), String()); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), String());
return joints[p_joint]->bone_name; return joints[p_joint]->bone_name;
} }
void SpringBoneSimulator3D::set_joint_bone(int p_index, int p_joint, int p_bone) { void SpringBoneSimulator3D::set_joint_bone(int p_index, int p_joint, int p_bone) {
ERR_FAIL_INDEX(p_index, settings.size()); ERR_FAIL_INDEX(p_index, (int)settings.size());
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->bone = p_bone; joints[p_joint]->bone = p_bone;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { int SpringBoneSimulator3D::get_joint_bone(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), -1); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), -1);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), -1); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), -1);
return joints[p_joint]->bone; return joints[p_joint]->bone;
} }
void SpringBoneSimulator3D::set_joint_radius(int p_index, int p_joint, float p_radius) { 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)) { if (!is_config_individual(p_index)) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->radius = p_radius; joints[p_joint]->radius = p_radius;
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
update_gizmos(); 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 { float SpringBoneSimulator3D::get_joint_radius(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->radius; return joints[p_joint]->radius;
} }
void SpringBoneSimulator3D::set_joint_stiffness(int p_index, int p_joint, float p_stiffness) { 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)) { if (!is_config_individual(p_index)) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->stiffness = p_stiffness; joints[p_joint]->stiffness = p_stiffness;
} }
float SpringBoneSimulator3D::get_joint_stiffness(int p_index, int p_joint) const { float SpringBoneSimulator3D::get_joint_stiffness(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->stiffness; return joints[p_joint]->stiffness;
} }
void SpringBoneSimulator3D::set_joint_drag(int p_index, int p_joint, float p_drag) { 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)) { if (!is_config_individual(p_index)) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->drag = p_drag; joints[p_joint]->drag = p_drag;
} }
float SpringBoneSimulator3D::get_joint_drag(int p_index, int p_joint) const { float SpringBoneSimulator3D::get_joint_drag(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->drag; return joints[p_joint]->drag;
} }
void SpringBoneSimulator3D::set_joint_gravity(int p_index, int p_joint, float p_gravity) { 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)) { if (!is_config_individual(p_index)) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->gravity = p_gravity; joints[p_joint]->gravity = p_gravity;
} }
float SpringBoneSimulator3D::get_joint_gravity(int p_index, int p_joint) const { float SpringBoneSimulator3D::get_joint_gravity(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), 0); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), 0);
return joints[p_joint]->gravity; return joints[p_joint]->gravity;
} }
void SpringBoneSimulator3D::set_joint_gravity_direction(int p_index, int p_joint, const Vector3 &p_gravity_direction) { 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()); ERR_FAIL_COND(p_gravity_direction.is_zero_approx());
if (!is_config_individual(p_index)) { if (!is_config_individual(p_index)) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->gravity_direction = p_gravity_direction; joints[p_joint]->gravity_direction = p_gravity_direction;
} }
Vector3 SpringBoneSimulator3D::get_joint_gravity_direction(int p_index, int p_joint) const { 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)); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Vector3(0, -1, 0));
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), Vector3(0, -1, 0)); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), Vector3(0, -1, 0));
return joints[p_joint]->gravity_direction; return joints[p_joint]->gravity_direction;
} }
void SpringBoneSimulator3D::set_joint_rotation_axis(int p_index, int p_joint, RotationAxis p_axis) { 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)) { if (!is_config_individual(p_index)) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->rotation_axis = p_axis; joints[p_joint]->rotation_axis = p_axis;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { 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); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), ROTATION_AXIS_ALL);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), ROTATION_AXIS_ALL); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), ROTATION_AXIS_ALL);
return joints[p_joint]->rotation_axis; return joints[p_joint]->rotation_axis;
} }
void SpringBoneSimulator3D::set_joint_rotation_axis_vector(int p_index, int p_joint, const Vector3 &p_vector) { 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) { if (!is_config_individual(p_index) || settings[p_index]->rotation_axis != ROTATION_AXIS_CUSTOM) {
return; // Joints are read-only. return; // Joints are read-only.
} }
Vector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints; LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX(p_joint, joints.size()); ERR_FAIL_INDEX(p_joint, (int)joints.size());
joints[p_joint]->rotation_axis_vector = p_vector; joints[p_joint]->rotation_axis_vector = p_vector;
Skeleton3D *sk = get_skeleton(); Skeleton3D *sk = get_skeleton();
if (sk) { 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 { Vector3 SpringBoneSimulator3D::get_joint_rotation_axis_vector(int p_index, int p_joint) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), Vector3()); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), Vector3());
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
ERR_FAIL_INDEX_V(p_joint, joints.size(), Vector3()); ERR_FAIL_INDEX_V(p_joint, (int)joints.size(), Vector3());
return joints[p_joint]->get_rotation_axis_vector(); return joints[p_joint]->get_rotation_axis_vector();
} }
void SpringBoneSimulator3D::set_joint_count(int p_index, int p_count) { 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); 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(); int delta = p_count - joints.size();
if (delta < 0) { if (delta < 0) {
for (int i = delta; i < 0; i++) { for (int i = delta; i < 0; i++) {
@ -1057,39 +1057,39 @@ void SpringBoneSimulator3D::set_joint_count(int p_index, int p_count) {
delta++; delta++;
if (delta > 1) { if (delta > 1) {
for (int i = 1; i < delta; i++) { for (int i = 1; i < delta; i++) {
joints.write[p_count - i] = memnew(SpringBone3DJointSetting); joints[p_count - i] = memnew(SpringBone3DJointSetting);
} }
} }
notify_property_list_changed(); notify_property_list_changed();
} }
int SpringBoneSimulator3D::get_joint_count(int p_index) const { int SpringBoneSimulator3D::get_joint_count(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<SpringBone3DJointSetting *> joints = settings[p_index]->joints; const LocalVector<SpringBone3DJointSetting *> &joints = settings[p_index]->joints;
return joints.size(); return joints.size();
} }
// Individual collisions. // Individual collisions.
void SpringBoneSimulator3D::set_enable_all_child_collisions(int p_index, bool p_enabled) { 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; settings[p_index]->enable_all_child_collisions = p_enabled;
notify_property_list_changed(); notify_property_list_changed();
} }
bool SpringBoneSimulator3D::are_all_child_collisions_enabled(int p_index) const { 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; 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) { 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)) { if (!are_all_child_collisions_enabled(p_index)) {
return; // Exclude collision list is disabled. 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;
ERR_FAIL_INDEX(p_collision, setting_exclude_collisions.size()); ERR_FAIL_INDEX(p_collision, (int)setting_exclude_collisions.size());
setting_exclude_collisions.write[p_collision] = NodePath(); // Reset first. setting_exclude_collisions[p_collision] = NodePath(); // Reset first.
if (is_inside_tree()) { if (is_inside_tree()) {
Node *node = get_node_or_null(p_node_path); Node *node = get_node_or_null(p_node_path);
if (!node) { 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."); 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(); _make_collisions_dirty();
} }
NodePath SpringBoneSimulator3D::get_exclude_collision_path(int p_index, int p_collision) const { NodePath SpringBoneSimulator3D::get_exclude_collision_path(int p_index, int p_collision) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), NodePath()); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), NodePath());
Vector<NodePath> setting_exclude_collisions = settings[p_index]->exclude_collisions; const LocalVector<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_collision, (int)setting_exclude_collisions.size(), NodePath());
return setting_exclude_collisions[p_collision]; return setting_exclude_collisions[p_collision];
} }
void SpringBoneSimulator3D::set_exclude_collision_count(int p_index, int p_count) { 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)) { if (!are_all_child_collisions_enabled(p_index)) {
return; // Exclude collision list is disabled. 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); setting_exclude_collisions.resize(p_count);
_make_collisions_dirty(); _make_collisions_dirty();
notify_property_list_changed(); notify_property_list_changed();
} }
int SpringBoneSimulator3D::get_exclude_collision_count(int p_index) const { int SpringBoneSimulator3D::get_exclude_collision_count(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<NodePath> setting_exclude_collisions = settings[p_index]->exclude_collisions; const LocalVector<NodePath> &setting_exclude_collisions = settings[p_index]->exclude_collisions;
return setting_exclude_collisions.size(); return setting_exclude_collisions.size();
} }
void SpringBoneSimulator3D::clear_exclude_collisions(int p_index) { 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)) { if (!are_all_child_collisions_enabled(p_index)) {
return; // Exclude collision list is disabled. 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) { 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)) { if (are_all_child_collisions_enabled(p_index)) {
return; // Collision list is disabled. return; // Collision list is disabled.
} }
Vector<NodePath> &setting_collisions = settings[p_index]->collisions; LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX(p_collision, setting_collisions.size()); ERR_FAIL_INDEX(p_collision, (int)setting_collisions.size());
setting_collisions.write[p_collision] = NodePath(); // Reset first. setting_collisions[p_collision] = NodePath(); // Reset first.
if (is_inside_tree()) { if (is_inside_tree()) {
Node *node = get_node_or_null(p_node_path); Node *node = get_node_or_null(p_node_path);
if (!node) { 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."); 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(); _make_collisions_dirty();
} }
NodePath SpringBoneSimulator3D::get_collision_path(int p_index, int p_collision) const { NodePath SpringBoneSimulator3D::get_collision_path(int p_index, int p_collision) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), NodePath()); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), NodePath());
Vector<NodePath> setting_collisions = settings[p_index]->collisions; const LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
ERR_FAIL_INDEX_V(p_collision, setting_collisions.size(), NodePath()); ERR_FAIL_INDEX_V(p_collision, (int)setting_collisions.size(), NodePath());
return setting_collisions[p_collision]; return setting_collisions[p_collision];
} }
void SpringBoneSimulator3D::set_collision_count(int p_index, int p_count) { 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)) { if (are_all_child_collisions_enabled(p_index)) {
return; // Collision list is disabled. 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); setting_collisions.resize(p_count);
_make_collisions_dirty(); _make_collisions_dirty();
notify_property_list_changed(); notify_property_list_changed();
} }
int SpringBoneSimulator3D::get_collision_count(int p_index) const { int SpringBoneSimulator3D::get_collision_count(int p_index) const {
ERR_FAIL_INDEX_V(p_index, settings.size(), 0); ERR_FAIL_INDEX_V(p_index, (int)settings.size(), 0);
Vector<NodePath> setting_collisions = settings[p_index]->collisions; const LocalVector<NodePath> &setting_collisions = settings[p_index]->collisions;
return setting_collisions.size(); return setting_collisions.size();
} }
void SpringBoneSimulator3D::clear_collisions(int p_index) { 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)) { if (are_all_child_collisions_enabled(p_index)) {
return; // Collision list is disabled. 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) { 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) { if (collisions_dirty) {
_find_collisions(); _find_collisions();
} }
@ -1345,7 +1345,7 @@ void SpringBoneSimulator3D::_skeleton_changed(Skeleton3D *p_old, Skeleton3D *p_n
} }
void SpringBoneSimulator3D::_validate_bone_names() { 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. // Prior bone name.
if (!settings[i]->root_bone_name.is_empty()) { if (!settings[i]->root_bone_name.is_empty()) {
set_root_bone_name(i, settings[i]->root_bone_name); 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) { 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; settings[p_index]->joints_dirty = true;
if (joints_dirty) { if (joints_dirty) {
return; return;
@ -1372,7 +1372,7 @@ void SpringBoneSimulator3D::_make_joints_dirty(int p_index) {
} }
void SpringBoneSimulator3D::_make_all_joints_dirty() { 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); _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 { void SpringBoneSimulator3D::_validate_rotation_axes(Skeleton3D *p_skeleton) const {
for (int i = 0; i < settings.size(); i++) { for (uint32_t i = 0; i < settings.size(); i++) {
for (int j = 0; j < settings[i]->joints.size(); j++) { for (uint32_t j = 0; j < settings[i]->joints.size(); j++) {
_validate_rotation_axis(p_skeleton, i, 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 rot = get_joint_rotation_axis_vector(p_index, p_joint).normalized();
Vector3 fwd; 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; fwd = p_skeleton->get_bone_rest(settings[p_index]->joints[p_joint + 1]->bone).origin;
} else if (settings[p_index]->extend_end_bone) { } else if (settings[p_index]->extend_end_bone) {
fwd = get_end_bone_axis(settings[p_index]->end_bone, settings[p_index]->end_bone_direction); 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; 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; LocalVector<ObjectID> &cache = settings[i]->cached_collisions;
cache.clear(); cache.clear();
if (!settings[i]->enable_all_child_collisions) { if (!settings[i]->enable_all_child_collisions) {
// Allow list. // Allow list.
Vector<NodePath> &setting_collisions = settings[i]->collisions; LocalVector<NodePath> &setting_collisions = settings[i]->collisions;
for (int j = 0; j < setting_collisions.size(); j++) { for (uint32_t j = 0; j < setting_collisions.size(); j++) {
Node *n = get_node_or_null(setting_collisions[j]); Node *n = get_node_or_null(setting_collisions[j]);
if (!n) { if (!n) {
continue; continue;
} }
ObjectID id = n->get_instance_id(); ObjectID id = n->get_instance_id();
if (!collisions.has(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 { } else {
cache.push_back(id); cache.push_back(id);
} }
@ -1459,8 +1459,8 @@ void SpringBoneSimulator3D::_find_collisions() {
} else { } else {
// Deny list. // Deny list.
LocalVector<uint32_t> masks; LocalVector<uint32_t> masks;
Vector<NodePath> &setting_exclude_collisions = settings[i]->exclude_collisions; LocalVector<NodePath> &setting_exclude_collisions = settings[i]->exclude_collisions;
for (int j = 0; j < setting_exclude_collisions.size(); j++) { for (uint32_t j = 0; j < setting_exclude_collisions.size(); j++) {
Node *n = get_node_or_null(setting_exclude_collisions[j]); Node *n = get_node_or_null(setting_exclude_collisions[j]);
if (!n) { if (!n) {
continue; continue;
@ -1468,7 +1468,7 @@ void SpringBoneSimulator3D::_find_collisions() {
ObjectID id = n->get_instance_id(); ObjectID id = n->get_instance_id();
int find = collisions.find(id); int find = collisions.find(id);
if (find < 0) { 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 { } else {
masks.push_back((uint32_t)find); 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."); 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; current_bone = settings[p_index]->end_bone;
while (current_bone != root_bone) { while (current_bone != root_bone) {
new_joints.push_back(current_bone); new_joints.push_back(current_bone);
@ -1548,7 +1548,7 @@ void SpringBoneSimulator3D::_update_joint_array(int p_index) {
new_joints.reverse(); new_joints.reverse();
set_joint_count(p_index, new_joints.size()); 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]); set_joint_bone(p_index, i, new_joints[i]);
} }
} }
@ -1557,7 +1557,7 @@ void SpringBoneSimulator3D::_update_joints() {
if (!joints_dirty) { if (!joints_dirty) {
return; return;
} }
for (int i = 0; i < settings.size(); i++) { for (uint32_t i = 0; i < settings.size(); i++) {
if (!settings[i]->joints_dirty) { if (!settings[i]->joints_dirty) {
continue; continue;
} }
@ -1566,9 +1566,9 @@ void SpringBoneSimulator3D::_update_joints() {
settings[i]->joints_dirty = false; settings[i]->joints_dirty = false;
continue; // Abort. 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; 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; float offset = j * unit;
if (settings[i]->radius_damping_curve.is_valid()) { if (settings[i]->radius_damping_curve.is_valid()) {
@ -1636,7 +1636,7 @@ void SpringBoneSimulator3D::_process_modification(double p_delta) {
} }
#endif //TOOLS_ENABLED #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]); _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()); _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(); _find_collisions();
_process_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; settings[i]->simulation_dirty = true;
_init_joints(skeleton, settings[i]); _init_joints(skeleton, settings[i]);
} }
@ -1684,7 +1684,7 @@ void SpringBoneSimulator3D::_init_joints(Skeleton3D *p_skeleton, SpringBone3DSet
if (!setting->simulation_dirty) { if (!setting->simulation_dirty) {
return; 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) { if (setting->joints[i]->verlet) {
memdelete(setting->joints[i]->verlet); memdelete(setting->joints[i]->verlet);
setting->joints[i]->verlet = nullptr; setting->joints[i]->verlet = nullptr;
@ -1713,8 +1713,8 @@ void SpringBoneSimulator3D::_init_joints(Skeleton3D *p_skeleton, SpringBone3DSet
setting->simulation_dirty = false; 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) { 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 (int i = 0; i < p_joints.size(); i++) { for (uint32_t i = 0; i < p_joints.size(); i++) {
SpringBone3DVerletInfo *verlet = p_joints[i]->verlet; SpringBone3DVerletInfo *verlet = p_joints[i]->verlet;
if (!verlet) { if (!verlet) {
continue; // Means not extended end bone. continue; // Means not extended end bone.

View File

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