aboutsummaryrefslogtreecommitdiff
path: root/src/main.odin
diff options
context:
space:
mode:
authorXander Swan <no email>2025-12-23 20:58:32 -0500
committerXander Swan <no email>2025-12-23 20:58:32 -0500
commit2838358993ade2ac1b770d675af9126749074e8f (patch)
treeb423ac832dd86cec1863c725fd2957eddd83c28f /src/main.odin
parentce4d64bd41937d7dff18ca607122188dc338d696 (diff)
Fix lotsa memory leaks mhm
Diffstat (limited to 'src/main.odin')
-rw-r--r--src/main.odin57
1 files changed, 45 insertions, 12 deletions
diff --git a/src/main.odin b/src/main.odin
index 9a6c09a..6b04e02 100644
--- a/src/main.odin
+++ b/src/main.odin
@@ -8,11 +8,13 @@ import "base:runtime"
import "core:log"
import "core:fmt"
+import "core:mem"
import rl "vendor:raylib"
import "draw"
import "phys"
+import "tiled"
Vec2 :: [2]f32
@@ -24,6 +26,8 @@ Rect :: struct {
state: struct {
player: Player,
platform_list: Entity_List(Platform),
+
+ room: tiled.Map,
}
init :: proc() {
@@ -33,6 +37,12 @@ init :: proc() {
init_player(&state.player)
+ room, err := tiled.load_map("res/room_begin.tmj")
+ if err != .NONE {
+ log.errorf("Error loading map (%v)", err)
+ }
+ state.room = room
+
make_platform(Rect{
start = {50, 50},
size = {64, 20}
@@ -41,7 +51,7 @@ init :: proc() {
i := f32(20)
for i < draw.SCREEN_WIDTH - 20 - 64 {
make_platform(Rect{
- start = {i, 340},
+ start = {i, draw.SCREEN_HEIGHT - 20},
size = {64, 20}
})
i += 65
@@ -52,14 +62,6 @@ init :: proc() {
size = {20, 20}
})
make_platform(Rect{
- start = {240, 280},
- size = {40, 20}
- })
- make_platform(Rect{
- start = {260, 260},
- size = {20, 20}
- })
- make_platform(Rect{
start = {300, 220},
size = {40, 20}
})
@@ -90,23 +92,54 @@ frame :: proc() {
draw.new_frame()
+ draw_platforms()
+ draw_player(state.player)
+
+ tiled.draw_map(state.room)
+
fps_text := fmt.caprintf(
"FPS: %v", rl.GetFPS(),
allocator = context.temp_allocator,
)
rl.DrawText(fps_text, 5, 5, 8, rl.GREEN)
- draw_platforms()
- draw_player(state.player)
-
draw.end_frame()
}
cleanup :: proc() {
+ delete_player(&state.player)
delete_entity_list(state.platform_list)
+ tiled.delete_map(state.room)
+ phys.destroy_world()
}
main :: proc() {
+ when ODIN_DEBUG {
+ track: mem.Tracking_Allocator
+ mem.tracking_allocator_init(&track, context.allocator)
+ context.allocator = mem.tracking_allocator(&track)
+
+ defer {
+ if len(track.allocation_map) > 0 {
+ fmt.eprintf("=== %v allocations not freed: ===\n", len(track.allocation_map))
+ total := 0
+ for _, entry in track.allocation_map {
+ fmt.eprintf(
+ "- %v bytes @ %v (%v, mode %v)\n",
+ entry.size,
+ entry.location,
+ entry.err,
+ entry.mode,
+ )
+ total += entry.size
+ }
+
+ fmt.eprintf("=== a total of %v bytes unfreed ===\n", total)
+ }
+ mem.tracking_allocator_destroy(&track)
+ }
+ }
+
logger := log.create_console_logger()
context.logger = logger
defer log.destroy_console_logger(logger)