void sprite_get_offset_wh_by_frame(int animation, int frame, DArray* meta_info, int *x_offset, int *y_offset, int* width, int* height) { *x_offset = 0; *y_offset = 0; int i = 0; int len = darray_length(meta_info); int row_offset = 0; int offset = 3; int num = 0; int index = 0; //printf("x offset: %i\n", *x_offset); for(i=0; i<len; i++) { //printf("%i == %i\n", i, row_offset); if(i == row_offset) { index = meta_info->items[row_offset]; num = meta_info->items[row_offset + 1]; *height = meta_info->items[row_offset+2]; *y_offset = *y_offset + *height; //printf("index %i num %i\n", index, num); if(index == animation) { //printf("find width and length\n"); //find width and length int x = 0; for(x=offset; x<num+offset; x++) { //get x offset *x_offset = *x_offset + meta_info->items[row_offset+x]; //printf("x_off: %i\n", *x_offset); //printf("x:%i == frame:%i\n", x, frame+offset); if(x == frame+offset) { //printf("row_offset+x: %i\n", row_offset+x); *width = meta_info->items[row_offset+x]; *x_offset = *x_offset - *width; break; } } *y_offset = *y_offset - *height; break; } row_offset = row_offset + num + offset; } } }
int sprite_get_frames(int animation, DArray *meta_info) { //get # frames int frames = 0; int i = 0; int len = darray_length(meta_info); int row_offset = 0; int num = 0; int index = 0; int offset = 3; for(i=0; i<len; i++) { if(i == row_offset) { index = meta_info->items[row_offset]; num = meta_info->items[row_offset + 1]; row_offset = row_offset + num + offset; if(index == animation) { frames = num; break; } } } return frames; }
static size_t linear_container_darray_length(LinearContainer* thiz) { PrivInfo* priv = (PrivInfo*)thiz->priv; return darray_length(priv->darray); }