diff mamba/habitats/editor.py @ 555:c014f5023cd2

Test run replays
author Neil Muller <drnlmuller@gmail.com>
date Thu, 22 Sep 2011 17:32:38 +0200
parents a2648295b7cf
children fda360905a1e
line wrap: on
line diff
--- a/mamba/habitats/editor.py	Fri Sep 23 22:17:46 2011 +0200
+++ b/mamba/habitats/editor.py	Thu Sep 22 17:32:38 2011 +0200
@@ -74,6 +74,7 @@
         self.sprite_mode = 'Add'
         self.sprite_cls = None
         # Map for test mode lookups
+        self.replays = {}
         self.action_map = {
                 K_UP: UP,
                 K_DOWN: DOWN,
@@ -213,6 +214,22 @@
                     tile_button.add_callback('clicked', self.sprite_tool,
                             name, None, None)
                     tool_list.append(tile_button)
+            elif self.mode == 'Test':
+                for replay in [1, 2]:
+                    store_button = TextButton((0, 0),
+                            'Store run as %s' % replay)
+                    store_button.add_callback('clicked', self.store_replay,
+                            replay)
+                    tool_list.append(store_button)
+                    replay_button = TextButton((0, 0),
+                            'Replay run %s' % replay)
+                    replay_button.add_callback('clicked', self.do_replay,
+                            replay)
+                    tool_list.append(replay_button)
+                last_button = TextButton((0, 0),
+                        'Replay last run')
+                last_button.add_callback('clicked', self.do_replay, None)
+                tool_list.append(last_button)
             self.tool_widget = ToolListWidget((button_left, button_height),
                     tool_list, MAX_TOOLS, start_key=K_2)
             self.toolbar[self.mode] = self.tool_widget
@@ -396,6 +413,7 @@
         self.edit_widget = EditLevelWidget(self.level)
         self.edit_widget.add_callback(SnakeDiedEvent, self.halt_test)
         self.edit_widget.add_callback(LevelCompletedEvent, self.halt_test)
+        self.replays = {}
         self.container.add(self.edit_widget)
         self.clear_toolbar()
         self.setup_toolbar()
@@ -546,3 +564,17 @@
             self.level.replace_sprite(sprite)
         self.level.restart()
         return True
+
+    def store_replay(self, ev, widget, number):
+        self.replays[number] = self.edit_widget.get_replay()
+
+    def do_replay(self, ev, widget, number):
+        if number:
+            # We do nothing if the user tries to replay something thay
+            # isn't there
+            if number in self.replays:
+                # Replay stored replay
+                self.edit_widget.replay(self.replays[number])
+        else:
+            # Replaying last run
+            self.edit_widget.replay()