Mercurial > boomslang
annotate gamelib/gamescreen.py @ 76:1a5fdc225939
Add description rendering to scene rendering.
author | Simon Cross <hodgestar+bzr@gmail.com> |
---|---|
date | Mon, 23 Aug 2010 22:11:41 +0200 |
parents | 75e1040a1121 |
children | 6bfebfbce42e |
rev | line source |
---|---|
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
40
diff
changeset
|
1 # gamescreen.py |
24
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
2 # Copyright Boomslang team, 2010 (see COPYING File) |
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
3 # Main menu for the game |
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
4 |
29
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
5 from albow.controls import Button, Label, Widget |
24
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
6 from albow.layout import Column |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
7 from albow.palette_view import PaletteView |
74
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
8 from albow.dialogs import Dialog |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
9 from pygame import Rect |
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
10 from pygame.color import Color |
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
11 from pygame.locals import BLEND_ADD |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
12 |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
13 from constants import BUTTON_SIZE |
70 | 14 from cursor import CursorSpriteScreen, CursorWidget |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
15 from hand import HandButton |
70 | 16 from popupmenu import PopupMenu, PopupMenuButton |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
17 from state import initial_state, Item |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
18 |
70 | 19 class InventoryView(PaletteView, CursorWidget): |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
20 |
40
9fdbfbc02a60
Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents:
36
diff
changeset
|
21 sel_color = Color("yellow") |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
22 sel_width = 2 |
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
23 |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
24 def __init__(self, state, handbutton): |
53 | 25 PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6, scrolling=True) |
34
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
29
diff
changeset
|
26 self.state = state |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
27 self.handbutton = handbutton |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
28 |
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
29 def num_items(self): |
34
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
29
diff
changeset
|
30 return len(self.state.inventory) |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
31 |
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
32 def draw_item(self, surface, item_no, rect): |
40
9fdbfbc02a60
Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents:
36
diff
changeset
|
33 item_image = self.state.inventory[item_no].get_inventory_image() |
9fdbfbc02a60
Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents:
36
diff
changeset
|
34 surface.blit(item_image, rect, None, BLEND_ADD) |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
35 |
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
36 def click_item(self, item_no, event): |
73 | 37 self.state.set_tool(self.state.inventory[item_no]) |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
38 self.handbutton.unselect() |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
39 |
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
40 def item_is_selected(self, item_no): |
73 | 41 return self.state.tool is self.state.inventory[item_no] |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
42 |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
43 def unselect(self): |
73 | 44 self.state.set_tool(None) |
24
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
45 |
40
9fdbfbc02a60
Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents:
36
diff
changeset
|
46 |
70 | 47 class StateWidget(CursorWidget): |
29
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
48 |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
49 def __init__(self, state): |
53 | 50 Widget.__init__(self, Rect(0, 0, 800, 600 - BUTTON_SIZE)) |
29
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
51 self.state = state |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
52 |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
53 def draw(self, surface): |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
54 self.state.draw(surface) |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
55 |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
70
diff
changeset
|
56 def mouse_down(self, event): |
73 | 57 self.state.interact(event.pos) |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
70
diff
changeset
|
58 |
63
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
58
diff
changeset
|
59 def mouse_move(self, event): |
73 | 60 self.state.mouse_move(event.pos) |
70 | 61 CursorWidget.mouse_move(self, event) |
29
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
62 |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
63 |
74
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
64 class DetailWindow(CursorWidget): |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
65 def mouse_down(self, e): |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
66 if e not in self: |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
67 self.dismiss() |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
68 |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
69 def draw(self, surface): |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
70 surface.fill(Color('green')) |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
71 |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
72 |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
73 class GameScreen(CursorSpriteScreen): |
24
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
74 def __init__(self, shell): |
66
05346a412b55
A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
65
diff
changeset
|
75 CursorSpriteScreen.__init__(self, shell) |
29
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
76 |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
77 # TODO: Randomly plonk the state here for now |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
78 self.state = initial_state() |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
79 self.state_widget = StateWidget(self.state) |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
80 self.add(self.state_widget) |
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
81 |
58 | 82 self.popup_menu = PopupMenu(shell) |
70 | 83 self.menubutton = PopupMenuButton('Menu', |
84 action=self.popup_menu.show_menu) | |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
85 self.menubutton.bottomleft = self.bottomleft |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
86 self.add(self.menubutton) |
74
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
87 |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
88 self.detail = DetailWindow() |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
89 self.detail.rect = Rect(0, 0, 200, 200) |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
90 |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
91 self.testbutton = Button('Test', action=self.detail.present) |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
92 self.testbutton.bottomright = self.bottomright |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
93 self.add(self.testbutton) |
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
94 |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
95 self.handbutton = HandButton(action=self.hand_pressed) |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
96 self.handbutton.bottomleft = self.bottomleft |
53 | 97 self.handbutton.get_rect().move_ip(BUTTON_SIZE, 0) |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
98 self.add(self.handbutton) |
74
75e1040a1121
Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents:
73
diff
changeset
|
99 |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
100 self.inventory = InventoryView(self.state, self.handbutton) |
27
5c7bbbdf9296
Move inventory palette to the bottom left
Neil Muller <neil@dip.sun.ac.za>
parents:
26
diff
changeset
|
101 self.inventory.bottomleft = self.bottomleft |
53 | 102 self.inventory.get_rect().move_ip(2 * BUTTON_SIZE, 0) |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
103 self.add(self.inventory) |
24
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
104 |
34
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
29
diff
changeset
|
105 # Test items |
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
29
diff
changeset
|
106 self.state.add_inventory_item('triangle') |
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
29
diff
changeset
|
107 |
63
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
58
diff
changeset
|
108 |
58 | 109 # Albow uses magic method names (command + '_cmd'). Yay. |
110 # Albow's search order means they need to be defined here, not in | |
111 # PopMenu, which is annoying. | |
112 def hide_cmd(self): | |
113 # This option does nothing, but the method needs to exist for albow | |
114 return | |
115 | |
116 def main_menu_cmd(self): | |
24
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
117 self.shell.show_screen(self.shell.menu_screen) |
9d5de13e2ac3
Add a game screen. So far, the game content looks a *lot* like the main menu.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff
changeset
|
118 |
69
d4bbb26099cc
Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
66
diff
changeset
|
119 def quit_cmd(self): |
d4bbb26099cc
Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
66
diff
changeset
|
120 self.shell.quit() |
d4bbb26099cc
Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
66
diff
changeset
|
121 |
26
0a68d137f509
Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
122 def add_item(self): |
36
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
123 self.state.add_inventory_item("triangle") |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
124 |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
125 def hand_pressed(self): |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
126 self.handbutton.toggle_selected() |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
127 self.inventory.unselect() |
31a431f795e1
Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents:
35
diff
changeset
|
128 |
63
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
58
diff
changeset
|
129 |