Mercurial > boomslang
comparison gamelib/gamescreen.py @ 187:fbfd8e748ac0
Remove screen reference from State.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 25 Aug 2010 16:45:06 +0200 |
parents | 5845a3ed4dad |
children | c56a0170f0cb |
comparison
equal
deleted
inserted
replaced
186:f15c4f7c24e6 | 187:fbfd8e748ac0 |
---|---|
20 class InventoryView(PaletteView): | 20 class InventoryView(PaletteView): |
21 | 21 |
22 sel_color = Color("yellow") | 22 sel_color = Color("yellow") |
23 sel_width = 2 | 23 sel_width = 2 |
24 | 24 |
25 def __init__(self, state, scene_widget): | 25 def __init__(self, screen): |
26 PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6, scrolling=True) | 26 PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6, scrolling=True) |
27 self.state = state | 27 self.state = screen.state |
28 self.scene_widget = scene_widget | 28 self.state_widget = screen.state_widget |
29 | 29 |
30 def num_items(self): | 30 def num_items(self): |
31 return len(self.state.inventory) | 31 return len(self.state.inventory) |
32 | 32 |
33 def draw_item(self, surface, item_no, rect): | 33 def draw_item(self, surface, item_no, rect): |
39 self.unselect() | 39 self.unselect() |
40 else: | 40 else: |
41 if self.state.tool: | 41 if self.state.tool: |
42 result = self.state.inventory[item_no].interact(self.state.tool, self.state) | 42 result = self.state.inventory[item_no].interact(self.state.tool, self.state) |
43 if result: | 43 if result: |
44 result.process(self.scene_widget) | 44 result.process(self.state_widget) |
45 else: | 45 else: |
46 self.state.set_tool(self.state.inventory[item_no]) | 46 self.state.set_tool(self.state.inventory[item_no]) |
47 | 47 |
48 def item_is_selected(self, item_no): | 48 def item_is_selected(self, item_no): |
49 return self.state.tool is self.state.inventory[item_no] | 49 return self.state.tool is self.state.inventory[item_no] |
52 self.state.set_tool(None) | 52 self.state.set_tool(None) |
53 | 53 |
54 | 54 |
55 class StateWidget(Widget): | 55 class StateWidget(Widget): |
56 | 56 |
57 def __init__(self, state): | 57 def __init__(self, screen): |
58 Widget.__init__(self, Rect(0, 0, SCENE_SIZE[0], SCENE_SIZE[1])) | 58 Widget.__init__(self, Rect(0, 0, SCENE_SIZE[0], SCENE_SIZE[1])) |
59 self.state = state | 59 self.screen = screen |
60 self.detail = DetailWindow(state) | 60 self.state = screen.state |
61 self.detail = DetailWindow(screen) | |
61 | 62 |
62 def draw(self, surface): | 63 def draw(self, surface): |
63 self.state.draw(surface) | 64 self.state.draw(surface, self.screen) |
64 | 65 |
65 def mouse_down(self, event): | 66 def mouse_down(self, event): |
66 if self.subwidgets: | 67 if self.subwidgets: |
67 self.remove(self.detail) | 68 self.remove(self.detail) |
68 self.state.set_current_detail(None) | 69 self.state.set_current_detail(None) |
76 if self.state.animate(): | 77 if self.state.animate(): |
77 # queue a redraw | 78 # queue a redraw |
78 self.invalidate() | 79 self.invalidate() |
79 # We do this here so we can get enter and leave events regardless | 80 # We do this here so we can get enter and leave events regardless |
80 # of what happens | 81 # of what happens |
81 result = self.state.check_enter_leave() | 82 result = self.state.check_enter_leave(self.screen) |
82 if result: | 83 if result: |
83 result.process(self) | 84 result.process(self) |
84 | 85 |
85 def mouse_move(self, event): | 86 def mouse_move(self, event): |
86 if not self.subwidgets: | 87 if not self.subwidgets: |
87 self._mouse_move(event.pos) | 88 self._mouse_move(event.pos) |
88 | 89 |
89 def _mouse_move(self, pos): | 90 def _mouse_move(self, pos): |
90 self.state.mouse_move(pos) | 91 self.state.mouse_move(pos, self.screen) |
91 | 92 |
92 def show_message(self, message): | 93 def show_message(self, message): |
93 self.parent.cursor_highlight(False) | 94 self.parent.cursor_highlight(False) |
94 # Display the message as a modal dialog | 95 # Display the message as a modal dialog |
95 MessageDialog(message, 60).present() | 96 MessageDialog(self.screen, message, 60).present() |
96 # queue a redraw to show updated state | 97 # queue a redraw to show updated state |
97 self.invalidate() | 98 self.invalidate() |
98 # The cursor could have gone anywhere | 99 # The cursor could have gone anywhere |
99 if self.subwidgets: | 100 if self.subwidgets: |
100 self.subwidgets[0]._mouse_move(mouse.get_pos()) | 101 self.subwidgets[0]._mouse_move(mouse.get_pos()) |
107 self.add_centered(self.detail) | 108 self.add_centered(self.detail) |
108 self.parent.cursor_highlight(False) | 109 self.parent.cursor_highlight(False) |
109 | 110 |
110 | 111 |
111 class DetailWindow(Widget): | 112 class DetailWindow(Widget): |
112 def __init__(self, state): | 113 def __init__(self, screen): |
113 Widget.__init__(self) | 114 Widget.__init__(self) |
114 self.state = state | 115 self.screen = screen |
116 self.state = screen.state | |
115 self.border_width = 5 | 117 self.border_width = 5 |
116 self.border_color = (0, 0, 0) | 118 self.border_color = (0, 0, 0) |
117 | 119 |
118 def set_image_rect(self, rect): | 120 def set_image_rect(self, rect): |
119 bw = self.border_width | 121 bw = self.border_width |
120 self.image_rect = rect | 122 self.image_rect = rect |
121 self.image_rect.topleft = (bw, bw) | 123 self.image_rect.topleft = (bw, bw) |
122 self.set_rect(rect.inflate(bw*2, bw*2)) | 124 self.set_rect(rect.inflate(bw*2, bw*2)) |
123 | 125 |
124 def draw(self, surface): | 126 def draw(self, surface): |
125 self.state.draw_detail(surface.subsurface(self.image_rect)) | 127 self.state.draw_detail(surface.subsurface(self.image_rect), self.screen) |
126 | 128 |
127 def mouse_down(self, event): | 129 def mouse_down(self, event): |
128 result = self.state.interact_detail(self.global_to_local(event.pos)) | 130 result = self.state.interact_detail(self.global_to_local(event.pos)) |
129 if result: | 131 if result: |
130 result.process(self) | 132 result.process(self) |
131 | 133 |
132 def mouse_move(self, event): | 134 def mouse_move(self, event): |
133 self._mouse_move(event.pos) | 135 self._mouse_move(event.pos) |
134 | 136 |
135 def _mouse_move(self, pos): | 137 def _mouse_move(self, pos): |
136 self.state.mouse_move_detail(self.global_to_local(pos)) | 138 self.state.mouse_move_detail(self.global_to_local(pos), self.screen) |
137 | 139 |
138 def show_message(self, message): | 140 def show_message(self, message): |
139 self.parent.show_message(message) | 141 self.parent.show_message(message) |
140 self.invalidate() | 142 self.invalidate() |
141 | 143 |
147 Row.__init__(self, items, spacing=0, width=SCREEN[0]) | 149 Row.__init__(self, items, spacing=0, width=SCREEN[0]) |
148 | 150 |
149 | 151 |
150 class GameScreen(Screen, CursorWidget): | 152 class GameScreen(Screen, CursorWidget): |
151 def __init__(self, shell): | 153 def __init__(self, shell): |
152 CursorWidget.__init__(self) | 154 CursorWidget.__init__(self, self) |
153 Screen.__init__(self, shell) | 155 Screen.__init__(self, shell) |
154 self.running = False | 156 self.running = False |
155 | 157 |
156 def _clear_all(self): | 158 def _clear_all(self): |
157 for widget in self.subwidgets[:]: | 159 for widget in self.subwidgets[:]: |
158 self.remove(widget) | 160 self.remove(widget) |
159 | 161 |
160 def start_game(self): | 162 def start_game(self): |
161 self._clear_all() | 163 self._clear_all() |
162 # TODO: Randomly plonk the state here for now | 164 # TODO: Randomly plonk the state here for now |
163 self.state = initial_state(self) | 165 self.state = initial_state() |
164 self.state_widget = StateWidget(self.state) | 166 self.state_widget = StateWidget(self) |
165 self.add(self.state_widget) | 167 self.add(self.state_widget) |
166 | 168 |
167 self.popup_menu = PopupMenu(self.shell) | 169 self.popup_menu = PopupMenu(self) |
168 self.menubutton = PopupMenuButton('Menu', | 170 self.menubutton = PopupMenuButton('Menu', |
169 action=self.popup_menu.show_menu) | 171 action=self.popup_menu.show_menu) |
170 | 172 |
171 self.handbutton = HandButton(action=self.hand_pressed) | 173 self.handbutton = HandButton(action=self.hand_pressed) |
172 | 174 |
173 self.inventory = InventoryView(self.state, self.state_widget) | 175 self.inventory = InventoryView(self) |
174 | 176 |
175 self.toolbar = ToolBar([ | 177 self.toolbar = ToolBar([ |
176 self.menubutton, | 178 self.menubutton, |
177 self.handbutton, | 179 self.handbutton, |
178 self.inventory, | 180 self.inventory, |