changeset 140:f36a7075d9a0

Two switch puzzle!
author Jeremy Thurgood <firxen@gmail.com>
date Mon, 02 Sep 2013 18:31:03 +0200
parents d1f543ff0805
children 076448ba0582
files nagslang/game_object.py nagslang/screens/area.py
diffstat 2 files changed, 19 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/game_object.py	Mon Sep 02 18:27:58 2013 +0200
+++ b/nagslang/game_object.py	Mon Sep 02 18:31:03 2013 +0200
@@ -53,6 +53,17 @@
         return self.glue.get_state_of(self._state_source)
 
 
+class StateLogicalAndPuzzler(Puzzler):
+    def __init__(self, *state_sources):
+        self._state_sources = state_sources
+
+    def get_state(self):
+        for state_source in self._state_sources:
+            if not self.glue.get_state_of(state_source):
+                return False
+        return True
+
+
 class Physicser(object):
     def __init__(self, space):
         self._space = space
--- a/nagslang/screens/area.py	Mon Sep 02 18:27:58 2013 +0200
+++ b/nagslang/screens/area.py	Mon Sep 02 18:31:03 2013 +0200
@@ -6,7 +6,8 @@
 
 from nagslang.constants import ZORDER_HIGH
 from nagslang.events import ScreenChange
-from nagslang.game_object import FloorSwitch, FloorLight, PuzzleGlue, Box
+from nagslang.game_object import (
+    FloorSwitch, FloorLight, PuzzleGlue, Box, StateLogicalAndPuzzler)
 from nagslang.level import Level
 from nagslang.protagonist import Protagonist
 from nagslang.screens.base import Screen
@@ -77,13 +78,18 @@
         # TODO: Put this in a level instead
         glue = PuzzleGlue()
         switch = FloorSwitch(self.space, (300, 400))
+        switch2 = FloorSwitch(self.space, (300, 600))
         light = FloorLight(self.space, (300, 500), 'switch')
-        light2 = FloorLight(self.space, (250, 500), 'switch')
+        light2 = FloorLight(self.space, (250, 500), 'both_switches')
         light2.zorder = ZORDER_HIGH
         glue.add_component('switch', switch.puzzler)
+        glue.add_component('switch2', switch2.puzzler)
         glue.add_component('light', light.puzzler)
         glue.add_component('light2', light2.puzzler)
+        glue.add_component(
+            'both_switches', StateLogicalAndPuzzler('switch', 'switch2'))
         self._drawables.add(switch)
+        self._drawables.add(switch2)
         self._drawables.add(light)
         self._drawables.add(light2)
         box = Box(self.space, (250, 350))