aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_draw_life_bar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ft_draw_life_bar.c')
-rw-r--r--src/ft_draw_life_bar.c118
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);
}