From 0adca22d9e86130dfbcbfe2fc021710a8d45a927 Mon Sep 17 00:00:00 2001 From: schererleander Date: Thu, 12 Mar 2026 02:01:02 +0100 Subject: refactor(map): return Map by value instead of heap allocation --- src/main.c | 14 ++++++++------ src/map.c | 41 +++++++++++++++++------------------------ 2 files changed, 25 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 5b45923..bc0a14d 100644 --- a/src/main.c +++ b/src/main.c @@ -14,11 +14,12 @@ int main(void) { SetTargetFPS(TARGET_FPS); Entities entities = {0}; - Map *map = LoadMap("assets/maps/debug.tmx", &entities); + Map map = LoadMap("assets/maps/debug.tmx", &entities); - Marker *spawn = FindMarker(map, "player_spawn"); + Marker *spawn = FindMarker(&map, "player_spawn"); Vector2 spawnPos = spawn ? spawn->position : (Vector2){0, 0}; + RaytmxExternalTileset playerTileset = LoadTSX("assets/tilesets/elf.tsx"); Player player = {.position = spawnPos, .speed = 80.0f, @@ -39,16 +40,16 @@ int main(void) { }; while (!WindowShouldClose()) { - UpdatePlayer(&player, map, &entities); + UpdatePlayer(&player, &map, &entities); UpdateFairy(&fairy, player.position); camera.target = player.position; BeginDrawing(); ClearBackground(BLACK); BeginMode2D(camera); - DrawMap(map); - DrawPickups(&entities, map); - DrawKeys(&entities, map); + DrawMap(&map); + DrawPickups(&entities, &map); + DrawKeys(&entities, &map); DrawPlayer(&player); DrawFairy(&fairy); EndMode2D(); @@ -56,6 +57,7 @@ int main(void) { } UnloadMap(map); + CloseWindow(); return 0; } diff --git a/src/map.c b/src/map.c index 468024f..29d8dfe 100644 --- a/src/map.c +++ b/src/map.c @@ -6,7 +6,6 @@ #include "raytmx.h" #include -#include #include static TmxLayer *FindLayerByName(TmxMap *map, const char *name) { @@ -115,34 +114,30 @@ static void LoadMarkers(Map *map, TmxLayer *layer) { } } -Map *LoadMap(const char *filename, Entities *entities) { - Map *map = (Map *)malloc(sizeof(Map)); - if (!map) - return NULL; +Map LoadMap(const char *filename, Entities *entities) { + Map map = {0}; - map->map = LoadTMX(filename); - if (!map->map) { - free(map); - return NULL; - } + map.map = LoadTMX(filename); + if (!map.map) + return map; - map->wallLayer = FindLayerByName(map->map, "Walls"); - map->groundLayer = FindLayerByName(map->map, "Ground"); - map->decorLayer = FindLayerByName(map->map, "Decor"); + map.wallLayer = FindLayerByName(map.map, "Walls"); + map.groundLayer = FindLayerByName(map.map, "Ground"); + map.decorLayer = FindLayerByName(map.map, "Decor"); if (entities) { - TmxLayer *pickupsLayer = FindLayerByName(map->map, "Pickups"); + TmxLayer *pickupsLayer = FindLayerByName(map.map, "Pickups"); if (pickupsLayer) - LoadPickups(map->map, pickupsLayer, entities); + LoadPickups(map.map, pickupsLayer, entities); - TmxLayer *itemsLayer = FindLayerByName(map->map, "Items"); + TmxLayer *itemsLayer = FindLayerByName(map.map, "Items"); if (itemsLayer) - LoadKeys(map->map, itemsLayer, entities); + LoadKeys(map.map, itemsLayer, entities); } - TmxLayer *markersLayer = FindLayerByName(map->map, "Markers"); + TmxLayer *markersLayer = FindLayerByName(map.map, "Markers"); if (markersLayer) - LoadMarkers(map, markersLayer); + LoadMarkers(&map, markersLayer); return map; } @@ -212,12 +207,10 @@ Marker *FindMarker(Map *map, const char *name) { for (int i = 0; i < map->markersCount; i++) if (strcmp(map->markers[i].name, name) == 0) return &map->markers[i]; + TraceLog(2, "Marker not found"); return NULL; } -void UnloadMap(Map *map) { - if (!map) - return; - UnloadTMX(map->map); - free(map); +void UnloadMap(Map map) { + UnloadTMX(map.map); } -- cgit v1.3.1