diff options
| author | Leander Scherer <leander@schererleander.de> | 2026-03-12 01:34:36 +0100 |
|---|---|---|
| committer | Leander Scherer <leander@schererleander.de> | 2026-03-12 01:34:36 +0100 |
| commit | ae6ac413632b427e31a26020a94864669af1ba10 (patch) | |
| tree | a726873ee5ab9a6a96b9d1736e178d23d3fe96c2 /src | |
| parent | e1a8ca7396d0931bcd10d8f136502f9843e30ff3 (diff) | |
feat(marker): implement map markers
Diffstat (limited to 'src')
| -rw-r--r-- | src/map.c | 38 |
1 files changed, 32 insertions, 6 deletions
@@ -35,8 +35,8 @@ static PickupType GetPickupTypeByTileId(int tileId) { return PICKUP_COIN; } -static Rectangle GetTileBounds(TmxTileset *tileset, uint32_t tileId, float worldX, - float worldY) { +static Rectangle GetTileBounds(TmxTileset *tileset, uint32_t tileId, + float worldX, float worldY) { for (uint32_t i = 0; i < tileset->tilesLength; i++) { if (tileset->tiles[i].id == tileId) { TmxObjectGroup *og = &tileset->tiles[i].objectGroup; @@ -97,12 +97,24 @@ static void LoadKeys(TmxMap *tmxMap, TmxLayer *layer, Entities *entities) { Key *k = &entities->keys[entities->keysCount++]; k->position = (Vector2){x, y}; k->bounds = GetTileBounds(tileset, tileId, x, y); - k->uniqueId = (int)object->id; + k->uniqueId = object->name; k->active = true; k->gid = (uint32_t)object->gid; } } +static void LoadMarkers(Map *map, TmxLayer *layer) { + TmxObjectGroup *group = &layer->exact.objectGroup; + for (uint32_t i = 0; i < group->objectsLength; i++) { + TmxObject *object = &group->objects[i]; + if (object->type != OBJECT_TYPE_POINT || map->markersCount >= MAX_MARKERS) + continue; + + map->markers[map->markersCount++] = + (Marker){.position = {object->x, object->y}, .name = object->name}; + } +} + Map *LoadMap(const char *filename, Entities *entities) { Map *map = (Map *)malloc(sizeof(Map)); if (!map) @@ -128,6 +140,10 @@ Map *LoadMap(const char *filename, Entities *entities) { LoadKeys(map->map, itemsLayer, entities); } + TmxLayer *markersLayer = FindLayerByName(map->map, "Markers"); + if (markersLayer) + LoadMarkers(map, markersLayer); + return map; } @@ -147,9 +163,12 @@ void DrawMap(Map *map) { TmxLayer layers[3]; uint32_t count = 0; - if (map->groundLayer) layers[count++] = *map->groundLayer; - if (map->wallLayer) layers[count++] = *map->wallLayer; - if (map->decorLayer) layers[count++] = *map->decorLayer; + if (map->groundLayer) + layers[count++] = *map->groundLayer; + if (map->wallLayer) + layers[count++] = *map->wallLayer; + if (map->decorLayer) + layers[count++] = *map->decorLayer; DrawTMXLayers(map->map, NULL, NULL, layers, count, 0, 0, WHITE); } @@ -189,6 +208,13 @@ void DrawKeys(Entities *entities, Map *map) { } } +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]; + return NULL; +} + void UnloadMap(Map *map) { if (!map) return; |
