changeset 384:56a05ae56574

Initial manual implementation.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 28 Aug 2010 19:04:30 +0200
parents 30923e9408cd
children 9ec43ab504fd
files Resources/images/items/manual_p1.png Resources/images/items/manual_p2.png Resources/images/items/manual_p3.png Resources/images/items/manual_p4.png Resources/images/manual/manual_p1.png Resources/images/manual/manual_p2.png Resources/images/manual/manual_p3.png Resources/images/manual/manual_p4.png gamelib/gamescreen.py gamelib/scenes/machine.py gamelib/scenes/manual.py gamelib/state.py
diffstat 12 files changed, 115 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
Binary file Resources/images/items/manual_p1.png has changed
Binary file Resources/images/items/manual_p2.png has changed
Binary file Resources/images/items/manual_p3.png has changed
Binary file Resources/images/items/manual_p4.png has changed
Binary file Resources/images/manual/manual_p1.png has changed
Binary file Resources/images/manual/manual_p2.png has changed
Binary file Resources/images/manual/manual_p3.png has changed
Binary file Resources/images/manual/manual_p4.png has changed
--- a/gamelib/gamescreen.py	Sat Aug 28 18:59:51 2010 +0200
+++ b/gamelib/gamescreen.py	Sat Aug 28 19:04:30 2010 +0200
@@ -35,14 +35,14 @@
         surface.blit(item_image, rect, None, BLEND_ADD)
 
     def click_item(self, item_no, event):
+        item = self.state.inventory[item_no]
         if self.item_is_selected(item_no):
             self.unselect()
+        elif self.state.tool or hasattr(item, 'interact_without'):
+            result = item.interact(self.state.tool, self.state)
+            handle_result(result, self.state_widget)
         else:
-            if self.state.tool:
-                result = self.state.inventory[item_no].interact(self.state.tool, self.state)
-                handle_result(result, self.state_widget)
-            else:
-                self.state.set_tool(self.state.inventory[item_no])
+            self.state.set_tool(self.state.inventory[item_no])
 
     def item_is_selected(self, item_no):
         return self.state.tool is self.state.inventory[item_no]
@@ -104,6 +104,7 @@
             self._mouse_move(mouse.get_pos())
 
     def show_detail(self, detail):
+        self.clear_detail()
         w, h = self.state.set_current_detail(detail)
         self.detail.set_image_rect(Rect(0, 0, w, h))
         self.add_centered(self.detail)
@@ -111,9 +112,10 @@
 
     def clear_detail(self):
         """Hide the detail view"""
-        self.remove(self.detail)
-        self.state.do_leave_detail()
-        self.state.set_current_detail(None)
+        if self.state.current_detail is not None:
+            self.remove(self.detail)
+            self.state.do_leave_detail()
+            self.state.set_current_detail(None)
 
 
 class DetailWindow(Widget):
--- a/gamelib/scenes/machine.py	Sat Aug 28 18:59:51 2010 +0200
+++ b/gamelib/scenes/machine.py	Sat Aug 28 19:04:30 2010 +0200
@@ -285,7 +285,10 @@
     "A ship instruction manual."
 
     INVENTORY_IMAGE = "manual.png"
-    CURSOR = CursorSprite('traingle.png', 23, 1) # TODO: replace with manual_cursor.png
+    CURSOR = None
+
+    def interact_without(self, state):
+        return Result(detail_view='manual_detail')
 
 
 SCENES = [Machine]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gamelib/scenes/manual.py	Sat Aug 28 19:04:30 2010 +0200
@@ -0,0 +1,98 @@
+"""The inside of the maintenance manual."""
+
+import random
+
+from albow.music import change_playlist, get_music, PlayList
+from albow.resource import get_image
+
+from gamelib.cursor import CursorSprite
+from gamelib.state import Scene, Item, Thing, Result
+from gamelib.sound import get_current_playlist
+
+from gamelib.scenes.game_constants import PLAYER_ID
+from gamelib.scenes.scene_widgets import (Door, InteractText, InteractNoImage,
+                                          InteractRectUnion, InteractImage,
+                                          InteractAnimated, GenericDescThing,
+                                          BaseCamera, make_jim_dialog)
+
+
+# classes related the computer detail
+
+
+class PagePrior(Thing):
+    """Prior page in the manual"""
+
+    NAME = 'manual.page_prior'
+
+    INTERACTS = {
+            'up' : InteractNoImage(594, 82, 30, 58)
+            }
+    INITIAL = 'up'
+
+    def is_interactive(self):
+        page = self.state.current_detail.get_data('page')
+        return page > 0
+
+    def interact_without(self):
+        page = self.state.current_detail.get_data('page')
+        self.state.current_detail.set_data('page', page - 1)
+
+
+class PageNext(Thing):
+    """Next page in the manual"""
+
+    NAME = 'manual.page_next'
+
+    INTERACTS = {
+            'down' : InteractNoImage(594, 293, 30, 58)
+            }
+    INITIAL = 'down'
+
+    def is_interactive(self):
+        page = self.state.current_detail.get_data('page')
+        return (page + 1) < self.current_detail.get_data('max page')
+
+    def interact_without(self):
+        page = self.state.current_detail.get_data('page')
+        self.state.current_detail.set_data('page', page + 1)
+
+
+class ManualDetail(Scene):
+
+    FOLDER = 'manual'
+    NAME = 'manual_detail'
+
+    SIZE = (640, 400)
+
+    PAGES = ['manual_p1.png', 'manual_p2.png',
+             'manual_p3.png', 'manual_p4.png']
+
+    BACKGROUND = PAGES[0]
+
+    INITIAL_DATA = {
+            'page' : 0,
+            'max page' : len(PAGES),
+    }
+
+    def __init__(self, state):
+        super(ManualDetail, self).__init__(state)
+
+        self.add_thing(PagePrior())
+        self.add_thing(PageNext())
+        self._scene_playlist = None
+        self._pages = [get_image(self.FOLDER, x) for x in self.PAGES]
+
+    def enter(self):
+        self._scene_playlist = get_current_playlist()
+        change_playlist(None)
+
+    def leave(self):
+        change_playlist(self._scene_playlist)
+
+    def draw_background(self, surface):
+        self._background = self._pages[self.get_data('page')]
+        super(ManualDetail, self).draw_background(surface)
+
+
+SCENES = []
+DETAIL_VIEWS = [ManualDetail]
--- a/gamelib/state.py	Sat Aug 28 18:59:51 2010 +0200
+++ b/gamelib/state.py	Sat Aug 28 19:04:30 2010 +0200
@@ -58,6 +58,7 @@
     state.load_scenes("machine")
     state.load_scenes("crew_quarters")
     state.load_scenes("map")
+    state.load_scenes("manual")
     initial_scene = "cryo" if DEBUG_SCENE is None else DEBUG_SCENE
     state.set_current_scene(initial_scene)
     state.set_do_enter_leave()
@@ -504,6 +505,8 @@
         return self.inventory_image
 
     def interact(self, tool, state):
+        if tool is None:
+            return self.interact_without(state)
         handler = getattr(self, 'interact_with_' + tool.name, None)
         inverse_handler = getattr(tool, 'interact_with_' + self.tool_name, None)
         if handler is not None: