Change Vector to LocalVector in SpringBone
This commit is contained in:
@ -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.
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user