diff options
Diffstat (limited to 'src/tileset.c')
-rw-r--r-- | src/tileset.c | 69 |
1 files changed, 43 insertions, 26 deletions
diff --git a/src/tileset.c b/src/tileset.c index f63fa0a..afe0bde 100644 --- a/src/tileset.c +++ b/src/tileset.c @@ -422,32 +422,8 @@ db_tileset_new(const char *game_id, const char *file, int firstgid, return tileset; } -int -db_tileset_tilecount(struct db_tileset *tileset) -{ - return tileset->tc; -} - -int -db_tileset_columns(struct db_tileset *tileset) -{ - return tileset->cols; -} - -int -db_tileset_firstgid(struct db_tileset *tileset) -{ - return tileset->firstgid; -} - -struct db_tileset * -db_tileset_next(struct db_tileset *tileset) -{ - return tileset->next; -} - -SDL_Texture * -db_tileset_texture(struct db_tileset *tileset, SDL_Renderer *renderer) +static SDL_Texture * +_db_tileset_texture(struct db_tileset *tileset, SDL_Renderer *renderer) { if (tileset->texture == NULL) { tileset->texture = SDL_CreateTextureFromSurface(renderer, @@ -455,3 +431,44 @@ db_tileset_texture(struct db_tileset *tileset, SDL_Renderer *renderer) } return tileset->texture; } + +int +db_tile_render(struct db_tileset *tileset, SDL_Renderer *renderer, int gid, + SDL_Rect *dstrect) +{ + SDL_bool tile_found; + SDL_Rect srcrect; + + tile_found = SDL_FALSE; + for (; tileset != NULL; tileset = tileset->next) { + if (gid >= tileset->firstgid && + gid < tileset->firstgid + tileset->tc) { + gid -= tileset->firstgid; + srcrect.x = tileset->tw * (gid % tileset->cols); + srcrect.y = tileset->th * (gid / tileset->cols); + srcrect.w = tileset->tw; + srcrect.h = tileset->th; + db_dbg("Blitting %dx%d tile at (%d,%d) onto %dx%d area " + "at (%d,%d)...", + srcrect.w, srcrect.h, + srcrect.x, srcrect.y, + dstrect->w, dstrect->h, + dstrect->x, dstrect->y); + if (SDL_RenderCopy(renderer, _db_tileset_texture( + tileset, renderer), + &srcrect, dstrect) + != 0) { + db_err("Failed to copy texture (%s)", + SDL_GetError()); + return -1; + } + tile_found = SDL_TRUE; + break; + } + } + if (!tile_found) { + db_warn("Tile with gid 0x%8.8x not found", gid); + return 0; + } + return 1; +} |