changeset 218:5cb0e0b9cd16

Make sprite cursors stay on top by fudging the sprite list. :/
author Simon Cross <hodgestar@gmail.com>
date Fri, 04 Sep 2009 22:12:47 +0000
parents 76faa0eb38f0
children 0a84d5aedc5c
files gamelib/gameboard.py gamelib/tiles.py
diffstat 2 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gameboard.py	Fri Sep 04 22:11:47 2009 +0000
+++ b/gamelib/gameboard.py	Fri Sep 04 22:12:47 2009 +0000
@@ -263,12 +263,8 @@
             pygame.mouse.set_cursor(*cursor)
         else:
             pygame.mouse.set_cursor(*cursors.cursors['arrow'])
-        if self.sprite_cursor:
-            self.tv.sprites.remove(self.sprite_cursor)
-            self.sprite_cursor = None
-        if sprite_curs:
-            self.sprite_cursor = sprite_curs
-            self.tv.sprites.append(self.sprite_cursor)
+        self.sprite_cursor = sprite_curs
+        self.tv.sprites.set_cursor(sprite_curs)
 
     def reset_states(self):
         """Clear current states (highlights, etc.)"""
--- a/gamelib/tiles.py	Fri Sep 04 22:11:47 2009 +0000
+++ b/gamelib/tiles.py	Fri Sep 04 22:12:47 2009 +0000
@@ -41,6 +41,34 @@
 TILE_MAP = TileMap()
 REVERSE_TILE_MAP = TILE_MAP._reverse_map
 
+class FarmSprites(list):
+    def __init__(self):
+        list.__init__(self)
+        self.removed = []
+        self._cursor = None
+
+    def append(self, sprite):
+        if self._cursor is not None:
+            # pop cursor
+            assert(self._cursor is self.pop())
+            list.append(self, sprite)
+            list.append(self, self._cursor)
+        else:
+            list.append(self, sprite)
+        sprite.updated = 1
+
+    def remove(self, sprite):
+        list.remove(self, sprite)
+        sprite.updated = 1
+        self.removed.append(sprite)
+
+    def set_cursor(self, cursor):
+        if self._cursor is not None:
+            self.remove(self._cursor)
+        self._cursor = cursor
+        if cursor is not None:
+            list.append(self, cursor)
+
 
 class FarmVid(tilevid.Tilevid):
     """Extension of pgu's TileVid class to handle the complications
@@ -48,6 +76,7 @@
        """
     def __init__(self):
         tilevid.Tilevid.__init__(self)
+        self.sprites = FarmSprites()
 
     def png_folder_load_tiles(self, path):
         """Load tiles from a folder of PNG files."""