Fix multiple point deletion

This commit is contained in:
sergeypdev 2025-01-03 23:22:51 +04:00
parent 64dbe0c5e4
commit 686d034b06

View File

@ -67,7 +67,7 @@ Editor_State :: struct {
g_mem: ^Game_Memory g_mem: ^Game_Memory
world :: proc() -> ^World { get_world :: proc() -> ^World {
return &g_mem.es.world return &g_mem.es.world
} }
@ -156,8 +156,8 @@ is_point_selected :: proc() -> bool {
add_track_spline_point :: proc() { add_track_spline_point :: proc() {
forward := camera_rotation_matrix()[2] forward := camera_rotation_matrix()[2]
append(&world().track.points, g_mem.player_pos + forward) append(&get_world().track.points, g_mem.player_pos + forward)
select_track_point(len(&world().track.points) - 1) select_track_point(len(&get_world().track.points) - 1)
} }
get_movement_axes :: proc( get_movement_axes :: proc(
@ -218,9 +218,10 @@ update_editor :: proc() {
if is_point_selected() { if is_point_selected() {
if rl.IsKeyPressed(.X) { if rl.IsKeyPressed(.X) {
for k, v in es.point_selection { #reverse for _, i in get_world().track.points {
assert(v) if i in es.point_selection {
ordered_remove(&world().track.points, k) ordered_remove(&get_world().track.points, i)
}
} }
clear(&es.point_selection) clear(&es.point_selection)
@ -294,7 +295,7 @@ update_editor :: proc() {
} }
for k in es.point_selection { 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, rl.WHITE,
) )
points := &world().track.points points := &get_world().track.points
// road: rl.Mesh // road: rl.Mesh
// defer rl.UnloadMesh(road) // defer rl.UnloadMesh(road)
@ -437,12 +438,12 @@ draw :: proc() {
if g_mem.editor { if g_mem.editor {
es := &g_mem.es es := &g_mem.es
points := &world().track.points points := &get_world().track.points
points_len := len(points) points_len := len(points)
selected_point := false selected_point := false
for i in 0 ..< points_len { 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) { if !rl.IsKeyDown(.LEFT_CONTROL) {
clear(&g_mem.es.point_selection) clear(&g_mem.es.point_selection)
} }
@ -535,7 +536,7 @@ game_init :: proc() {
@(export) @(export)
game_shutdown :: proc() { game_shutdown :: proc() {
assets.shutdown(&g_mem.assetman) assets.shutdown(&g_mem.assetman)
delete(world().track.points) delete(get_world().track.points)
delete(g_mem.es.point_selection) delete(g_mem.es.point_selection)
free(g_mem) free(g_mem)
} }