]> git.tdb.fi Git - libs/game.git/commitdiff
Use world space transforms to interface with physics simulation
authorMikko Rasa <tdb@tdb.fi>
Mon, 14 Apr 2025 10:12:59 +0000 (13:12 +0300)
committerMikko Rasa <tdb@tdb.fi>
Mon, 14 Apr 2025 10:17:49 +0000 (13:17 +0300)
The physics library require everything to be in the same space.

source/game/physicssystem.cpp

index f2455e28b7c8772e242d80d095e332fb7e1ffa5d..ef6faba774cad55cf405958a8a143ca76090bb82 100644 (file)
@@ -110,7 +110,7 @@ void PhysicsSystem::tick(Time::TimeDelta dt)
 
                if(transform_changed)
                {
-                       const TransformValues &tv = transform->get_values();
+                       TransformValues tv = TransformValues::from_matrix(transform->get_world_transform().get_matrix());
                        if(b.body->is_kinematic() && !motion_changed)
                                b.physics_body->move_kinematic(tv.position, tv.rotation, dt);
                        else
@@ -135,8 +135,7 @@ void PhysicsSystem::tick(Time::TimeDelta dt)
                        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());
+                               transform->set_world_values({ b.physics_body->get_position(), b.physics_body->get_rotation() });
                                b.transform_generation = transform->get_write_generation();
                        }