From 686d034b0622e2f471931b4ac8716a76ea54a4aa Mon Sep 17 00:00:00 2001 From: sergeypdev Date: Fri, 3 Jan 2025 23:22:51 +0400 Subject: [PATCH] Fix multiple point deletion --- game/game.odin | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/game/game.odin b/game/game.odin index 2547cd0..0c0b9a7 100644 --- a/game/game.odin +++ b/game/game.odin @@ -67,7 +67,7 @@ Editor_State :: struct { g_mem: ^Game_Memory -world :: proc() -> ^World { +get_world :: proc() -> ^World { return &g_mem.es.world } @@ -156,8 +156,8 @@ is_point_selected :: proc() -> bool { add_track_spline_point :: proc() { forward := camera_rotation_matrix()[2] - append(&world().track.points, g_mem.player_pos + forward) - select_track_point(len(&world().track.points) - 1) + append(&get_world().track.points, g_mem.player_pos + forward) + select_track_point(len(&get_world().track.points) - 1) } get_movement_axes :: proc( @@ -218,9 +218,10 @@ update_editor :: proc() { if is_point_selected() { if rl.IsKeyPressed(.X) { - for k, v in es.point_selection { - assert(v) - ordered_remove(&world().track.points, k) + #reverse for _, i in get_world().track.points { + if i in es.point_selection { + ordered_remove(&get_world().track.points, i) + } } clear(&es.point_selection) @@ -294,7 +295,7 @@ update_editor :: proc() { } for k in es.point_selection { - world().track.points[k] += movement_world + get_world().track.points[k] += movement_world } } } @@ -366,7 +367,7 @@ draw :: proc() { rl.WHITE, ) - points := &world().track.points + points := &get_world().track.points // road: rl.Mesh // defer rl.UnloadMesh(road) @@ -437,12 +438,12 @@ draw :: proc() { if g_mem.editor { es := &g_mem.es - points := &world().track.points + points := &get_world().track.points points_len := len(points) selected_point := false for i in 0 ..< points_len { - if spline_handle(world().track.points[i], camera, es.point_selection[i]) { + if spline_handle(get_world().track.points[i], camera, es.point_selection[i]) { if !rl.IsKeyDown(.LEFT_CONTROL) { clear(&g_mem.es.point_selection) } @@ -535,7 +536,7 @@ game_init :: proc() { @(export) game_shutdown :: proc() { assets.shutdown(&g_mem.assetman) - delete(world().track.points) + delete(get_world().track.points) delete(g_mem.es.point_selection) free(g_mem) }