From a5bde6194ab67134850bc4aa71659b9329c52b01 Mon Sep 17 00:00:00 2001 From: Daniel Bross Date: Tue, 22 Jul 2025 11:00:19 +0200 Subject: [PATCH 1/2] Fixed problem with rotated transform gizmo --- editor/editor.jai | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/editor/editor.jai b/editor/editor.jai index 9f9fd5f..d2b360f 100644 --- a/editor/editor.jai +++ b/editor/editor.jai @@ -207,18 +207,32 @@ update_transform_gizmo :: (ray: Ray, mouse_position: Vector2) -> bool { // Move the currently selected entity along the selected axis axis_vec : Vector3; - if engine.editor.transform_gizmo.selected_axis == { - case .UP; - axis_vec.y = 1; - case .FORWARD; - axis_vec.z = 1; - case .RIGHT; - axis_vec.x = 1; + if engine.editor.transform_gizmo.space == { + case .WORLD; { + if engine.editor.transform_gizmo.selected_axis == { + case .UP; + axis_vec.y = 1; + case .FORWARD; + axis_vec.z = 1; + case .RIGHT; + axis_vec.x = 1; + } + } + case .LOCAL; { + if engine.editor.transform_gizmo.selected_axis == { + case .UP; + axis_vec = get_up(selected_entity.transform); + case .FORWARD; + axis_vec = get_forward(selected_entity.transform); + case .RIGHT; + axis_vec = get_right(selected_entity.transform); + } + } } r1 : Ray; r1.origin = selected_entity.transform.position; - r1.direction = rotate(axis_vec, engine.editor.transform_gizmo.transform.orientation); + r1.direction = axis_vec;//rotate(axis_vec, engine.editor.transform_gizmo.transform.orientation); r2 := normalized_screen_to_ray(*engine.editor.camera, mouse_position); From 487175f126288162df3cab3e7e91c534f2aec995 Mon Sep 17 00:00:00 2001 From: Daniel Bross Date: Tue, 22 Jul 2025 11:37:22 +0200 Subject: [PATCH 2/2] Added updateMassAndInertia call --- editor/editor.jai | 2 +- physics/physx.jai | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/editor/editor.jai b/editor/editor.jai index d2b360f..aa7c058 100644 --- a/editor/editor.jai +++ b/editor/editor.jai @@ -232,7 +232,7 @@ update_transform_gizmo :: (ray: Ray, mouse_position: Vector2) -> bool { r1 : Ray; r1.origin = selected_entity.transform.position; - r1.direction = axis_vec;//rotate(axis_vec, engine.editor.transform_gizmo.transform.orientation); + r1.direction = axis_vec; r2 := normalized_screen_to_ray(*engine.editor.camera, mouse_position); diff --git a/physics/physx.jai b/physics/physx.jai index a42254a..ff53e7f 100644 --- a/physics/physx.jai +++ b/physics/physx.jai @@ -140,7 +140,7 @@ post_physx_sync :: (game_scene: *Scene) { transform := PhysX.PxRigidActor_getGlobalPose(physx_actor.dynamic); - if physx_actor.sync_rotation_from_physx { + if physx_actor.sync_rotation_from_physx || it.physics.type == .SPHERE { set_position_rotation(it, transform.p, transform.q); } else { set_position(it, transform.p); @@ -175,7 +175,7 @@ create_physx_actor :: (e: *Entity) { if e.physics.lock & .ANGULAR_X { PhysX.PxRigidDynamic_setRigidDynamicLockFlag(dynamic, xx PhysX.PxRigidDynamicLockFlags.LockAngularX, true); - } + } if e.physics.lock & .ANGULAR_Y { PhysX.PxRigidDynamic_setRigidDynamicLockFlag(dynamic, xx PhysX.PxRigidDynamicLockFlags.LockAngularY, true); } @@ -207,6 +207,10 @@ create_physx_actor :: (e: *Entity) { PhysX.PxRigidActor_attachShape(actor, shape); + if e.physics.dynamic { + PhysX.PxRigidBodyExt_updateMassAndInertia(cast(*PhysX.PxRigidBody)actor, 1000.0, null, false); + } + PhysX.PxScene_addActor(e.scene.physx_scene.scene, actor, null); PhysX.PxShape_release(shape);