diff options
| -rw-r--r-- | src/main.odin | 2 | ||||
| -rw-r--r-- | src/phys/world.odin | 8 | ||||
| -rw-r--r-- | src/player.odin | 2 |
3 files changed, 7 insertions, 5 deletions
diff --git a/src/main.odin b/src/main.odin index 6b04e02..88bf953 100644 --- a/src/main.odin +++ b/src/main.odin @@ -107,7 +107,7 @@ frame :: proc() { } cleanup :: proc() { - delete_player(&state.player) + delete_player(state.player) delete_entity_list(state.platform_list) tiled.delete_map(state.room) phys.destroy_world() diff --git a/src/phys/world.odin b/src/phys/world.odin index 66479e8..0f03de7 100644 --- a/src/phys/world.odin +++ b/src/phys/world.odin @@ -72,13 +72,14 @@ add_to_bins :: proc(b: Body) { bin := find_bin(b) idx := i32(len(bin)) append(bin, b.handle) - world.bodies[bin[idx]].bin_idx = idx + world.bodies[b.handle].bin_idx = idx } @(private="file") remove_from_bins :: proc(b: Body) { bin := find_bin(b) + assert(len(bin) > 0) assert(bin[b.bin_idx] == b.handle) last := pop(bin) @@ -194,14 +195,15 @@ update_body :: proc(h: Body_Handle) { b.vel.y = 0 } - b.pos = res_pos - prev_bin := hash_bin(world_to_bin(b.pos + b.rect.start)) res_bin := hash_bin(world_to_bin(res_pos + b.rect.start)) if prev_bin != res_bin { remove_from_bins(b^) + b.pos = res_pos add_to_bins(b^) + } else { + b.pos = res_pos } } diff --git a/src/player.odin b/src/player.odin index 80672a9..65e1b87 100644 --- a/src/player.odin +++ b/src/player.odin @@ -47,7 +47,7 @@ init_player :: proc(p: ^Player) { } } -delete_player :: proc(p: ^Player) { +delete_player :: proc(p: Player) { phys.remove_body(p.body_handle) draw.destroy_sprite(p.sprite) |
