door.c (1796B)
1 #include <stdlib.h> 2 3 #include "../include/door.h" 4 #include "../include/const.h" 5 6 door_t *door_create(pos_t pos) { 7 door_t *door = malloc(sizeof(door_t)); 8 door->pos = pos; 9 door->is_locked = true; 10 door->countdown = 0; 11 return door; 12 } 13 14 void door_update(door_t *door, game_t *game) { 15 (void) game; 16 if (door->countdown > 0) { 17 door->countdown--; 18 } 19 } 20 21 void door_draw(door_t *door, game_t *game) { 22 if (door->is_locked) { 23 DrawTextureRec(game->assets.tiles, texture_rect(1, 2, TILE_WIDTH, TILE_HEIGHT), (pos_t) { door->pos.x, door->pos.y - TILE_HEIGHT }, WHITE); 24 DrawTextureRec(game->assets.tiles, texture_rect(1, 3, TILE_WIDTH, TILE_HEIGHT), door->pos, WHITE); 25 if (door->countdown > 0) { 26 pos_t lock_pos = { 27 .x = door->pos.x, 28 .y = door->pos.y - 2 * TILE_HEIGHT, 29 }; 30 DrawTextureRec(game->assets.tiles, texture_rect(3, 1, TILE_WIDTH, TILE_HEIGHT), lock_pos, WHITE); 31 } 32 } 33 else { 34 DrawTextureRec(game->assets.tiles, texture_rect(2, 2, TILE_WIDTH, TILE_HEIGHT), (pos_t) { door->pos.x, door->pos.y - TILE_HEIGHT }, WHITE); 35 DrawTextureRec(game->assets.tiles, texture_rect(2, 3, TILE_WIDTH, TILE_HEIGHT), door->pos, WHITE); 36 } 37 } 38 39 void door_free(door_t *door) { 40 free(door); 41 } 42 43 bool door_unlock(door_t *door, game_t *game) { 44 if (!door->is_locked) { 45 return true; 46 } 47 int enemies_len = 0; 48 bool gates_frozen = true; 49 for (int i = 0; i < game->entities_len; i++) { 50 if(game->entities[i].type == ENTITY_ENEMY) { 51 enemies_len++; 52 } 53 if(game->entities[i].type == ENTITY_GATE) { 54 if (!game->entities[i].gate->frozen) { 55 gates_frozen = false; 56 } 57 } 58 } 59 if (enemies_len == 0 && gates_frozen) { 60 door->is_locked = false; 61 return true; 62 } 63 door->countdown = DOOR_COUNTDOWN; 64 return false; 65 }