diff options
-rw-r--r-- | src/gfx.cpp | 16 | ||||
-rw-r--r-- | src/gfx.h | 13 | ||||
-rw-r--r-- | src/table/animcursors.h | 16 |
3 files changed, 24 insertions, 21 deletions
diff --git a/src/gfx.cpp b/src/gfx.cpp index cd34361a9..2ddf645a0 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1987,18 +1987,14 @@ static void SetCursorSprite(SpriteID cursor, SpriteID pal) static void SwitchAnimatedCursor(void) { - CursorVars *cv = &_cursor; - const CursorID *cur = cv->animate_cur; - CursorID sprite; + const AnimCursor *cur = _cursor.animate_cur; - // ANIM_CURSOR_END is 0xFFFF in table/animcursors.h - if (cur == NULL || *cur == 0xFFFF) cur = cv->animate_list; + if (cur == NULL || cur->sprite == AnimCursor::LAST) cur = _cursor.animate_list; - sprite = cur[0]; - cv->animate_timeout = cur[1]; - cv->animate_cur = cur + 2; + SetCursorSprite(cur->sprite, _cursor.pal); - SetCursorSprite(sprite, cv->pal); + _cursor.animate_timeout = cur->display_time; + _cursor.animate_cur = cur + 1; } void CursorTick(void) @@ -2015,7 +2011,7 @@ void SetMouseCursor(SpriteID sprite, SpriteID pal) SetCursorSprite(sprite, pal); } -void SetAnimatedMouseCursor(const CursorID *table) +void SetAnimatedMouseCursor(const AnimCursor *table) { _cursor.animate_list = table; _cursor.animate_cur = NULL; @@ -99,6 +99,12 @@ typedef struct Rect { int left,top,right,bottom; } Rect; +/** A single sprite of a list of animated cursors */ +struct AnimCursor { + static const SpriteID LAST = MAX_UVALUE(CursorID); + CursorID sprite; ///< Must be set to LAST_ANIM when it is the last sprite of the loop + byte display_time; ///< Amount of ticks this sprite will be shown +}; typedef struct CursorVars { Point pos, size, offs, delta; ///< position, size, offset from top-left, and movement @@ -107,8 +113,9 @@ typedef struct CursorVars { SpriteID pal; int wheel; ///< mouse wheel movement - const CursorID *animate_list, *animate_cur; ///< in case of animated cursor, list of frames - uint animate_timeout; ///< current frame in list of animated cursor + const AnimCursor *animate_list; ///< in case of animated cursor, list of frames + const AnimCursor *animate_cur; ///< in case of animated cursor, current frame + uint animate_timeout; ///< in case of animated cursor, number of ticks to show the current cursor bool visible; ///< cursor is visible bool dirty; ///< the rect occupied by the mouse is dirty (redraw) @@ -229,7 +236,7 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom); void SetMouseCursor(CursorID cursor); void SetMouseCursor(SpriteID sprite, SpriteID pal); -void SetAnimatedMouseCursor(const CursorID *table); +void SetAnimatedMouseCursor(const AnimCursor *table); void CursorTick(void); void DrawMouseCursor(void); void ScreenSizeChanged(void); diff --git a/src/table/animcursors.h b/src/table/animcursors.h index abd9c0a9b..2090d13dc 100644 --- a/src/table/animcursors.h +++ b/src/table/animcursors.h @@ -13,15 +13,15 @@ * @param Sprite The Sprite to be displayed * @param display_time The Number of ticks to display the sprite */ -#define ANIM_CURSOR_LINE(Sprite, display_time) Sprite, display_time, +#define ANIM_CURSOR_LINE(Sprite, display_time) { Sprite, display_time }, /** This indicates the termination of the cursor list */ -#define ANIM_CURSOR_END() 0xFFFF +#define ANIM_CURSOR_END() ANIM_CURSOR_LINE(AnimCursor::LAST, 0) /** Animated cursor elements for demolishion */ -static const CursorID _demolish_animcursor[] = { +static const AnimCursor _demolish_animcursor[] = { ANIM_CURSOR_LINE(0x2C0, 8) ANIM_CURSOR_LINE(0x2C1, 8) ANIM_CURSOR_LINE(0x2C2, 8) @@ -31,7 +31,7 @@ static const CursorID _demolish_animcursor[] = { /** Animated cursor elements for lower land */ -static const CursorID _lower_land_animcursor[] = { +static const AnimCursor _lower_land_animcursor[] = { ANIM_CURSOR_LINE(0x2BB, 10) ANIM_CURSOR_LINE(0x2BC, 10) ANIM_CURSOR_LINE(0x2BD, 29) @@ -40,7 +40,7 @@ static const CursorID _lower_land_animcursor[] = { /** Animated cursor elements for raise land */ -static const CursorID _raise_land_animcursor[] = { +static const AnimCursor _raise_land_animcursor[] = { ANIM_CURSOR_LINE(0x2B8, 10) ANIM_CURSOR_LINE(0x2B9, 10) ANIM_CURSOR_LINE(0x2BA, 29) @@ -49,7 +49,7 @@ static const CursorID _raise_land_animcursor[] = { /** Animated cursor elements for the goto icon */ -static const CursorID _order_goto_animcursor[] = { +static const AnimCursor _order_goto_animcursor[] = { ANIM_CURSOR_LINE(0x2CC, 10) ANIM_CURSOR_LINE(0x2CD, 10) ANIM_CURSOR_LINE(0x2CE, 29) @@ -58,7 +58,7 @@ static const CursorID _order_goto_animcursor[] = { /** Animated cursor elements for the build signal icon */ -static const CursorID _build_signals_animcursor[] = { +static const AnimCursor _build_signals_animcursor[] = { ANIM_CURSOR_LINE(0x50C, 20) ANIM_CURSOR_LINE(0x50D, 20) ANIM_CURSOR_END() @@ -68,7 +68,7 @@ static const CursorID _build_signals_animcursor[] = { * definitions we have above. This is the only thing that is * accessed directly from other files */ -static const CursorID * const _animcursors[] = { +static const AnimCursor * const _animcursors[] = { _demolish_animcursor, _lower_land_animcursor, _raise_land_animcursor, |