{
STATIC,
MOVING,
+ INCORPOREAL,
RAYCAST
};
Handle<Transform> transform = srb->entity->get_transform();
Physics::MotionType motion = (srb->motion ? Physics::DYNAMIC : Physics::STATIC);
srb->physics_body = make_unique<Physics::RigidBody>(world, srb->shape->get_shape(), transform->get_position(), transform->get_rotation(), motion);
+ srb->physics_body->set_corporeal(srb->body->is_corporeal());
srb->physics_body->set_report_contacts(srb->body->reports_collisions());
- unsigned layer = (motion==Physics::STATIC ? CollisionLayer::STATIC : CollisionLayer::MOVING);
+ 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);
if(srb->shape->is_raycast_target())
collision_mask |= 1<<CollisionLayer::RAYCAST;
void set_kinematic(bool);
bool is_kinematic() const { return read().kinematic; }
+ bool is_corporeal() const { return setup.corporeal; }
bool reports_collisions() const { return setup.report_collisions; }
};