annotate gamelib/gamescreen.py @ 119:d5f7cccfdb6c

Hook up "detail view" scenes.
author Jeremy Thurgood <firxen@gmail.com>
date Tue, 24 Aug 2010 17:04:56 +0200
parents 13d8cb1d5962
children 48d24a48d0ce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
83
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
5 import textwrap
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
6
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
7 from albow.controls import Button, Label, Widget
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
8 from albow.layout import Row
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
9 from albow.palette_view import PaletteView
84
c76f2fad2af5 Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents: 83
diff changeset
10 from albow.screen import Screen
c76f2fad2af5 Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents: 83
diff changeset
11 from pygame import Rect, mouse
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents: 65
diff changeset
12 from pygame.color import Color
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents: 65
diff changeset
13 from pygame.locals import BLEND_ADD
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
14
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
15 from constants import SCREEN, BUTTON_SIZE, SCENE_SIZE
84
c76f2fad2af5 Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents: 83
diff changeset
16 from cursor import CursorWidget
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents: 65
diff changeset
17 from hand import HandButton
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
18 from popupmenu import PopupMenu, PopupMenuButton
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents: 65
diff changeset
19 from state import initial_state, Item
83
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
20 from widgets import BoomLabel
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
21
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
22
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
23 class InventoryView(PaletteView):
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
24
40
9fdbfbc02a60 Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents: 36
diff changeset
25 sel_color = Color("yellow")
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
26 sel_width = 2
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
27
36
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
28 def __init__(self, state, handbutton):
53
3d460c1274ee Add button size constant
Neil Muller <neil@dip.sun.ac.za>
parents: 52
diff changeset
29 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
30 self.state = state
36
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
31 self.handbutton = handbutton
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
32
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
33 def num_items(self):
34
e5c043aeed65 Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 29
diff changeset
34 return len(self.state.inventory)
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 draw_item(self, surface, item_no, rect):
40
9fdbfbc02a60 Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents: 36
diff changeset
37 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
38 surface.blit(item_image, rect, None, BLEND_ADD)
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 click_item(self, item_no, event):
73
932b0956e77a Make tools usable.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 71
diff changeset
41 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
42 self.handbutton.unselect()
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
43
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
44 def item_is_selected(self, item_no):
73
932b0956e77a Make tools usable.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 71
diff changeset
45 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
46
36
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
47 def unselect(self):
73
932b0956e77a Make tools usable.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 71
diff changeset
48 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
49
40
9fdbfbc02a60 Minor build script and inventory fixes.
Jeremy Thurgood <firxen@gmail.com>
parents: 36
diff changeset
50
97
60770ca02c1a Fix message dialog mouse cursor freezing.
Jeremy Thurgood <firxen@gmail.com>
parents: 93
diff changeset
51 class MessageDialog(BoomLabel, CursorWidget):
83
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
52
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
53 def __init__(self, text, wrap_width, **kwds):
97
60770ca02c1a Fix message dialog mouse cursor freezing.
Jeremy Thurgood <firxen@gmail.com>
parents: 93
diff changeset
54 CursorWidget.__init__(self)
83
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
55 paras = text.split("\n\n")
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
56 text = "\n".join([textwrap.fill(para, wrap_width) for para in paras])
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
57 Label.__init__(self, text, **kwds)
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
58 self.set_margin(5)
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
59 self.border_width = 1
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
60 self.border_color = (0, 0, 0)
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
61 self.bg_color = (127, 127, 127)
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
62 self.fg_color = (0, 0, 0)
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
63
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
64 def mouse_down(self, event):
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
65 self.dismiss()
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
66
4fd56ee2af61 Better message dialog.
Jeremy Thurgood <firxen@gmail.com>
parents: 78
diff changeset
67
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
68 class StateWidget(Widget):
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
69
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
70 def __init__(self, state):
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
71 Widget.__init__(self, Rect(0, 0, SCENE_SIZE[0], SCENE_SIZE[1]))
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
72 self.state = state
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
73 self.detail = DetailWindow(state)
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
74
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
75 def draw(self, surface):
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
76 self.state.draw(surface)
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
77
71
99c5506de7ea Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 70
diff changeset
78 def mouse_down(self, event):
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
79 if self.subwidgets:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
80 self.remove(self.detail)
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
81 self.state.set_current_detail(None)
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
82 else:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
83 result = self.state.interact(event.pos)
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
84 if result:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
85 if result.sound:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
86 result.sound.play()
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
87 if result.message:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
88 # Display the message as a modal dialog
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
89 MessageDialog(result.message, 60).present()
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
90 # queue a redraw to show updated state
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
91 self.invalidate()
71
99c5506de7ea Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 70
diff changeset
92
105
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
93 def animate(self):
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
94 if self.state.animate():
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
95 # queue a redraw
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
96 self.invalidate()
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
97
63
3087be3463e0 Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents: 58
diff changeset
98 def mouse_move(self, event):
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
99 if not self.subwidgets:
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
100 self.state.mouse_move(event.pos)
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
101
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
102 def show_detail(self, detail):
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
103 w, h = self.state.set_current_detail(detail)
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
104 self.detail.set_rect(Rect(0, 0, w, h))
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
105 self.add_centered(self.detail)
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
106
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents: 65
diff changeset
107
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
108 class DetailWindow(Widget):
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
109 def __init__(self, state):
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
110 Widget.__init__(self)
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
111 self.state = state
74
75e1040a1121 Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents: 73
diff changeset
112
75e1040a1121 Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents: 73
diff changeset
113 def draw(self, surface):
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
114 self.state.draw_detail(surface)
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
115
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
116 def mouse_down(self, event):
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
117 result = self.state.interact_detail(self.global_to_local(event.pos))
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
118 if result:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
119 if result.sound:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
120 result.sound.play()
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
121 if result.message:
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
122 # Display the message as a modal dialog
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
123 MessageDialog(result.message, 60).present()
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
124 # queue a redraw to show updated state
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
125 self.invalidate()
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
126
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
127 def mouse_move(self, event):
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
128 self.state.mouse_move_detail(event.pos)
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
129
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
130
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
131 class ToolBar(Row):
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
132 def __init__(self, items):
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
133 Row.__init__(self, items, spacing=0, width=SCREEN[0])
74
75e1040a1121 Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents: 73
diff changeset
134
75e1040a1121 Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents: 73
diff changeset
135
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
136 class GameScreen(Screen, CursorWidget):
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
137 def __init__(self, shell):
114
13d8cb1d5962 Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents: 108
diff changeset
138 CursorWidget.__init__(self)
84
c76f2fad2af5 Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents: 83
diff changeset
139 Screen.__init__(self, shell)
100
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
140 self.running = False
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
141
100
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
142 def _clear_all(self):
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
143 for widget in self.subwidgets[:]:
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
144 self.remove(widget)
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
145
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
146 def start_game(self):
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
147 self._clear_all()
29
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
148 # 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
149 self.state = initial_state()
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
150 self.state_widget = StateWidget(self.state)
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
151 self.add(self.state_widget)
6322d92dc8f0 Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
152
100
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
153 self.popup_menu = PopupMenu(self.shell)
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
154 self.menubutton = PopupMenuButton('Menu',
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 69
diff changeset
155 action=self.popup_menu.show_menu)
74
75e1040a1121 Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents: 73
diff changeset
156
36
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
157 self.handbutton = HandButton(action=self.hand_pressed)
74
75e1040a1121 Hacky "detail view" widget prototype.
Jeremy Thurgood <firxen@gmail.com>
parents: 73
diff changeset
158
36
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
159 self.inventory = InventoryView(self.state, self.handbutton)
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
160
119
d5f7cccfdb6c Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
161 self.testbutton = Button('Test', lambda: self.state_widget.show_detail('cryo_detail'))
93
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
162
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
163 self.toolbar = ToolBar([
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
164 self.menubutton,
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
165 self.handbutton,
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
166 self.inventory,
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
167 self.testbutton,
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
168 ])
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
169 self.toolbar.bottomleft = self.bottomleft
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
170 self.add(self.toolbar)
350ce4ebe122 Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents: 84
diff changeset
171
100
b5b6cbf556e6 Make start new game start a new game. Add Resume to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 99
diff changeset
172 self.running = True
34
e5c043aeed65 Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 29
diff changeset
173
58
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
174 # Albow uses magic method names (command + '_cmd'). Yay.
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
175 # Albow's search order means they need to be defined here, not in
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
176 # PopMenu, which is annoying.
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
177 def hide_cmd(self):
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
178 # This option does nothing, but the method needs to exist for albow
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
179 return
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
180
9048cf43f613 Popup menu
Neil Muller <neil@dip.sun.ac.za>
parents: 54
diff changeset
181 def main_menu_cmd(self):
99
367b1c9c3c6d Restore mouse when returning to main menu
Neil Muller <neil@dip.sun.ac.za>
parents: 97
diff changeset
182 mouse.set_visible(1)
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
183 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
184
69
d4bbb26099cc Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 66
diff changeset
185 def quit_cmd(self):
d4bbb26099cc Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 66
diff changeset
186 self.shell.quit()
d4bbb26099cc Some debug object cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 66
diff changeset
187
26
0a68d137f509 Initial inventory palette thing.
Jeremy Thurgood <firxen@gmail.com>
parents: 24
diff changeset
188 def add_item(self):
36
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
189 self.state.add_inventory_item("triangle")
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
190
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
191 def hand_pressed(self):
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
192 self.handbutton.toggle_selected()
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
193 self.inventory.unselect()
31a431f795e1 Add a hand button placeholder
Neil Muller <neil@dip.sun.ac.za>
parents: 35
diff changeset
194
105
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
195 def begin_frame(self):
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
196 if self.running:
65976205fc2d Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents: 100
diff changeset
197 self.state_widget.animate()