Mercurial > pyntnclick
annotate gamelib/state.py @ 126:f125bb60d7de
Move result handling to result object
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Tue, 24 Aug 2010 18:05:27 +0200 |
parents | d3ca34a664fd |
children | 9646e7c8bb97 |
rev | line source |
---|---|
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
1 """Utilities and base classes for dealing with scenes.""" |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
2 |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
3 from albow.resource import get_image |
68
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
4 from albow.utils import frame_rect |
126
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
5 from widgets import BoomLabel, MessageDialog |
23
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
6 from pygame.locals import BLEND_ADD |
63
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
56
diff
changeset
|
7 from pygame.rect import Rect |
68
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
8 from pygame.color import Color |
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
9 |
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
10 import constants |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
11 from sound import get_sound |
11 | 12 |
124 | 13 |
78 | 14 class Result(object): |
15 """Result of interacting with a thing""" | |
16 | |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
17 def __init__(self, message=None, soundfile=None): |
78 | 18 self.message = message |
107
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
19 self.sound = None |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
20 if soundfile: |
5213b45fcc7e
Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
105
diff
changeset
|
21 self.sound = get_sound(soundfile) |
78 | 22 |
126
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
23 def process(self, scene): |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
24 """Helper function to do the right thing with a result object""" |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
25 if self.sound: |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
26 self.sound.play() |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
27 if self.message: |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
28 # Display the message as a modal dialog |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
29 MessageDialog(self.message, 60).present() |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
30 # queue a redraw to show updated state |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
31 scene.invalidate() |
f125bb60d7de
Move result handling to result object
Neil Muller <neil@dip.sun.ac.za>
parents:
125
diff
changeset
|
32 |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
33 |
9
6db58d31dd4c
Function for loading initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
7
diff
changeset
|
34 def initial_state(): |
6db58d31dd4c
Function for loading initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
7
diff
changeset
|
35 """Load the initial state.""" |
6db58d31dd4c
Function for loading initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
7
diff
changeset
|
36 state = State() |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
37 state.load_scenes("cryo") |
56
75bf3d3689e9
Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents:
55
diff
changeset
|
38 state.load_scenes("bridge") |
47
8f1fccb8cadf
Skeletons for scenes in plot outline.
Simon Cross <simon@simonx>
parents:
41
diff
changeset
|
39 #state.load_scenes("mess") |
8f1fccb8cadf
Skeletons for scenes in plot outline.
Simon Cross <simon@simonx>
parents:
41
diff
changeset
|
40 #state.load_scenes("engine") |
8f1fccb8cadf
Skeletons for scenes in plot outline.
Simon Cross <simon@simonx>
parents:
41
diff
changeset
|
41 #state.load_scenes("machine") |
8f1fccb8cadf
Skeletons for scenes in plot outline.
Simon Cross <simon@simonx>
parents:
41
diff
changeset
|
42 #state.load_scenes("map") |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
43 state.set_current_scene("cryo") |
120 | 44 state.set_do_enter_leave() |
9
6db58d31dd4c
Function for loading initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
7
diff
changeset
|
45 return state |
6db58d31dd4c
Function for loading initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
7
diff
changeset
|
46 |
6db58d31dd4c
Function for loading initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
7
diff
changeset
|
47 |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
48 class State(object): |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
49 """Complete game state. |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
50 |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
51 Game state consists of: |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
52 |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
53 * items |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
54 * scenes |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
55 """ |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
56 |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
57 def __init__(self): |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
58 # map of scene name -> Scene object |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
59 self.scenes = {} |
93
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
60 # map of detail view name -> DetailView object |
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
61 self.detail_views = {} |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
62 # map of item name -> Item object |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
63 self.items = {} |
33
f8e02d02c782
Convert inventory to list of item objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
32
diff
changeset
|
64 # list of item objects in inventory |
f8e02d02c782
Convert inventory to list of item objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
32
diff
changeset
|
65 self.inventory = [] |
73 | 66 # currently selected tool (item) |
67 self.tool = None | |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
68 # current scene |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
69 self.current_scene = None |
93
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
70 # current detail view |
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
71 self.current_detail = None |
120 | 72 # scene we came from, for enter and leave processing |
73 self.previous_scene = None | |
74 # scene transion helpers | |
75 self.do_check = None | |
76 self.old_pos = None | |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
77 |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
78 def add_scene(self, scene): |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
79 self.scenes[scene.name] = scene |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
80 |
93
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
81 def add_detail_view(self, detail_view): |
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
82 self.detail_views[detail_view.name] = detail_view |
350ce4ebe122
Detail view without any functionality.
Jeremy Thurgood <firxen@gmail.com>
parents:
88
diff
changeset
|
83 |
32
18cb1af411ef
Add helper for adding items. Give items names. Make things take a rectangle.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
30
diff
changeset
|
84 def add_item(self, item): |
35 | 85 self.items[item.name] = item |
32
18cb1af411ef
Add helper for adding items. Give items names. Make things take a rectangle.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
30
diff
changeset
|
86 |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
87 def load_scenes(self, modname): |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
88 mod = __import__("gamelib.scenes.%s" % (modname,), fromlist=[modname]) |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
89 for scene_cls in mod.SCENES: |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
90 self.add_scene(scene_cls(self)) |
119
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
91 if hasattr(mod, 'DETAIL_VIEWS'): |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
92 for scene_cls in mod.DETAIL_VIEWS: |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
93 self.add_detail_view(scene_cls(self)) |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
94 |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
95 def set_current_scene(self, name): |
120 | 96 old_scene = self.current_scene |
29
6322d92dc8f0
Add state widget for rendering state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
28
diff
changeset
|
97 self.current_scene = self.scenes[name] |
120 | 98 if old_scene and old_scene != self.current_scene: |
99 self.previous_scene = old_scene | |
100 self.set_do_enter_leave() | |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
101 |
119
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
102 def set_current_detail(self, name): |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
103 if name is None: |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
104 self.current_detail = None |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
105 else: |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
106 self.current_detail = self.detail_views[name] |
125
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
107 return self.current_detail.get_detail_size() |
119
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
108 |
30
daf9eecb670f
Add inventory manipulation methods.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
29
diff
changeset
|
109 def add_inventory_item(self, name): |
33
f8e02d02c782
Convert inventory to list of item objects.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
32
diff
changeset
|
110 self.inventory.append(self.items[name]) |
30
daf9eecb670f
Add inventory manipulation methods.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
29
diff
changeset
|
111 |
daf9eecb670f
Add inventory manipulation methods.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
29
diff
changeset
|
112 def remove_inventory_item(self, name): |
34
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
33
diff
changeset
|
113 self.inventory.remove(self.items[name]) |
117
139864ce8bdb
removed items can't be the current tool
Neil Muller <neil@dip.sun.ac.za>
parents:
107
diff
changeset
|
114 # Unselect tool if it's removed |
139864ce8bdb
removed items can't be the current tool
Neil Muller <neil@dip.sun.ac.za>
parents:
107
diff
changeset
|
115 if self.tool == self.items[name]: |
139864ce8bdb
removed items can't be the current tool
Neil Muller <neil@dip.sun.ac.za>
parents:
107
diff
changeset
|
116 self.set_tool(None) |
30
daf9eecb670f
Add inventory manipulation methods.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
29
diff
changeset
|
117 |
73 | 118 def set_tool(self, item): |
119 self.tool = item | |
120 | |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
121 def draw(self, surface): |
120 | 122 if self.do_check and self.previous_scene and self.do_check == constants.LEAVE: |
123 # We still need to handle leave events, so still display the scene | |
124 self.previous_scene.draw(surface) | |
125 else: | |
126 self.current_scene.draw(surface) | |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
127 |
119
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
128 def draw_detail(self, surface): |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
129 self.current_detail.draw(surface) |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
130 |
73 | 131 def interact(self, pos): |
78 | 132 return self.current_scene.interact(self.tool, pos) |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
133 |
119
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
134 def interact_detail(self, pos): |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
135 return self.current_detail.interact(self.tool, pos) |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
136 |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
137 def animate(self): |
120 | 138 if not self.do_check: |
139 return self.current_scene.animate() | |
140 | |
141 def check_enter_leave(self): | |
142 if not self.do_check: | |
143 return None | |
144 if self.do_check == constants.LEAVE: | |
145 self.do_check = constants.ENTER | |
146 if self.previous_scene: | |
147 return self.previous_scene.leave() | |
148 return None | |
149 elif self.do_check == constants.ENTER: | |
150 self.do_check = None | |
151 # Fix descriptions, etc. | |
152 if self.old_pos: | |
153 self.current_scene.mouse_move(self.tool, self.old_pos) | |
154 return self.current_scene.enter() | |
155 raise RuntimeError('invalid do_check value %s' % self.do_check) | |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
156 |
73 | 157 def mouse_move(self, pos): |
158 self.current_scene.mouse_move(self.tool, pos) | |
120 | 159 # So we can do sensible things on enter and leave |
160 self.old_pos = pos | |
161 | |
162 def set_do_enter_leave(self): | |
163 """Flag that we need to run the enter loop""" | |
164 self.do_check = constants.LEAVE | |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
165 |
119
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
166 def mouse_move_detail(self, pos): |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
167 self.current_detail.mouse_move(self.tool, pos) |
d5f7cccfdb6c
Hook up "detail view" scenes.
Jeremy Thurgood <firxen@gmail.com>
parents:
117
diff
changeset
|
168 |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
169 |
55
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
170 class StatefulGizmo(object): |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
171 |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
172 # initial data (optional, defaults to none) |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
173 INITIAL_DATA = None |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
174 |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
175 def __init__(self): |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
176 self.data = {} |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
177 if self.INITIAL_DATA: |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
178 self.data.update(self.INITIAL_DATA) |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
179 |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
180 def set_data(self, key, value): |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
181 self.data[key] = value |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
182 |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
183 def get_data(self, key): |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
184 return self.data.get(key, None) |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
185 |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
186 |
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
187 class Scene(StatefulGizmo): |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
188 """Base class for scenes.""" |
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
189 |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
190 # sub-folder to look for resources in |
22 | 191 FOLDER = None |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
192 |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
193 # name of background image resource |
22 | 194 BACKGROUND = None |
195 | |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
196 # name of scene (optional, defaults to folder) |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
197 NAME = None |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
198 |
125
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
199 # size (for detail views) |
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
200 SIZE = constants.SCENE_SIZE |
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
201 |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
202 def __init__(self, state): |
55
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
203 StatefulGizmo.__init__(self) |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
204 # scene name |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
205 self.name = self.NAME if self.NAME is not None else self.FOLDER |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
206 # link back to state object |
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
207 self.state = state |
22 | 208 # map of thing names -> Thing objects |
209 self.things = {} | |
28
0f25f7b9b37a
Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
23
diff
changeset
|
210 self._background = get_image(self.FOLDER, self.BACKGROUND) |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
211 self._current_thing = None |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
212 self._current_description = None |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
213 |
35 | 214 def add_item(self, item): |
215 self.state.add_item(item) | |
216 | |
39
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
217 def add_thing(self, thing): |
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
218 self.things[thing.name] = thing |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
219 thing.set_scene(self) |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
220 |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
221 def remove_thing(self, thing): |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
222 del self.things[thing.name] |
39
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
223 |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
224 def _make_description(self, text): |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
225 if text is None: |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
226 return None |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
78
diff
changeset
|
227 label = BoomLabel(text) |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
78
diff
changeset
|
228 label.set_margin(5) |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
229 label.border_width = 1 |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
230 label.border_color = (0, 0, 0) |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
231 label.bg_color = (127, 127, 127) |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
232 label.fg_color = (0, 0, 0) |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
233 return label |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
234 |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
235 def draw_description(self, surface): |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
236 if self._current_description is not None: |
77
bb7c8072f8c0
Some hacks to make Label work.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
76
diff
changeset
|
237 sub = surface.subsurface( |
bb7c8072f8c0
Some hacks to make Label work.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
76
diff
changeset
|
238 Rect(5, 5, *self._current_description.size)) |
bb7c8072f8c0
Some hacks to make Label work.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
76
diff
changeset
|
239 self._current_description.draw_all(sub) |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
240 |
22 | 241 def draw_background(self, surface): |
88
053bc8e167fc
Don't render with BLEND_ADD, use normal overlay.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
86
diff
changeset
|
242 surface.blit(self._background, (0, 0), None) |
18
c9b124c2f5c6
Start of scene drawing framework.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
11
diff
changeset
|
243 |
23
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
244 def draw_things(self, surface): |
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
245 for thing in self.things.itervalues(): |
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
246 thing.draw(surface) |
18
c9b124c2f5c6
Start of scene drawing framework.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
11
diff
changeset
|
247 |
22 | 248 def draw(self, surface): |
249 self.draw_background(surface) | |
23
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
250 self.draw_things(surface) |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
251 self.draw_description(surface) |
18
c9b124c2f5c6
Start of scene drawing framework.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
11
diff
changeset
|
252 |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
253 def interact(self, item, pos): |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
254 """Interact with a particular position. |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
255 |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
256 Item may be an item in the list of items or None for the hand. |
78 | 257 |
258 Returns a Result object to provide feedback to the player. | |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
259 """ |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
260 for thing in self.things.itervalues(): |
94
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
261 if thing.contains(pos): |
78 | 262 result = thing.interact(item) |
263 if result: | |
264 if self._current_thing: | |
265 # Also update descriptions if needed | |
266 self._current_description = self._make_description( | |
267 self._current_thing.get_description()) | |
268 return result | |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
269 |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
270 def animate(self): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
271 """Animate all the things in the scene. |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
272 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
273 Return true if any of them need to queue a redraw""" |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
274 result = False |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
275 for thing in self.things.itervalues(): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
276 if thing.animate(): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
277 result = True |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
278 return result |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
279 |
120 | 280 def enter(self): |
281 return None | |
282 | |
283 def leave(self): | |
284 self._current_description = None | |
285 return None | |
286 | |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
287 def mouse_move(self, item, pos): |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
288 """Call to check whether the cursor has entered / exited a thing. |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
289 |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
290 Item may be an item in the list of items or None for the hand. |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
291 """ |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
292 if self._current_thing is not None: |
94
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
293 if self._current_thing.contains(pos): |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
294 return |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
295 else: |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
296 self._current_thing.leave() |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
297 self._current_thing = None |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
298 self._current_description = None |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
299 for thing in self.things.itervalues(): |
94
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
300 if thing.contains(pos): |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
301 thing.enter(item) |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
302 self._current_thing = thing |
76
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
303 self._current_description = self._make_description( |
1a5fdc225939
Add description rendering to scene rendering.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
75
diff
changeset
|
304 thing.get_description()) |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
305 break |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
306 |
125
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
307 def get_detail_size(self): |
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
308 return self.SIZE |
d3ca34a664fd
Some detail view and data cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
309 |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
310 |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
311 class Interact(object): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
312 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
313 def __init__(self, image, rect, interact_rect): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
314 self.image = image |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
315 self.rect = rect |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
316 self.interact_rect = interact_rect |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
317 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
318 def set_thing(self, thing): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
319 pass |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
320 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
321 def draw(self, surface): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
322 if self.image is not None: |
88
053bc8e167fc
Don't render with BLEND_ADD, use normal overlay.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
86
diff
changeset
|
323 surface.blit(self.image, self.rect, None) |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
324 |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
325 def animate(self): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
326 return False |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
327 |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
328 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
329 class InteractNoImage(Interact): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
330 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
331 def __init__(self, x, y, w, h): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
332 super(InteractNoImage, self).__init__(None, None, Rect(x, y, w, h)) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
333 |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
334 |
94
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
335 class InteractRectUnion(Interact): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
336 |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
337 def __init__(self, rect_list): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
338 # pygame.rect.Rect.unionall should do this, but is broken |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
339 # in some pygame versions (including 1.8, it appears) |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
340 rect_list = [Rect(x) for x in rect_list] |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
341 union_rect = rect_list[0] |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
342 for rect in rect_list[1:]: |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
343 union_rect = union_rect.union(rect) |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
344 super(InteractRectUnion, self).__init__(None, None, union_rect) |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
345 self.interact_rect = rect_list |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
346 |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
347 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
348 class InteractImage(Interact): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
349 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
350 def __init__(self, x, y, image_name): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
351 super(InteractImage, self).__init__(None, None, None) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
352 self._pos = (x, y) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
353 self._image_name = image_name |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
354 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
355 def set_thing(self, thing): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
356 self.image = get_image(thing.folder, self._image_name) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
357 self.rect = Rect(self._pos, self.image.get_size()) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
358 self.interact_rect = self.rect |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
359 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
360 |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
361 class InteractAnimated(Interact): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
362 """Interactive with an animation rather than an image""" |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
363 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
364 # FIXME: Assumes all images are the same size |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
365 # anim_seq - sequence of image names |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
366 # delay - number of frames to wait between changing images |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
367 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
368 def __init__(self, x, y, anim_seq, delay): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
369 self._pos = (x, y) |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
370 self._anim_pos = 0 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
371 self._names = anim_seq |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
372 self._frame_count = 0 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
373 self._anim_seq = None |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
374 self._delay = delay |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
375 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
376 def set_thing(self, thing): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
377 self._anim_seq = [get_image(thing.folder, x) for x in self._names] |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
378 self.image = self._anim_seq[0] |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
379 self.rect = Rect(self._pos, self.image.get_size()) |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
380 self.interact_rect = self.rect |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
381 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
382 def animate(self): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
383 if self._anim_seq: |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
384 self._frame_count += 1 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
385 if self._frame_count > self._delay: |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
386 self._frame_count = 0 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
387 self._anim_pos += 1 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
388 if self._anim_pos >= len(self._anim_seq): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
389 self._anim_pos = 0 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
390 self.image = self._anim_seq[self._anim_pos] |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
391 # queue redraw |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
392 return True |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
393 return False |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
394 |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
395 |
55
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
396 class Thing(StatefulGizmo): |
22 | 397 """Base class for things in a scene that you can interact with.""" |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
398 |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
399 # name of thing |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
400 NAME = None |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
401 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
402 # sub-folder to look for resources in (defaults to scenes folder) |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
403 FOLDER = None |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
404 |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
405 # list of Interact objects |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
406 INTERACTS = {} |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
407 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
408 # name first interact |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
409 INITIAL = None |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
410 |
68
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
411 # Interact rectangle hi-light color (for debugging) |
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
412 # (set to None to turn off) |
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
413 if constants.DEBUG: |
75 | 414 _interact_hilight_color = Color('red') |
68
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
415 else: |
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
416 _interact_hilight_color = None |
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
417 |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
418 def __init__(self): |
55
2e2f6ff54780
Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents:
47
diff
changeset
|
419 StatefulGizmo.__init__(self) |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
420 # name of the thing |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
421 self.name = self.NAME |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
422 # folder for resource (None is overridden by scene folder) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
423 self.folder = self.FOLDER |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
424 # interacts |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
425 self.interacts = self.INTERACTS |
39
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
426 # these are set by set_scene |
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
427 self.scene = None |
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
428 self.state = None |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
429 self.current_interact = None |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
430 self.rect = None |
32
18cb1af411ef
Add helper for adding items. Give items names. Make things take a rectangle.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
30
diff
changeset
|
431 # TODO: add masks |
7
d7c9d8273d7f
Start of base classes for game state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
432 |
39
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
433 def set_scene(self, scene): |
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
434 assert self.scene is None |
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
435 self.scene = scene |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
436 if self.folder is None: |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
437 self.folder = scene.FOLDER |
39
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
438 self.state = scene.state |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
439 for interact in self.interacts.itervalues(): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
440 interact.set_thing(self) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
441 self.set_interact(self.INITIAL) |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
442 |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
443 def set_interact(self, name): |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
444 self.current_interact = self.interacts[name] |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
445 self.rect = self.current_interact.interact_rect |
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
446 assert self.rect is not None, name |
39
088a101f5b94
Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
35
diff
changeset
|
447 |
94
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
448 def contains(self, pos): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
449 if hasattr(self.rect, 'collidepoint'): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
450 return self.rect.collidepoint(pos) |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
451 else: |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
452 # FIXME: add sanity check |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
453 for rect in list(self.rect): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
454 if rect.collidepoint(pos): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
455 return True |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
456 return False |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
457 |
63
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
56
diff
changeset
|
458 def get_description(self): |
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
56
diff
changeset
|
459 return None |
3087be3463e0
Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents:
56
diff
changeset
|
460 |
56
75bf3d3689e9
Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents:
55
diff
changeset
|
461 def is_interactive(self): |
75bf3d3689e9
Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents:
55
diff
changeset
|
462 return True |
75bf3d3689e9
Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents:
55
diff
changeset
|
463 |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
464 def enter(self, item): |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
465 """Called when the cursor enters the Thing.""" |
101
19d784fd3918
Remove debugging prints (descriptions now provide pretty much the same feedback anyway).
Simon Cross <simon@simonx>
parents:
94
diff
changeset
|
466 pass |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
467 |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
468 def leave(self): |
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
469 """Called when the cursr leaves the Thing.""" |
101
19d784fd3918
Remove debugging prints (descriptions now provide pretty much the same feedback anyway).
Simon Cross <simon@simonx>
parents:
94
diff
changeset
|
470 pass |
71
99c5506de7ea
Start of interact handling.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
68
diff
changeset
|
471 |
22 | 472 def interact(self, item): |
56
75bf3d3689e9
Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents:
55
diff
changeset
|
473 if not self.is_interactive(): |
75bf3d3689e9
Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents:
55
diff
changeset
|
474 return |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
475 if item is None: |
78 | 476 return self.interact_without() |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
477 else: |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
478 handler = getattr(self, 'interact_with_' + item.name, None) |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
479 if handler is not None: |
78 | 480 return handler(item) |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
481 else: |
78 | 482 return self.interact_default(item) |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
483 |
105
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
484 def animate(self): |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
485 return self.current_interact.animate() |
65976205fc2d
Rough Stab at basic animation support
Neil Muller <neil@dip.sun.ac.za>
parents:
101
diff
changeset
|
486 |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
487 def interact_without(self): |
78 | 488 return self.interact_default(None) |
41
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
489 |
ad6f56bfa8b7
Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents:
39
diff
changeset
|
490 def interact_default(self, item): |
78 | 491 return Result("It doesn't work.") |
22 | 492 |
23
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
493 def draw(self, surface): |
86
593bddfacf18
Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
79
diff
changeset
|
494 self.current_interact.draw(surface) |
68
158a13a48d48
Show interact rectangles when constants.DEBUG is True.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
65
diff
changeset
|
495 if self._interact_hilight_color is not None: |
94
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
496 if hasattr(self.rect, 'collidepoint'): |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
497 frame_rect(surface, self._interact_hilight_color, |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
498 self.rect.inflate(1, 1), 1) |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
499 else: |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
500 for rect in self.rect: |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
501 frame_rect(surface, self._interact_hilight_color, |
ce23fad8ecb3
More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents:
93
diff
changeset
|
502 rect.inflate(1, 1), 1) |
23
1e90a3e4618e
Add code for blitting Scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
22
diff
changeset
|
503 |
22 | 504 |
505 class Item(object): | |
506 """Base class for inventory items.""" | |
507 | |
35 | 508 # image for inventory |
509 INVENTORY_IMAGE = None | |
32
18cb1af411ef
Add helper for adding items. Give items names. Make things take a rectangle.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
30
diff
changeset
|
510 |
35 | 511 def __init__(self, name): |
512 self.name = name | |
513 self.inventory_image = get_image('items', self.INVENTORY_IMAGE) | |
32
18cb1af411ef
Add helper for adding items. Give items names. Make things take a rectangle.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
30
diff
changeset
|
514 # TODO: needs cursor |
22 | 515 |
34
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
33
diff
changeset
|
516 def get_inventory_image(self): |
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
33
diff
changeset
|
517 return self.inventory_image |
e5c043aeed65
Inventory and items. And stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
33
diff
changeset
|
518 |