From 37736753e5cca81c4da694eba86fff059c77f59c Mon Sep 17 00:00:00 2001 From: sergeypdev Date: Sun, 13 Jul 2025 23:28:07 +0400 Subject: [PATCH] Fix level reload not working when paused --- assets/blender/test_level_blend/NurbsPath.glb | 4 ++-- assets/blender/test_level_blend/Plane.glb | 4 ++-- assets/blender/test_level_blend/Scene.scn | 2 +- assets/blender/testblend_blend/Bakery.glb | 2 +- assets/blender/testblend_blend/Fire_Station.glb | 2 +- assets/blender/testblend_blend/Gas_Station_Shop.glb | 2 +- assets/blender/testblend_blend/Green_House.glb | 2 +- assets/blender/testblend_blend/Hotel.glb | 2 +- game/assets/assets.odin | 6 +++--- game/game.odin | 6 ++++-- game/physics/scene.odin | 6 +++--- src_assets/test_level.blend | 4 ++-- src_assets/test_level.blend1 | 4 ++-- 13 files changed, 24 insertions(+), 22 deletions(-) diff --git a/assets/blender/test_level_blend/NurbsPath.glb b/assets/blender/test_level_blend/NurbsPath.glb index e2bbb48..7458135 100644 --- a/assets/blender/test_level_blend/NurbsPath.glb +++ b/assets/blender/test_level_blend/NurbsPath.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4e478ec4a9e49ffa734dff5d189583bc2028b5c4f3c2d1345dc7183c03961d -size 20972 +oid sha256:72b452e9053bfcb0d0763b57e84ac33a7b73a3a99a7c0d1146abfa56a47196da +size 21044 diff --git a/assets/blender/test_level_blend/Plane.glb b/assets/blender/test_level_blend/Plane.glb index feb5df0..3ca4ed5 100644 --- a/assets/blender/test_level_blend/Plane.glb +++ b/assets/blender/test_level_blend/Plane.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fb85810910c7bb2f9c1cb4b45600c459f62f2517424d1c37e82675adb9fb4b9 -size 2452 +oid sha256:e019fc2db0fc4e92eb8198121ed71505788d2c223793e27f5dc9786a8d5c23af +size 2524 diff --git a/assets/blender/test_level_blend/Scene.scn b/assets/blender/test_level_blend/Scene.scn index a5a38b0..5a1a81e 100644 --- a/assets/blender/test_level_blend/Scene.scn +++ b/assets/blender/test_level_blend/Scene.scn @@ -15,7 +15,7 @@ :scale (1.000000 1.000000 1.000000)) (inst :model "assets/blender/testblend_blend/Gas_Station_Shop.glb" - :pos (-7.000000 0.000000 -20.000000) + :pos (-16.000000 0.000000 -18.000000) :rot (0.000000 0.000000 0.000000 1.000000) :scale (1.000000 1.000000 1.000000)) (inst diff --git a/assets/blender/testblend_blend/Bakery.glb b/assets/blender/testblend_blend/Bakery.glb index 0f86970..c1acd43 100644 --- a/assets/blender/testblend_blend/Bakery.glb +++ b/assets/blender/testblend_blend/Bakery.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c48e651b1036c2daa8d61124a17a02215eefca80388ca49f9157dba4d0efd28 +oid sha256:02a661bccfe0601a2219f0d81851f8eebf813979b986e4aed72e6de645fc409b size 188860 diff --git a/assets/blender/testblend_blend/Fire_Station.glb b/assets/blender/testblend_blend/Fire_Station.glb index 9256a9a..58797c9 100644 --- a/assets/blender/testblend_blend/Fire_Station.glb +++ b/assets/blender/testblend_blend/Fire_Station.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80a757b546c6d12da909901409823e3923d7264360d41c8d533d25732b637beb +oid sha256:21461fc107737da6a052f757d39073c8e8447a3cca4126e1d04ba07217dfa14e size 381492 diff --git a/assets/blender/testblend_blend/Gas_Station_Shop.glb b/assets/blender/testblend_blend/Gas_Station_Shop.glb index 1263804..fe8993b 100644 --- a/assets/blender/testblend_blend/Gas_Station_Shop.glb +++ b/assets/blender/testblend_blend/Gas_Station_Shop.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baf9248c3461e6ca65b9c6a4a30f2246e87c8f7e3e6465f0959ac79059c32d17 +oid sha256:91b2ff9d53556c7d33255566f89e0fc5f22fa0ac6f42e1b2327780a962510528 size 157344 diff --git a/assets/blender/testblend_blend/Green_House.glb b/assets/blender/testblend_blend/Green_House.glb index 21ad636..4da7e45 100644 --- a/assets/blender/testblend_blend/Green_House.glb +++ b/assets/blender/testblend_blend/Green_House.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:377c968d052db3e7a2cca4aa42fff0da49a9b319fff595fb0dd43104c4642030 +oid sha256:5ac0a8a9334e3364d7215a5e6f5afb954e166e19e4585a875957aa97158b702f size 82976 diff --git a/assets/blender/testblend_blend/Hotel.glb b/assets/blender/testblend_blend/Hotel.glb index c08e576..93646a6 100644 --- a/assets/blender/testblend_blend/Hotel.glb +++ b/assets/blender/testblend_blend/Hotel.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74fee36750367cbd796ccc421b8fdfd1f38c15c9d3680753f76c22239720ef93 +oid sha256:8a20e7fa749b94646ea46693b249c98b75d666503add5487d7bea8814189b480 size 4459304 diff --git a/game/assets/assets.odin b/game/assets/assets.odin index 96277e3..6a828bc 100644 --- a/game/assets/assets.odin +++ b/game/assets/assets.odin @@ -778,15 +778,15 @@ get_scene_desc :: proc( force_no_reload := false, ) -> ( scene: Scene_Desc, - reloaded: bool, + modtime: i64, ) { - asset, _, res := assetman_fetch_or_load( + asset, mtime, _ := assetman_fetch_or_load( assetman, Asset_Key{path = path, type = .Scene}, nil, force_no_reload, ) - return asset.(Scene_Desc), (res == .Loaded || res == .Reloaded) + return asset.(Scene_Desc), mtime } get_convex :: proc(assetman: ^Asset_Manager, path: cstring) -> (result: Loaded_Convex) { diff --git a/game/game.odin b/game/game.odin index 00f7f89..8ea868e 100644 --- a/game/game.odin +++ b/game/game.odin @@ -49,6 +49,7 @@ Debug_Draw_State :: struct { Scene :: struct { scene_desc_path: name.Name, + modtime: i64, level_geoms: []physics.Level_Geom_Handle, } @@ -66,12 +67,13 @@ immediate_scene :: proc(world: ^World, scene: ^Scene, path: cstring) { tracy.Zone() path_name := name.from_cstring(path) - desc, reloaded := assets.get_scene_desc(&g_mem.assetman, path_name) + desc, modtime := assets.get_scene_desc(&g_mem.assetman, path_name) - if reloaded || scene.scene_desc_path != path_name { + if scene.scene_desc_path != path_name || scene.modtime != modtime { scene_destroy(world, scene) scene.scene_desc_path = path_name + scene.modtime = modtime scene.level_geoms = make([]physics.Level_Geom_Handle, len(desc.instances)) sim_state := physics.get_sim_state(&world.physics_scene) diff --git a/game/physics/scene.odin b/game/physics/scene.odin index ee2b66c..a512193 100644 --- a/game/physics/scene.odin +++ b/game/physics/scene.odin @@ -140,6 +140,7 @@ copy_sim_state :: proc(dst: ^Sim_State, src: ^Sim_State) { dst.first_free_engine_plus_one = src.first_free_engine_plus_one dst.first_free_shape_plus_one = src.first_free_shape_plus_one + // TODO: shrink when possible resize(&dst.bodies, len(src.bodies)) resize(&dst.suspension_constraints, len(src.suspension_constraints)) resize(&dst.engines, len(src.engines)) @@ -174,10 +175,9 @@ copy_physics_scene :: proc(dst, src: ^Scene) { dst.assetman = src.assetman dst.simulation_state_index = src.simulation_state_index - src_sim_state := get_sim_state(src) - dst_sim_state := get_sim_state(dst) - copy_sim_state(dst_sim_state, src_sim_state) + copy_sim_state(&dst.simulation_states[0], &src.simulation_states[0]) + copy_sim_state(&dst.simulation_states[1], &src.simulation_states[1]) copy_solver_state(&dst.solver_state, &src.solver_state) } diff --git a/src_assets/test_level.blend b/src_assets/test_level.blend index 3e9d1ac..2cd7427 100644 --- a/src_assets/test_level.blend +++ b/src_assets/test_level.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f47253aa58117e4218484d5ad1ab088d98b1daab488a7868943d0ac85694e42f -size 1094145 +oid sha256:1b049bfe7ec9bfad7a8bf09eec6416c556cbe3d2f505b73de1aad600a1c01f90 +size 1125489 diff --git a/src_assets/test_level.blend1 b/src_assets/test_level.blend1 index 11f0ea3..ff14fdb 100644 --- a/src_assets/test_level.blend1 +++ b/src_assets/test_level.blend1 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fcbab24de0f6c4a67636527f41d6941aef02331e34edaa7f1b36a684c5424ab -size 1083697 +oid sha256:a79a489fa93a689c9b9a43c38a914b028e87e1e91c132925f35613efdd980c00 +size 1115041