comparison pyntnclick/gamescreen.py @ 603:3ce19d33b51f pyntnclick

Rename state to game to not cause confusion with the other state
author Neil Muller <neil@dip.sun.ac.za>
date Sat, 11 Feb 2012 20:09:47 +0200
parents fabce47e542f
children 44d4e3020874
comparison
equal deleted inserted replaced
602:1aac5a3b17e1 603:3ce19d33b51f
30 30
31 def __init__(self, screen): 31 def __init__(self, screen):
32 PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6, 32 PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6,
33 scrolling=True) 33 scrolling=True)
34 self.screen = screen 34 self.screen = screen
35 self.state = screen.state 35 self.game = screen.game
36 self.state_widget = screen.state_widget 36 self.state_widget = screen.state_widget
37 37
38 def num_items(self): 38 def num_items(self):
39 return len(self.state.inventory) 39 return len(self.game.inventory)
40 40
41 def draw_item(self, surface, item_no, rect): 41 def draw_item(self, surface, item_no, rect):
42 item_image = self.state.inventory[item_no].get_inventory_image() 42 item_image = self.game.inventory[item_no].get_inventory_image()
43 surface.blit(item_image, rect, None) 43 surface.blit(item_image, rect, None)
44 44
45 def click_item(self, item_no, event): 45 def click_item(self, item_no, event):
46 item = self.state.inventory[item_no] 46 item = self.game.inventory[item_no]
47 if self.item_is_selected(item_no): 47 if self.item_is_selected(item_no):
48 self.unselect() 48 self.unselect()
49 elif item.is_interactive(self.state.tool): 49 elif item.is_interactive(self.game.tool):
50 result = item.interact(self.state.tool) 50 result = item.interact(self.game.tool)
51 handle_result(result, self.state_widget) 51 handle_result(result, self.state_widget)
52 else: 52 else:
53 self.state.set_tool(self.state.inventory[item_no]) 53 self.game.set_tool(self.game.inventory[item_no])
54 54
55 def mouse_down(self, event): 55 def mouse_down(self, event):
56 if event.button != 1: 56 if event.button != 1:
57 self.state.cancel_doodah(self.screen) 57 self.game.cancel_doodah(self.screen)
58 else: 58 else:
59 PaletteView.mouse_down(self, event) 59 PaletteView.mouse_down(self, event)
60 60
61 def item_is_selected(self, item_no): 61 def item_is_selected(self, item_no):
62 return self.state.tool is self.state.inventory[item_no] 62 return self.game.tool is self.game.inventory[item_no]
63 63
64 def unselect(self): 64 def unselect(self):
65 self.state.set_tool(None) 65 self.game.set_tool(None)
66 66
67 67
68 class StateWidget(Widget): 68 class StateWidget(Widget):
69 69
70 def __init__(self, screen): 70 def __init__(self, screen):
71 Widget.__init__(self, Rect(0, 0, SCENE_SIZE[0], SCENE_SIZE[1])) 71 Widget.__init__(self, Rect(0, 0, SCENE_SIZE[0], SCENE_SIZE[1]))
72 self.screen = screen 72 self.screen = screen
73 self.state = screen.state 73 self.game = screen.game
74 self.detail = DetailWindow(screen) 74 self.detail = DetailWindow(screen)
75 75
76 def draw(self, surface): 76 def draw(self, surface):
77 if self.state.previous_scene and self.state.do_check == LEAVE: 77 if self.game.previous_scene and self.game.do_check == LEAVE:
78 # We still need to handle leave events, so still display the scene 78 # We still need to handle leave events, so still display the scene
79 self.state.previous_scene.draw(surface, self) 79 self.game.previous_scene.draw(surface, self)
80 else: 80 else:
81 self.state.current_scene.draw(surface, self) 81 self.game.current_scene.draw(surface, self)
82 82
83 def mouse_down(self, event): 83 def mouse_down(self, event):
84 self.mouse_move(event) 84 self.mouse_move(event)
85 if event.button != 1: # We have a right/middle click 85 if event.button != 1: # We have a right/middle click
86 self.state.cancel_doodah(self.screen) 86 self.game.cancel_doodah(self.screen)
87 elif self.subwidgets: 87 elif self.subwidgets:
88 self.clear_detail() 88 self.clear_detail()
89 self._mouse_move(event.pos) 89 self._mouse_move(event.pos)
90 else: 90 else:
91 result = self.state.interact(event.pos) 91 result = self.game.interact(event.pos)
92 handle_result(result, self) 92 handle_result(result, self)
93 93
94 def animate(self): 94 def animate(self):
95 if self.state.animate(): 95 if self.game.animate():
96 # queue a redraw 96 # queue a redraw
97 self.invalidate() 97 self.invalidate()
98 # We do this here so we can get enter and leave events regardless 98 # We do this here so we can get enter and leave events regardless
99 # of what happens 99 # of what happens
100 result = self.state.check_enter_leave(self.screen) 100 result = self.game.check_enter_leave(self.screen)
101 handle_result(result, self) 101 handle_result(result, self)
102 102
103 def mouse_move(self, event): 103 def mouse_move(self, event):
104 self.state.highlight_override = False 104 self.game.highlight_override = False
105 if not self.subwidgets: 105 if not self.subwidgets:
106 self._mouse_move(event.pos) 106 self._mouse_move(event.pos)
107 107
108 def _mouse_move(self, pos): 108 def _mouse_move(self, pos):
109 self.state.highlight_override = False 109 self.game.highlight_override = False
110 self.state.current_scene.mouse_move(pos) 110 self.game.current_scene.mouse_move(pos)
111 self.state.old_pos = pos 111 self.game.old_pos = pos
112 112
113 def show_message(self, message, style=None): 113 def show_message(self, message, style=None):
114 # Display the message as a modal dialog 114 # Display the message as a modal dialog
115 MessageDialog(self.screen, message, 60, style=style).present() 115 MessageDialog(self.screen, message, 60, style=style).present()
116 # queue a redraw to show updated state 116 # queue a redraw to show updated state
121 else: 121 else:
122 self._mouse_move(mouse.get_pos()) 122 self._mouse_move(mouse.get_pos())
123 123
124 def show_detail(self, detail): 124 def show_detail(self, detail):
125 self.clear_detail() 125 self.clear_detail()
126 detail_obj = self.state.set_current_detail(detail) 126 detail_obj = self.game.set_current_detail(detail)
127 self.detail.set_image_rect(Rect((0, 0), detail_obj.get_detail_size())) 127 self.detail.set_image_rect(Rect((0, 0), detail_obj.get_detail_size()))
128 self.add_centered(self.detail) 128 self.add_centered(self.detail)
129 self.state.do_enter_detail() 129 self.game.do_enter_detail()
130 130
131 def clear_detail(self): 131 def clear_detail(self):
132 """Hide the detail view""" 132 """Hide the detail view"""
133 if self.state.current_detail is not None: 133 if self.game.current_detail is not None:
134 self.remove(self.detail) 134 self.remove(self.detail)
135 self.state.do_leave_detail() 135 self.game.do_leave_detail()
136 self.state.set_current_detail(None) 136 self.game.set_current_detail(None)
137 self._mouse_move(mouse.get_pos()) 137 self._mouse_move(mouse.get_pos())
138 138
139 def end_game(self): 139 def end_game(self):
140 self.screen.running = False 140 self.screen.running = False
141 self.screen.shell.show_screen(self.screen.shell.end_screen) 141 self.screen.shell.show_screen(self.screen.shell.end_screen)
144 class DetailWindow(Widget): 144 class DetailWindow(Widget):
145 def __init__(self, screen): 145 def __init__(self, screen):
146 Widget.__init__(self) 146 Widget.__init__(self)
147 self.image_rect = None 147 self.image_rect = None
148 self.screen = screen 148 self.screen = screen
149 self.state = screen.state 149 self.game = screen.game
150 self.border_width = 5 150 self.border_width = 5
151 self.border_color = (0, 0, 0) 151 self.border_color = (0, 0, 0)
152 # parent only gets set when we get added to the scene 152 # parent only gets set when we get added to the scene
153 self.close = BoomButton('Close', self.close_but, screen) 153 self.close = BoomButton('Close', self.close_but, screen)
154 self.add(self.close) 154 self.add(self.close)
169 def draw(self, surface): 169 def draw(self, surface):
170 scene_surface = self.get_root().surface.subsurface(self.parent.rect) 170 scene_surface = self.get_root().surface.subsurface(self.parent.rect)
171 overlay = scene_surface.convert_alpha() 171 overlay = scene_surface.convert_alpha()
172 overlay.fill(Color(0, 0, 0, 191)) 172 overlay.fill(Color(0, 0, 0, 191))
173 scene_surface.blit(overlay, (0, 0)) 173 scene_surface.blit(overlay, (0, 0))
174 self.state.current_detail.draw( 174 self.game.current_detail.draw(
175 surface.subsurface(self.image_rect), self) 175 surface.subsurface(self.image_rect), self)
176 176
177 def mouse_down(self, event): 177 def mouse_down(self, event):
178 self.mouse_move(event) 178 self.mouse_move(event)
179 if event.button != 1: # We have a right/middle click 179 if event.button != 1: # We have a right/middle click
180 self.state.cancel_doodah(self.screen) 180 self.game.cancel_doodah(self.screen)
181 else: 181 else:
182 result = self.state.interact_detail( 182 result = self.game.interact_detail(
183 self.global_to_local(event.pos)) 183 self.global_to_local(event.pos))
184 handle_result(result, self) 184 handle_result(result, self)
185 185
186 def mouse_move(self, event): 186 def mouse_move(self, event):
187 self._mouse_move(event.pos) 187 self._mouse_move(event.pos)
188 188
189 def _mouse_move(self, pos): 189 def _mouse_move(self, pos):
190 self.state.highlight_override = False 190 self.game.highlight_override = False
191 self.state.current_detail.mouse_move(self.global_to_local(pos)) 191 self.game.current_detail.mouse_move(self.global_to_local(pos))
192 192
193 def show_message(self, message, style=None): 193 def show_message(self, message, style=None):
194 self.parent.show_message(message, style) 194 self.parent.show_message(message, style)
195 self.invalidate() 195 self.invalidate()
196 196
218 for widget in self.subwidgets[:]: 218 for widget in self.subwidgets[:]:
219 self.remove(widget) 219 self.remove(widget)
220 220
221 def start_game(self): 221 def start_game(self):
222 self._clear_all() 222 self._clear_all()
223 self.state = self.create_initial_state() 223 self.game = self.create_initial_state()
224 self.state_widget = StateWidget(self) 224 self.state_widget = StateWidget(self)
225 self.add(self.state_widget) 225 self.add(self.state_widget)
226 226
227 self.popup_menu = PopupMenu(self) 227 self.popup_menu = PopupMenu(self)
228 self.menubutton = PopupMenuButton('Menu', 228 self.menubutton = PopupMenuButton('Menu',