tile.c (2705B)
1 #include <stdlib.h> 2 3 #include "entity.h" 4 #include "tile.h" 5 #include "const.h" 6 #include "util.h" 7 8 /* ########################################################################## */ 9 /* # Tile # */ 10 /* ########################################################################## */ 11 12 tile_t *tile_create(pos_t pos, tile_e type) { 13 tile_t *tile = malloc(sizeof(tile_t)); 14 tile->pos = pos; 15 tile->type = type; 16 return tile; 17 } 18 19 void tile_update(tile_t *tile, game_t *game) { 20 UNUSED(tile); 21 UNUSED(game); 22 } 23 24 void tile_draw(tile_t *tile, game_t *game) { 25 switch (tile->type) { 26 case TILE_AIR: { 27 break; 28 } 29 case TILE_STONE: { 30 DrawTextureRec(game->assets.tiles, texture_rect(0, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 31 break; 32 } 33 case TILE_STONE_JOINT: { 34 DrawTextureRec(game->assets.tiles, texture_rect(1, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 35 break; 36 } 37 case TILE_STONE_WALL: { 38 DrawTextureRec(game->assets.tiles, texture_rect(2, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 39 break; 40 } 41 case TILE_GRASS: { 42 DrawTextureRec(game->assets.tiles, texture_rect(3, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 43 break; 44 } 45 case TILE_WOOD_PLATFORM: { 46 DrawTextureRec(game->assets.tiles, texture_rect(4, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 47 break; 48 } 49 case TILE_SNOW: { 50 DrawTextureRec(game->assets.tiles, texture_rect(5, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 51 break; 52 } 53 case TILE_SAND: { 54 DrawTextureRec(game->assets.tiles, texture_rect(6, 0, TILE_WIDTH, TILE_HEIGHT), tile->pos, WHITE); 55 break; 56 } 57 } 58 } 59 60 tile_t *tile_get(game_t *game, int x, int y) { 61 for (int i = 0; i < game->tiles_len; i++) { 62 tile_t *tile = game->tiles[i]; 63 if (x >= tile->pos.x && x <= tile->pos.x + TILE_WIDTH) { 64 if (y >= tile->pos.y && y <= tile->pos.y + TILE_HEIGHT) { 65 return tile; 66 } 67 } 68 } 69 return NULL; 70 } 71 72 bool tile_ground(tile_t *tile) { 73 switch (tile->type) { 74 case TILE_STONE: 75 case TILE_GRASS: 76 case TILE_WOOD_PLATFORM: 77 case TILE_STONE_JOINT: 78 case TILE_SNOW: 79 case TILE_SAND: 80 return true; 81 default: 82 return false; 83 } 84 } 85 86 bool tile_solid(tile_t *tile) { 87 switch (tile->type) { 88 case TILE_STONE: 89 case TILE_GRASS: 90 case TILE_STONE_JOINT: 91 case TILE_SNOW: 92 case TILE_SAND: 93 return true; 94 default: 95 return false; 96 } 97 } 98 99 bool tile_wall(tile_t *tile) { 100 switch (tile->type) { 101 case TILE_STONE_WALL: 102 return true; 103 default: 104 return false; 105 } 106 } 107 108 void tile_free(tile_t *tile) { 109 free(tile); 110 }