annotate gamelib/sprite_cursor.py @ 573:ffdaac5d6cf8

Select is the default tool.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 28 Nov 2009 20:29:33 +0000
parents 9cc7bc5cd10c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """In-game sprite cursors for the gameboard.
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
3 Currently mostly used when placing buildings.
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
4 """
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
5
232
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
6 import pygame
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
7 from pygame.locals import SRCALPHA
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
8
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9 import imagecache
232
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
10 import constants
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
11 from pgu.vid import Sprite
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
12
232
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
13 # ignore os.popen3 warning generated by pygame.font.SysFont
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
14 import warnings
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
15 warnings.filterwarnings("ignore", "os.popen3 is deprecated.")
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
16
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
17 class SpriteCursor(Sprite):
267
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
18 """A Sprite used as an on-board cursor.
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
19 """
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
20
232
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
21 def __init__(self, image_name, tv, cost=None):
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
22 self._font = pygame.font.SysFont('Vera', 20, bold=True)
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
23 image = imagecache.load_image(image_name, ["sprite_cursor"])
232
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
24
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
25 if cost is not None:
267
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
26 image = self._apply_text(image, str(cost))
232
0bd214cf9018 Overlay cost on building sprite cursors.
Simon Cross <hodgestar@gmail.com>
parents: 186
diff changeset
27
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
28 # Create the sprite somewhere far off screen
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
29 Sprite.__init__(self, image, (-1000, -1000))
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
30 self._tv = tv
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
31
267
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
32 def _apply_text(self, image, stext):
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
33 """Apply the text to the image."""
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
34 image = image.copy()
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
35 text = self._font.render(stext, True, constants.FG_COLOR)
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
36 w, h = image.get_size()
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
37 x, y = text.get_size()
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
38 image.blit(text, (w - x, h - y))
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
39 return image
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
40
186
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
41 def set_pos(self, tile_pos):
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
42 """Set the cursor position on the gameboard."""
f06010d34cd3 Add sprite cursors for building placement.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
43 self.rect.x, self.rect.y = self._tv.tile_to_view(tile_pos)
267
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
44
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
45 class SmallSpriteCursor(SpriteCursor):
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
46 """A sprite cursor for use with images too small for the associated text."""
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
47
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
48 def _apply_text(self, image, stext):
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
49 text = self._font.render(stext, True, constants.FG_COLOR)
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
50 w, h = image.get_size()
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
51 x, y = text.get_size()
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
52
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
53 new_w, new_h = w + x, max(h, y)
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
54
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
55 new_image = pygame.Surface((new_w, new_h), SRCALPHA)
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
56 new_image.blit(image, (0, 0))
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
57 new_image.blit(text, (w, new_h - y))
9cc7bc5cd10c Refactor sprite cursor a bit to make sub-classing easier. Add (unused) SmallSpriteCursor sub-class. Remove unnecessary pygame.font import.
Simon Cross <hodgestar@gmail.com>
parents: 232
diff changeset
58 return new_image