srb->physics_body->set_corporeal(srb->body->is_corporeal());
srb->physics_body->set_report_contacts(srb->body->reports_collisions());
- unsigned layer = (!srb->body->is_corporeal() ? CollisionLayer::INCORPOREAL : motion==Physics::STATIC ? CollisionLayer::STATIC : CollisionLayer::MOVING);
- uint32_t collision_mask = (1<<CollisionLayer::STATIC) | (1<<CollisionLayer::MOVING);
+ unsigned layer;
+ uint32_t collision_mask = 1<<CollisionLayer::MOVING;
+
+ if(!srb->body->is_corporeal())
+ layer = CollisionLayer::INCORPOREAL;
+ else
+ {
+ collision_mask |= 1<<CollisionLayer::STATIC;
+ if(motion==Physics::STATIC)
+ layer = CollisionLayer::STATIC;
+ else
+ {
+ layer = CollisionLayer::MOVING;
+ collision_mask |= 1<<CollisionLayer::INCORPOREAL;
+ }
+ }
+
if(srb->shape->is_raycast_target())
collision_mask |= 1<<CollisionLayer::RAYCAST;
+
srb->physics_body->set_collisions(layer, collision_mask);
if(srb->body->reports_collisions() || srb->shape->is_raycast_target())