1 #include <shadowdive/shadowdive.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "resources/sprite.h"
5 
sprite_create_custom(sprite * sp,vec2i pos,surface * data)6 void sprite_create_custom(sprite *sp, vec2i pos, surface *data) {
7     sp->id = -1;
8     sp->pos = pos;
9     sp->data = data;
10 }
11 
sprite_create(sprite * sp,void * src,int id)12 void sprite_create(sprite *sp, void *src, int id) {
13     sd_sprite *sdsprite = (sd_sprite*)src;
14     sp->id = id;
15     sp->pos = vec2i_create(sdsprite->pos_x, sdsprite->pos_y);
16     sp->data = malloc(sizeof(surface));
17 
18     // Load data
19     sd_vga_image raw;
20     sd_sprite_vga_decode(&raw, sdsprite);
21     surface_create_from_data(sp->data, SURFACE_TYPE_PALETTE, raw.w, raw.h, raw.data);
22     memcpy(sp->data->stencil, raw.stencil, raw.w * raw.h);
23     sd_vga_image_free(&raw);
24 }
25 
sprite_free(sprite * sp)26 void sprite_free(sprite *sp) {
27     surface_free(sp->data);
28     free(sp->data);
29     sp->data = NULL;
30 }
31 
sprite_get_size(sprite * sp)32 vec2i sprite_get_size(sprite *sp) {
33     if(sp->data != NULL) {
34         return vec2i_create(sp->data->w, sp->data->h);
35     }
36     return vec2i_create(0,0);
37 }
38 
sprite_copy(sprite * src)39 sprite* sprite_copy(sprite *src) {
40     if(src == NULL) return NULL;
41 
42     sprite *new = malloc(sizeof(sprite));
43     new->pos = src->pos;
44     new->id = src->id;
45 
46     // Copy surface
47     new->data = malloc(sizeof(surface));
48     surface_copy(new->data, src->data);
49     return new;
50 }
51