1.1 --- a/include/image.h Tue Nov 13 12:57:52 2018 +0100
1.2 +++ b/include/image.h Tue Nov 13 14:35:22 2018 +0100
1.3 @@ -61,10 +61,6 @@
1.4
1.5 int stored;
1.6
1.7 - /* Stored region positions. */
1.8 -
1.9 - position_t *pos;
1.10 -
1.11 } stored_regions_t;
1.12
1.13
1.14 @@ -81,6 +77,10 @@
1.15
1.16 stored_regions_t *regions;
1.17
1.18 + /* Sprite frame positions. */
1.19 +
1.20 + position_t *pos;
1.21 +
1.22 /* The vertical scaling factor translating display rows to image
1.23 coordinates. */
1.24
1.25 @@ -101,16 +101,14 @@
1.26
1.27 #define Stored_Regions(NAME, FRAMES, SIZE) \
1.28 uint8_t __##NAME##_image[(FRAMES) * (SIZE)]; \
1.29 - position_t __##NAME##_pos[FRAMES]; \
1.30 stored_regions_t NAME = { \
1.31 .image=__##NAME##_image, \
1.32 .size=SIZE, \
1.33 - .stored=0, \
1.34 - .pos=__##NAME##_pos};
1.35 + .stored=0};
1.36
1.37 /* Access functions. */
1.38
1.39 -position_t *image_get_stored_position(stored_regions_t *r, int frame);
1.40 +position_t *image_get_stored_position(sprite_t *s, int frame);
1.41
1.42 uint8_t *image_get_stored_region(stored_regions_t *r, int frame);
1.43
1.44 @@ -119,30 +117,34 @@
1.45 /* Initialise a sprite object using an existing image without the capability of
1.46 storing regions of the screen.
1.47
1.48 - SpriteOverwriting(<name>, image_t *image, display_config_t *cfg, int yscale)
1.49 + SpriteOverwriting(<name>, image_t *image, display_config_t *cfg, int frames, int yscale)
1.50 */
1.51
1.52 -#define SpriteOverwriting(NAME, IMAGE, CFG, YSCALE) \
1.53 +#define SpriteOverwriting(NAME, IMAGE, CFG, FRAMES, YSCALE) \
1.54 + position_t __##NAME##_pos[FRAMES]; \
1.55 sprite_t NAME = { \
1.56 .image=IMAGE, \
1.57 .regions=0, \
1.58 .yscale=YSCALE, \
1.59 - .cfg=CFG};
1.60 + .cfg=CFG, \
1.61 + .pos=__##NAME##_pos};
1.62
1.63 /* Initialise a sprite object using an existing image, creating stored regions
1.64 for the animation of the sprite.
1.65
1.66 - Sprite(<name>, image_t *image, display_config_t *cfg, int yscale)
1.67 + Sprite(<name>, image_t *image, display_config_t *cfg, int frames, int yscale)
1.68 */
1.69
1.70 -#define Sprite(NAME, IMAGE, CFG, YSCALE) \
1.71 - Stored_Regions(__##NAME##_regions, (CFG)->frames, \
1.72 +#define Sprite(NAME, IMAGE, CFG, FRAMES, YSCALE) \
1.73 + Stored_Regions(__##NAME##_regions, FRAMES, \
1.74 (IMAGE)->width * (IMAGE)->height * (YSCALE)); \
1.75 + position_t __##NAME##_pos[FRAMES]; \
1.76 sprite_t NAME = { \
1.77 .image=IMAGE, \
1.78 .regions=&(__##NAME##_regions), \
1.79 .yscale=YSCALE, \
1.80 - .cfg=CFG};
1.81 + .cfg=CFG, \
1.82 + .pos=__##NAME##_pos};
1.83
1.84 /* Sprite plotting operations. */
1.85