# HG changeset patch # User Jeremy Thurgood # Date 1283015070 -7200 # Node ID 56a05ae56574347da34e8afb8383a8abdd789c73 # Parent 30923e9408cdf9d2a991fa0f054869cc29eeb9ad Initial manual implementation. diff -r 30923e9408cd -r 56a05ae56574 Resources/images/items/manual_p1.png Binary file Resources/images/items/manual_p1.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/items/manual_p2.png Binary file Resources/images/items/manual_p2.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/items/manual_p3.png Binary file Resources/images/items/manual_p3.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/items/manual_p4.png Binary file Resources/images/items/manual_p4.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/manual/manual_p1.png Binary file Resources/images/manual/manual_p1.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/manual/manual_p2.png Binary file Resources/images/manual/manual_p2.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/manual/manual_p3.png Binary file Resources/images/manual/manual_p3.png has changed diff -r 30923e9408cd -r 56a05ae56574 Resources/images/manual/manual_p4.png Binary file Resources/images/manual/manual_p4.png has changed diff -r 30923e9408cd -r 56a05ae56574 gamelib/gamescreen.py --- 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): diff -r 30923e9408cd -r 56a05ae56574 gamelib/scenes/machine.py --- 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] diff -r 30923e9408cd -r 56a05ae56574 gamelib/scenes/manual.py --- /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] diff -r 30923e9408cd -r 56a05ae56574 gamelib/state.py --- 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: