# HG changeset patch # User Jeremy Thurgood # Date 1378139463 -7200 # Node ID f36a7075d9a0b14c0c9a12d557b8eefc718d534a # Parent d1f543ff080536990358b52e8af77ee64e5cdf8b Two switch puzzle! diff -r d1f543ff0805 -r f36a7075d9a0 nagslang/game_object.py --- 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 diff -r d1f543ff0805 -r f36a7075d9a0 nagslang/screens/area.py --- 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))