summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gfx.cpp16
-rw-r--r--src/gfx.h13
-rw-r--r--src/table/animcursors.h16
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;
diff --git a/src/gfx.h b/src/gfx.h
index 3c3cc7f31..16704c5c6 100644
--- a/src/gfx.h
+++ b/src/gfx.h
@@ -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,