annotate gamelib/gui.py @ 212:16ce5ed563c9

Change science buttons
author Neil Muller <drnlmuller@gmail.com>
date Sat, 12 May 2012 20:17:28 +0200
parents 0090ecf08544
children 2d72e84a765b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
1 import pygame
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
2
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
3 from gamelib import data
143
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
4 from gamelib.gui_base import Drawable, TextButton, font_auto, ToggleButton
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
5
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
6
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
7 class ImageDrawable(Drawable):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
8
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
9 def __init__(self, rect, image):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
10 super(ImageDrawable, self).__init__(rect)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
11 self.image = image
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
12
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
13 def draw(self, surface):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
14 surface.blit(self.image, (self.rect[0], self.rect[1]))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
15
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
16
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
17 class BigButton(TextButton):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
18 WIDTH = 128
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
19 HEIGHT = 64
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
20 BG_IMAGE_NORMAL = data.load_image('images/button_normal.png')
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
21 BG_IMAGE_DOWN = data.load_image('images/button_down.png')
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
22
110
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
23 def __init__(self, pos, text, font=font_auto, shadow=True):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
24 rect1 = (0, 0, self.WIDTH, self.HEIGHT)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
25 n = ImageDrawable(rect1, self.BG_IMAGE_NORMAL)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
26 d = ImageDrawable(rect1, self.BG_IMAGE_DOWN)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
27 rect2 = (pos[0], pos[1], self.WIDTH, self.HEIGHT)
62
38f41d046c6f Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents: 39
diff changeset
28 super(BigButton, self).__init__(rect2, n, d, text, font, shadow)
140
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
29
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
30
143
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
31 class IconButton(ToggleButton):
140
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
32 WIDTH = 64
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
33 HEIGHT = 64
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
34 BG_IMAGE_NORMAL = data.load_image('images/research_normal.png')
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
35 BG_IMAGE_DOWN = data.load_image('images/research_down.png')
142
3e02a8ccd72b pep8 and pyflakes
Rizmari Versfeld <rizziepit@gmail.com>
parents: 140
diff changeset
36
140
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
37 def __init__(self, pos, name):
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
38 rect = (pos[0], pos[1], self.WIDTH, self.HEIGHT)
150
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
39 try:
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
40 n_icon = data.load_image('images/icons/%s_normal.png' % name)
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
41 d_icon = data.load_image('images/icons/%s_down.png' % name)
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
42 except:
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
43 n_icon = pygame.Surface((64, 64), pygame.SRCALPHA)
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
44 d_icon = pygame.Surface((64, 64), pygame.SRCALPHA)
140
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
45 n = ImageDrawable(rect, self.BG_IMAGE_NORMAL.copy())
142
3e02a8ccd72b pep8 and pyflakes
Rizmari Versfeld <rizziepit@gmail.com>
parents: 140
diff changeset
46 n.image.blit(n_icon, (0, 0))
140
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
47 d = ImageDrawable(rect, self.BG_IMAGE_DOWN.copy())
142
3e02a8ccd72b pep8 and pyflakes
Rizmari Versfeld <rizziepit@gmail.com>
parents: 140
diff changeset
48 d.image.blit(d_icon, (0, 0))
140
abbceec3cc8b added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents: 110
diff changeset
49 rect2 = (pos[0], pos[1], self.WIDTH, self.HEIGHT)
142
3e02a8ccd72b pep8 and pyflakes
Rizmari Versfeld <rizziepit@gmail.com>
parents: 140
diff changeset
50 super(IconButton, self).__init__(rect2, n, d)
143
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
51
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
52
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
53 class IconTextButton(TextButton):
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
54 WIDTH = 270
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
55 HEIGHT = 80
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
56
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
57 TEXT_OFFSET = (0, 60)
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
58
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
59 def __init__(self, pos, name, text, font=font_auto, shadow=True):
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
60 rect = (pos[0], pos[1], self.WIDTH, self.HEIGHT)
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
61 n = self._mk_image(name, 'normal')
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
62 d = self._mk_image(name, 'down')
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
63 text_rect = (self.TEXT_OFFSET,
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
64 (self.WIDTH - self.TEXT_OFFSET[0],
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
65 self.HEIGHT - self.TEXT_OFFSET[1]))
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
66 super(IconTextButton, self).__init__(
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
67 rect, n, d, text, font, shadow, text_rect,
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
68 (255, 255, 255), (128, 128, 128))
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
69
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
70 def _mk_image(self, name, suffix):
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
71 bg = data.load_image('images/research_%s.png' % (suffix,))
150
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
72 try:
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
73 icon = data.load_image('images/icons/%s_%s.png' % (name, suffix))
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
74 except pygame.error:
0090ecf08544 Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
75 icon = pygame.Surface((64, 64), pygame.SRCALPHA)
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
76 base = pygame.Surface((self.WIDTH, self.HEIGHT), pygame.SRCALPHA)
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
77 base.blit(bg, (self.WIDTH / 2 - 32, 0))
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
78 drawable = ImageDrawable((0, 0, self.WIDTH, self.HEIGHT), base)
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
79 # Centre icon
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 150
diff changeset
80 drawable.image.blit(icon, (self.WIDTH / 2 - 32, 0))
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
81 return drawable
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
82
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
83
143
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
84 class RadioButton(IconButton):
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
85 SELECTED_BUTTON = None
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
86
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
87 def on_click(self):
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
88 print(RadioButton.CHECK)
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
89 super(RadioButton, self).on_click()
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
90 if self.toggled:
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
91 if RadioButton.SELECTED_BUTTON:
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
92 RadioButton.SELECTED_BUTTON.on_click()
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
93 RadioButton.SELECTED_BUTTON = self
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
94 print("I am selected")
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
95 else:
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
96 RadioButton.SELECTED_BUTTON = None
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 142
diff changeset
97 print("I am deselected")