changeset 255:2bd28030e8e4

Hook up parts of the bridge computer system
author Neil Muller <neil@dip.sun.ac.za>
date Fri, 27 Aug 2010 18:13:12 +0200
parents ca0c2875ad8f
children 5213ee33ec1b
files Resources/images/bridge/comp_detail_1.png Resources/images/bridge/comp_log_1.png Resources/images/bridge/comp_log_2.png Resources/images/bridge/comp_log_end.png gamelib/scenes/bridge.py
diffstat 5 files changed, 121 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
Binary file Resources/images/bridge/comp_detail_1.png has changed
Binary file Resources/images/bridge/comp_log_1.png has changed
Binary file Resources/images/bridge/comp_log_2.png has changed
Binary file Resources/images/bridge/comp_log_end.png has changed
--- a/gamelib/scenes/bridge.py	Fri Aug 27 17:35:15 2010 +0200
+++ b/gamelib/scenes/bridge.py	Fri Aug 27 18:13:12 2010 +0200
@@ -3,6 +3,7 @@
 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, InteractText, \
@@ -207,17 +208,135 @@
         super(ChairDetail, self).__init__(state)
         self.add_thing(SuperconductorThing())
 
+
+# classes related the computer detail
+
+
+class LogTab(Thing):
+    """Tab for log screen"""
+
+    NAME = 'bridge_comp.screen'
+
+    INTERACTS = {
+            'log tab' : InteractNoImage(100, 53, 94, 37)
+            }
+    INITIAL = 'log tab'
+    COMPUTER = 'bridge_comp_detail'
+
+    def is_interactive(self):
+        return self.state.detail_views[self.COMPUTER].get_data('tab') == 'alert'
+
+    def interact_without(self):
+        if not self.is_interactive():
+            return
+        self.state.detail_views[self.COMPUTER].set_data('tab', 'log')
+
+
+class AlertTab(Thing):
+    """Tab for alert screen"""
+
+    NAME = 'bridge_comp.alert_tab'
+
+    INTERACTS = {
+            'alert tab' : InteractNoImage(12, 53, 88, 37)
+            }
+    INITIAL = 'alert tab'
+    COMPUTER = 'bridge_comp_detail'
+
+    def is_interactive(self):
+        return self.state.detail_views[self.COMPUTER].get_data('tab') == 'log'
+
+    def interact_without(self):
+        if not self.is_interactive():
+            return
+        self.state.detail_views[self.COMPUTER].set_data('tab', 'alert')
+
+
+class CompUpButton(Thing):
+    """Up button on log screen"""
+
+    NAME = 'bridge_comp.up_button'
+
+    INTERACTS = {
+            'up' : InteractNoImage(594, 82, 30, 58)
+            }
+    INITIAL = 'up'
+    COMPUTER = 'bridge_comp_detail'
+
+    def is_interactive(self):
+        tab = self.state.detail_views[self.COMPUTER].get_data('tab')
+        page = self.state.detail_views[self.COMPUTER].get_data('log page')
+        return tab == 'log' and page > 0
+
+    def interact_without(self):
+        if not self.is_interactive():
+            return
+        page = self.state.detail_views[self.COMPUTER].get_data('log page')
+        self.state.detail_views[self.COMPUTER].set_data('log page', page-1)
+
+
+class CompDownButton(Thing):
+    """Down button on log screen"""
+
+    NAME = 'bridge_comp.down_button'
+
+    INTERACTS = {
+            'down' : InteractNoImage(594, 293, 30, 58)
+            }
+    INITIAL = 'down'
+    COMPUTER = 'bridge_comp_detail'
+
+    def is_interactive(self):
+        tab = self.state.detail_views[self.COMPUTER].get_data('tab')
+        page = self.state.detail_views[self.COMPUTER].get_data('log page')
+        max_page = self.state.detail_views[self.COMPUTER].get_data('max page')
+        return tab == 'log' and (page + 1) < max_page
+
+    def interact_without(self):
+        if not self.is_interactive():
+            return
+        page = self.state.detail_views[self.COMPUTER].get_data('log page')
+        self.state.detail_views[self.COMPUTER].set_data('log page', page+1)
+
+
 class BridgeCompDetail(Scene):
 
     FOLDER = 'bridge'
-    BACKGROUND = 'comp_detail_1.png'
     NAME = 'bridge_comp_detail'
 
-    SIZE = (300, 300)
+    SIZE = (640, 400)
+
+    ALERT = 'comp_detail_1.png'
+
+    LOGS = ['comp_log_1.png', 'comp_log_2.png',
+            'comp_log_end.png']
+
+    BACKGROUND = ALERT
+
+
+    INITIAL_DATA = {
+            'tab' : 'alert',
+            'log page' : 0,
+            'max page' : len(LOGS),
+    }
 
     def __init__(self, state):
         super(BridgeCompDetail, self).__init__(state)
 
+        self.add_thing(LogTab())
+        self.add_thing(AlertTab())
+        self.add_thing(CompUpButton())
+        self.add_thing(CompDownButton())
+        self._alert = get_image(self.FOLDER, self.ALERT)
+        self._logs = [get_image(self.FOLDER, x) for x in self.LOGS]
+
+    def draw_background(self, surface):
+        if self.get_data('tab') == 'alert':
+            self._background = self._alert
+        else:
+            self._background = self._logs[self.get_data('log page')]
+        super(BridgeCompDetail, self).draw_background(surface)
+
 
 SCENES = [Bridge]
 DETAIL_VIEWS = [ChairDetail, BridgeCompDetail]