diff pyntnclick/gamescreen.py @ 792:bdaffaa8b6bf pyntnclick

Loading and saving! (Plus a bunch of other stuff to make it possible.)
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 27 Jan 2013 12:43:28 +0200
parents 43b49f1de828
children bcc9277a23e6
line wrap: on
line diff
--- a/pyntnclick/gamescreen.py	Sat Jan 26 20:29:58 2013 +0200
+++ b/pyntnclick/gamescreen.py	Sun Jan 27 12:43:28 2013 +0200
@@ -123,7 +123,8 @@
 
     @property
     def slot_items(self):
-        return self.game.inventory()[self.inv_offset:][:len(self.slots)]
+        item_names = self.game.inventory()[self.inv_offset:][:len(self.slots)]
+        return [self.game.items[name] for name in item_names]
 
     def mouse_down(self, event, widget):
         if event.button != 1:
@@ -257,11 +258,24 @@
         getattr(self, 'game_event_%s' % event_name, lambda d: None)(data)
 
     def game_event_restart(self, data):
-        self.reset_game(self.create_initial_state())
+        self.reset_game()
+
+    def get_save_dir(self):
+        return self.gd.get_default_save_location()
+
+    def game_event_load(self, data):
+        state = self.gd.game_state_class().load_game(
+            self.get_save_dir(), 'savegame')
+        # TODO: Handle this better.
+        if state is not None:
+            self.reset_game(state)
+
+    def game_event_save(self, data):
+        self.game.data.save_game(self.get_save_dir(), 'savegame')
 
     def reset_game(self, game_state=None):
         self._clear_all()
-        self.game = self.create_initial_state()
+        self.game = self.create_initial_state(game_state)
 
         self.screen_modal = self.container.add(
             ModalStackContainer(self.container.rect.copy(), self.gd))
@@ -294,9 +308,8 @@
         for scene_widget in reversed(self.scene_modal.children[:]):
             self.scene_modal.remove(scene_widget)
             scene_widget.scene.leave()
-        scene = self.game.scenes[scene_name]
-        self.game.current_scene = scene
-        self._add_scene(scene)
+        self.game.data.set_current_scene(scene_name)
+        self._add_scene(self.game.scenes[scene_name])
 
     def show_detail(self, detail_name):
         self._add_scene(self.game.detail_views[detail_name], True)