# HG changeset patch # User rubidium # Date 1172329514 0 # Node ID 1c3515433409a2a42a5cd1be9d0ced977b132f76 # Parent cc9e4a024b611fe9d9b26248744923680834c77f (svn r8880) -Codechange: make anim cursors an array of structs. diff -r cc9e4a024b61 -r 1c3515433409 src/gfx.cpp --- a/src/gfx.cpp Sat Feb 24 14:53:32 2007 +0000 +++ b/src/gfx.cpp Sat Feb 24 15:05:14 2007 +0000 @@ -1987,18 +1987,14 @@ 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 @@ SetCursorSprite(sprite, pal); } -void SetAnimatedMouseCursor(const CursorID *table) +void SetAnimatedMouseCursor(const AnimCursor *table) { _cursor.animate_list = table; _cursor.animate_cur = NULL; diff -r cc9e4a024b61 -r 1c3515433409 src/gfx.h --- a/src/gfx.h Sat Feb 24 14:53:32 2007 +0000 +++ b/src/gfx.h Sat Feb 24 15:05:14 2007 +0000 @@ -99,6 +99,12 @@ 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 @@ 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 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 -r cc9e4a024b61 -r 1c3515433409 src/table/animcursors.h --- a/src/table/animcursors.h Sat Feb 24 14:53:32 2007 +0000 +++ b/src/table/animcursors.h Sat Feb 24 15:05:14 2007 +0000 @@ -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 @@ /** 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 @@ /** 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 @@ /** 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 @@ /** 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 @@ * 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,