(svn r8880) -Codechange: make anim cursors an array of structs.
authorrubidium
Sat, 24 Feb 2007 15:05:14 +0000
changeset 6464 1c3515433409
parent 6463 cc9e4a024b61
child 6465 dddb39b41ee0
(svn r8880) -Codechange: make anim cursors an array of structs.
src/gfx.cpp
src/gfx.h
src/table/animcursors.h
--- 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;
--- 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);
--- 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,