b.physics_body->move_kinematic(tv.position, tv.rotation, dt);
else
b.physics_body->set_transform(tv.position, tv.rotation);
+
+ if(b.body->is_kinematic() || !b.motion)
+ b.transform_generation = transform->get_read_generation();
}
if(motion_changed)
world.step(dt/Time::sec);
for(SimulatedRigidBody &b: rigid_bodies)
- {
- Handle<Transform> transform = b.entity->get_transform();
- transform->set_position(b.physics_body->get_position());
- transform->set_rotation(b.physics_body->get_rotation());
- b.transform_generation = transform->get_write_generation();
if(b.motion)
{
+ if(!b.body->is_kinematic())
+ {
+ Handle<Transform> transform = b.entity->get_transform();
+ transform->set_position(b.physics_body->get_position());
+ transform->set_rotation(b.physics_body->get_rotation());
+ b.transform_generation = transform->get_write_generation();
+ }
+
b.motion->set_linear_velocity(b.physics_body->get_linear_velocity());
b.motion->set_angular_velocity(b.physics_body->get_angular_velocity());
b.motion_generation = b.motion->get_write_generation();
}
- }
for(const Events::Collision &c: collision_queue)
event_source.emit<Events::Collision>(c);