/* crea un bitmap con la pieza actual */ BITMAP *create_piece_bitmap(PLAYER *player, int *xout, int *yout) { BITMAP *bmp; int c, x, y, w, h; get_piece_blocks(player); get_piece_metrics(player, &x, &y, &w, &h); /* crear el bitmap */ bmp = create_bitmap(w, h); if (!bmp) return NULL; /* limpiar el bitmap con el color máscara actual */ clear_to_color(bmp, bitmap_mask_color(bmp)); /* dibujar cada bloque de la pieza en el bitmap */ for (c=0; c<4; c++) draw_block(bmp, player->piece.bx[c]-x, player->piece.by[c]-y, player->piece.block[c], FALSE); /* posiciones absolutas de la pieza; si se usa draw_sprite() con estas posiciones, el bitmap se dibujará en el mismo sitio donde está la pieza actual */ if (xout) *xout = player->px+x; if (yout) *yout = player->py+y; return bmp; }
static void create_piece(t_list **head, char *buf, char letter) { t_list *node; t_tetri t; gen_piece(&t); get_piece_metrics(buf, &t); t.letter = letter; t.height = t.ymax - t.ymin + 1; t.width = t.xmax - t.xmin + 1; buf_to_struct(buf, &t); if (!(node = ft_lstnew(&t, sizeof(t_tetri)))) return ; ft_lstadd(head, node); }