Merge pull request #64343 from TokageItLab/priority-ph
This commit is contained in:
commit
5193332d10
30 changed files with 213 additions and 2 deletions
|
|
@ -183,6 +183,17 @@ bool CollisionObject3D::get_collision_mask_value(int p_layer_number) const {
|
|||
return get_collision_mask() & (1 << (p_layer_number - 1));
|
||||
}
|
||||
|
||||
void CollisionObject3D::set_collision_priority(real_t p_priority) {
|
||||
collision_priority = p_priority;
|
||||
if (!area) {
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_priority(get_rid(), p_priority);
|
||||
}
|
||||
}
|
||||
|
||||
real_t CollisionObject3D::get_collision_priority() const {
|
||||
return collision_priority;
|
||||
}
|
||||
|
||||
void CollisionObject3D::set_disable_mode(DisableMode p_mode) {
|
||||
if (disable_mode == p_mode) {
|
||||
return;
|
||||
|
|
@ -432,6 +443,8 @@ void CollisionObject3D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_collision_layer_value", "layer_number"), &CollisionObject3D::get_collision_layer_value);
|
||||
ClassDB::bind_method(D_METHOD("set_collision_mask_value", "layer_number", "value"), &CollisionObject3D::set_collision_mask_value);
|
||||
ClassDB::bind_method(D_METHOD("get_collision_mask_value", "layer_number"), &CollisionObject3D::get_collision_mask_value);
|
||||
ClassDB::bind_method(D_METHOD("set_collision_priority", "priority"), &CollisionObject3D::set_collision_priority);
|
||||
ClassDB::bind_method(D_METHOD("get_collision_priority"), &CollisionObject3D::get_collision_priority);
|
||||
ClassDB::bind_method(D_METHOD("set_disable_mode", "mode"), &CollisionObject3D::set_disable_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_disable_mode"), &CollisionObject3D::get_disable_mode);
|
||||
ClassDB::bind_method(D_METHOD("set_ray_pickable", "ray_pickable"), &CollisionObject3D::set_ray_pickable);
|
||||
|
|
@ -466,6 +479,7 @@ void CollisionObject3D::_bind_methods() {
|
|||
ADD_GROUP("Collision", "collision_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_layer", "get_collision_layer");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "collision_priority"), "set_collision_priority", "get_collision_priority");
|
||||
|
||||
ADD_GROUP("Input", "input_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "input_ray_pickable"), "set_ray_pickable", "is_ray_pickable");
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public:
|
|||
private:
|
||||
uint32_t collision_layer = 1;
|
||||
uint32_t collision_mask = 1;
|
||||
real_t collision_priority = 1.0;
|
||||
|
||||
bool area = false;
|
||||
|
||||
|
|
@ -125,6 +126,9 @@ public:
|
|||
void set_collision_mask_value(int p_layer_number, bool p_value);
|
||||
bool get_collision_mask_value(int p_layer_number) const;
|
||||
|
||||
void set_collision_priority(real_t p_priority);
|
||||
real_t get_collision_priority() const;
|
||||
|
||||
void set_disable_mode(DisableMode p_mode);
|
||||
DisableMode get_disable_mode() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -3417,6 +3417,7 @@ void PhysicalBone3D::_start_physics_simulation() {
|
|||
set_body_mode(PhysicsServer3D::BODY_MODE_DYNAMIC);
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_layer(get_rid(), get_collision_layer());
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_mask(get_rid(), get_collision_mask());
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_priority(get_rid(), get_collision_priority());
|
||||
PhysicsServer3D::get_singleton()->body_set_state_sync_callback(get_rid(), this, _body_state_changed_callback);
|
||||
set_as_top_level(true);
|
||||
_internal_simulate_physics = true;
|
||||
|
|
@ -3430,10 +3431,12 @@ void PhysicalBone3D::_stop_physics_simulation() {
|
|||
set_body_mode(PhysicsServer3D::BODY_MODE_KINEMATIC);
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_layer(get_rid(), get_collision_layer());
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_mask(get_rid(), get_collision_mask());
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_priority(get_rid(), get_collision_priority());
|
||||
} else {
|
||||
set_body_mode(PhysicsServer3D::BODY_MODE_STATIC);
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_layer(get_rid(), 0);
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_mask(get_rid(), 0);
|
||||
PhysicsServer3D::get_singleton()->body_set_collision_priority(get_rid(), 1.0);
|
||||
}
|
||||
if (_internal_simulate_physics) {
|
||||
PhysicsServer3D::get_singleton()->body_set_state_sync_callback(get_rid(), nullptr, nullptr);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue