|
|
@@ -1907,6 +1907,26 @@ bool PhysicalBone::SixDOFJointData::_set(const StringName &p_name, const Variant
|
|
|
if (j.is_valid())
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS, axis_data[axis].linear_limit_softness);
|
|
|
|
|
|
+ } else if ("linear_spring_enabled" == var_name) {
|
|
|
+ axis_data[axis].linear_spring_enabled = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, axis_data[axis].linear_spring_enabled);
|
|
|
+
|
|
|
+ } else if ("linear_spring_stiffness" == var_name) {
|
|
|
+ axis_data[axis].linear_spring_stiffness = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, axis_data[axis].linear_spring_stiffness);
|
|
|
+
|
|
|
+ } else if ("linear_spring_damping" == var_name) {
|
|
|
+ axis_data[axis].linear_spring_damping = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING, axis_data[axis].linear_spring_damping);
|
|
|
+
|
|
|
+ } else if ("linear_equilibrium_point" == var_name) {
|
|
|
+ axis_data[axis].linear_equilibrium_point = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, axis_data[axis].linear_equilibrium_point);
|
|
|
+
|
|
|
} else if ("linear_restitution" == var_name) {
|
|
|
axis_data[axis].linear_restitution = p_value;
|
|
|
if (j.is_valid())
|
|
|
@@ -1952,6 +1972,26 @@ bool PhysicalBone::SixDOFJointData::_set(const StringName &p_name, const Variant
|
|
|
if (j.is_valid())
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_ERP, axis_data[axis].erp);
|
|
|
|
|
|
+ } else if ("angular_spring_enabled" == var_name) {
|
|
|
+ axis_data[axis].angular_spring_enabled = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(j, axis, PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, axis_data[axis].angular_spring_enabled);
|
|
|
+
|
|
|
+ } else if ("angular_spring_stiffness" == var_name) {
|
|
|
+ axis_data[axis].angular_spring_stiffness = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, axis_data[axis].angular_spring_stiffness);
|
|
|
+
|
|
|
+ } else if ("angular_spring_damping" == var_name) {
|
|
|
+ axis_data[axis].angular_spring_damping = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING, axis_data[axis].angular_spring_damping);
|
|
|
+
|
|
|
+ } else if ("angular_equilibrium_point" == var_name) {
|
|
|
+ axis_data[axis].angular_equilibrium_point = p_value;
|
|
|
+ if (j.is_valid())
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(j, axis, PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, axis_data[axis].angular_equilibrium_point);
|
|
|
+
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -1990,6 +2030,14 @@ bool PhysicalBone::SixDOFJointData::_get(const StringName &p_name, Variant &r_re
|
|
|
r_ret = axis_data[axis].linear_limit_lower;
|
|
|
} else if ("linear_limit_softness" == var_name) {
|
|
|
r_ret = axis_data[axis].linear_limit_softness;
|
|
|
+ } else if ("linear_spring_enabled" == var_name) {
|
|
|
+ r_ret = axis_data[axis].linear_spring_enabled;
|
|
|
+ } else if ("linear_spring_stiffness" == var_name) {
|
|
|
+ r_ret = axis_data[axis].linear_spring_stiffness;
|
|
|
+ } else if ("linear_spring_damping" == var_name) {
|
|
|
+ r_ret = axis_data[axis].linear_spring_damping;
|
|
|
+ } else if ("linear_equilibrium_point" == var_name) {
|
|
|
+ r_ret = axis_data[axis].linear_equilibrium_point;
|
|
|
} else if ("linear_restitution" == var_name) {
|
|
|
r_ret = axis_data[axis].linear_restitution;
|
|
|
} else if ("linear_damping" == var_name) {
|
|
|
@@ -2008,6 +2056,14 @@ bool PhysicalBone::SixDOFJointData::_get(const StringName &p_name, Variant &r_re
|
|
|
r_ret = axis_data[axis].angular_damping;
|
|
|
} else if ("erp" == var_name) {
|
|
|
r_ret = axis_data[axis].erp;
|
|
|
+ } else if ("angular_spring_enabled" == var_name) {
|
|
|
+ r_ret = axis_data[axis].angular_spring_enabled;
|
|
|
+ } else if ("angular_spring_stiffness" == var_name) {
|
|
|
+ r_ret = axis_data[axis].angular_spring_stiffness;
|
|
|
+ } else if ("angular_spring_damping" == var_name) {
|
|
|
+ r_ret = axis_data[axis].angular_spring_damping;
|
|
|
+ } else if ("angular_equilibrium_point" == var_name) {
|
|
|
+ r_ret = axis_data[axis].angular_equilibrium_point;
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -2022,6 +2078,10 @@ void PhysicalBone::SixDOFJointData::_get_property_list(List<PropertyInfo> *p_lis
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_limit_upper"));
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_limit_lower"));
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_limit_softness", PROPERTY_HINT_RANGE, "0.01,16,0.01"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/linear_spring_enabled"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_spring_stiffness"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_spring_damping"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_equilibrium_point"));
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"));
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/linear_damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"));
|
|
|
p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/angular_limit_enabled"));
|
|
|
@@ -2031,6 +2091,10 @@ void PhysicalBone::SixDOFJointData::_get_property_list(List<PropertyInfo> *p_lis
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_restitution", PROPERTY_HINT_RANGE, "0.01,16,0.01"));
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_damping", PROPERTY_HINT_RANGE, "0.01,16,0.01"));
|
|
|
p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/erp"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::BOOL, "joint_constraints/" + axis_names[i] + "/angular_spring_enabled"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_spring_stiffness"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_spring_damping"));
|
|
|
+ p_list->push_back(PropertyInfo(Variant::REAL, "joint_constraints/" + axis_names[i] + "/angular_equilibrium_point"));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -2294,6 +2358,10 @@ void PhysicalBone::_reload_joint() {
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_UPPER_LIMIT, g6dofjd->axis_data[axis].linear_limit_upper);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_LOWER_LIMIT, g6dofjd->axis_data[axis].linear_limit_lower);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS, g6dofjd->axis_data[axis].linear_limit_softness);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_LINEAR_SPRING, g6dofjd->axis_data[axis].linear_spring_enabled);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_STIFFNESS, g6dofjd->axis_data[axis].linear_spring_stiffness);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_DAMPING, g6dofjd->axis_data[axis].linear_spring_damping);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_SPRING_EQUILIBRIUM_POINT, g6dofjd->axis_data[axis].linear_equilibrium_point);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_RESTITUTION, g6dofjd->axis_data[axis].linear_restitution);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_LINEAR_DAMPING, g6dofjd->axis_data[axis].linear_damping);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT, g6dofjd->axis_data[axis].angular_limit_enabled);
|
|
|
@@ -2303,6 +2371,10 @@ void PhysicalBone::_reload_joint() {
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_RESTITUTION, g6dofjd->axis_data[axis].angular_restitution);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_DAMPING, g6dofjd->axis_data[axis].angular_damping);
|
|
|
PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_ERP, g6dofjd->axis_data[axis].erp);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_flag(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING, g6dofjd->axis_data[axis].angular_spring_enabled);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_STIFFNESS, g6dofjd->axis_data[axis].angular_spring_stiffness);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_DAMPING, g6dofjd->axis_data[axis].angular_spring_damping);
|
|
|
+ PhysicsServer::get_singleton()->generic_6dof_joint_set_param(joint, static_cast<Vector3::Axis>(axis), PhysicsServer::G6DOF_JOINT_ANGULAR_SPRING_EQUILIBRIUM_POINT, g6dofjd->axis_data[axis].angular_equilibrium_point);
|
|
|
}
|
|
|
|
|
|
} break;
|