diff options
Diffstat (limited to 'src/ft_draw_life_bar.c')
-rw-r--r-- | src/ft_draw_life_bar.c | 118 |
1 files changed, 82 insertions, 36 deletions
diff --git a/src/ft_draw_life_bar.c b/src/ft_draw_life_bar.c index 80ec63e..b7dc161 100644 --- a/src/ft_draw_life_bar.c +++ b/src/ft_draw_life_bar.c @@ -17,60 +17,106 @@ static void ft_draw_tnum(int8_t id, int16_t y, int16_t x, t_cub *cl) { - *(cl->img.ptr + x * 4 + (cl->img.sizeline * y)) = - (uint8_t)*(cl->tnum[id].ptr + cl->tnum[id].tex_x * 4 + 4 * - cl->tnum[id].img_w * cl->tnum[id].tex_y); - *(cl->img.ptr + x * 4 + (cl->img.sizeline * y) + 1) = - (uint8_t)*(cl->tnum[id].ptr + cl->tnum[id].tex_x * 4 + 4 * - cl->tnum[id].img_w * cl->tnum[id].tex_y + 1); - *(cl->img.ptr + x * 4 + (cl->img.sizeline * y) + 2) = - (uint8_t)*(cl->tnum[id].ptr + cl->tnum[id].tex_x * 4 + 4 * - cl->tnum[id].img_w * cl->tnum[id].tex_y + 2); -} + const int16_t scl = cl->mlist.scale; -/* static void */ -/* ft_put_image_from_number(char *num, t_cub *cl) */ -/* { */ -/* } */ + cl->img.ptr[(x + (int16_t)((cl->mlist.map_w * scl) + 10)) * 4 + + (cl->img.sizeline * (y + cl->wlist.y_size - (cl->mlist.map_h * scl) + + 40))] = + (uint8_t)cl->tnum[id].ptr[cl->tnum[id].tex_x * 4 + 4 * + cl->tnum[id].img_w * cl->tnum[id].tex_y]; + cl->img.ptr[(x + (int16_t)((cl->mlist.map_w * scl) + 10)) * 4 + + (cl->img.sizeline * (y + cl->wlist.y_size - (cl->mlist.map_h * scl) + + 40)) + 1] = + (uint8_t)cl->tnum[id].ptr[cl->tnum[id].tex_x * 4 + 4 * + cl->tnum[id].img_w * cl->tnum[id].tex_y + 1]; + cl->img.ptr[(x + (int16_t)((cl->mlist.map_w * scl) + 10)) * 4 + + (cl->img.sizeline * (y + cl->wlist.y_size - (cl->mlist.map_h * scl) + + 40)) + 2] = + (uint8_t)cl->tnum[id].ptr[cl->tnum[id].tex_x * 4 + 4 * + cl->tnum[id].img_w * cl->tnum[id].tex_y + 2]; +} static void - ft_put_percent_image(t_cub *cl) + ft_put_next_number(char n, uint16_t x_offset, t_cub *cl) { int32_t x_ratio; int32_t y_ratio; - int32_t x; - int32_t y; + int16_t x; + int16_t y; - x_ratio = (int)((cl->tnum[10].img_w << 16) / (cl->mlist.map_w * cl->mlist.scale) - 10) + 1; - y_ratio = (int)((cl->tnum[10].img_h << 16) / (cl->mlist.map_h * cl->mlist.scale) - 10) + 1; - y = cl->wlist.y_size - (cl->mlist.map_h * cl->mlist.scale) - 10; - while (y < (int32_t)(cl->wlist.y_size - (cl->mlist.map_h * cl->mlist.scale) - 10 + (8 * cl->mlist.scale))) + x_ratio = (int)(((cl->tnum[n - 48].img_w) << 16) / cl->life_num_w) + 1; + y_ratio = (int)(((cl->tnum[n - 48].img_h) << 16) / cl->life_num_h) + 1; + y = 0; + while (y < cl->life_num_h) { - cl->tnum[10].tex_y = (y * y_ratio) >> 16; - x = ((cl->mlist.map_w * cl->mlist.scale) + 20); - while (x < (int32_t)((cl->mlist.map_w * cl->mlist.scale) - + 10 + ((32 * cl->mlist.scale)))) + cl->tnum[n - 48].tex_y = ((y * y_ratio) >> 16); + x = 0; + while (x < cl->life_num_w) { - cl->tnum[10].tex_x = (x * x_ratio) >> 16; - if (cl->tnum[10].ptr[cl->tnum[10].tex_x * 4 + 4 * - cl->tnum[10].img_h * cl->tnum[10].tex_y]) - ft_draw_tnum(10, y, x, cl); + cl->tnum[n - 48].tex_x = ((x * x_ratio) >> 16); + if (cl->tnum[n - 48].ptr[cl->tnum[n - 48].tex_x * 4 + 4 * + cl->tnum[n - 48].img_h * cl->tnum[n - 48].tex_y]) + ft_draw_tnum(n - 48, y, x + x_offset, cl); x++; } y++; } } +static void + ft_put_image_from_number(char *num, t_cub *cl) +{ + const size_t len = ft_strlen(num); + const int16_t scl = cl->mlist.scale; + + if (len == 3) + { + ft_put_next_number(num[0], 0, cl); + ft_put_next_number(num[1], (1 * (24 * scl) / 4), cl); + ft_put_next_number(num[2], (2 * (24 * scl) / 4), cl); + } + else if (len == 2) + { + ft_put_next_number(num[0], (1 * (24 * scl) / 4), cl); + ft_put_next_number(num[1], (2 * (24 * scl) / 4), cl); + } + else + ft_put_next_number(num[0], (2 * (24 * scl) / 4), cl); +} + +static void + ft_get_hw(t_cub *cl) +{ + int16_t x; + int16_t y; + const int16_t scl = cl->mlist.scale; + + x = ((cl->mlist.map_w * scl) + 20) + (24 * scl) - ((24 * scl) / 4); + y = cl->wlist.y_size - (cl->mlist.map_h * scl) - 10; + while (y < (int16_t)(cl->wlist.y_size - 50)) + { + while (x < (int16_t)((cl->mlist.map_w * scl) + 10 + ((24 * scl)))) + x++; + y++; + } + y -= cl->wlist.y_size - (cl->mlist.map_h * scl) - 10; + x -= ((cl->mlist.map_w * scl) + 20) + (24 * scl) - ((24 * scl) / 4); + y = (y <= 0) ? (1) : (y); + x = (x <= 0) ? (1) : (x); + cl->life_num_h = y; + cl->life_num_w = x; +} + void ft_draw_life_bar(t_cub *cl) { - char *num; - float calc; + char num[4]; + float calc; + const int16_t scl = cl->mlist.scale; - ft_put_percent_image(cl); calc = ((float)cl->plist.life / (float)FT_STRT_LIFE) * 100.0; - if (!(num = ft_itoa((int64_t)calc))) - ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl); - /* ft_put_image_from_number(num, cl); */ - ft_memdel((void*)&num); + ft_sprintf(num, "%hd", (int16_t)calc); + ft_get_hw(cl); + ft_put_next_number(58, (3 * (24 * scl) / 4), cl); + ft_put_image_from_number(num, cl); } |