# HG changeset patch # User Simon Cross # Date 1328974737 -7200 # Node ID 4e9178215e7509d81b5ab116a464cb5ed6177580 # Parent 4117d7b201a4affdba453c8e2206e46e4245dceb Introduce .setup() for GameDeveloperGizmos. diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/bridge.py --- a/gamelib/scenes/bridge.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/bridge.py Sat Feb 11 17:38:57 2012 +0200 @@ -40,8 +40,7 @@ 'ai panel': 'closed', # closed, open, broken } - def __init__(self, state): - super(Bridge, self).__init__(state) + def setup(self): self.background_playlist = None self.add_item(Superconductor('superconductor')) self.add_item(Stethoscope('stethoscope')) @@ -265,8 +264,7 @@ class BlinkingLights(Thing): - def __init__(self): - super(BlinkingLights, self).__init__() + def setup(self): self.description = None def is_interactive(self, tool=None): @@ -372,8 +370,7 @@ BACKGROUND = 'chair_detail.png' NAME = 'chair_detail' - def __init__(self, state): - super(ChairDetail, self).__init__(state) + def setup(self): self.add_thing(SuperconductorThing()) @@ -573,9 +570,7 @@ 'max page': len(LOGS), } - def __init__(self, state): - super(BridgeCompDetail, self).__init__(state) - + def setup(self): self.add_thing(LogTab()) self.add_thing(AlertTab()) self.add_thing(NavTab()) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/crew_quarters.py --- a/gamelib/scenes/crew_quarters.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/crew_quarters.py Sat Feb 11 17:38:57 2012 +0200 @@ -16,8 +16,7 @@ OFFSET = (0, -50) - def __init__(self, state): - super(CrewQuarters, self).__init__(state) + def setup(self): self.add_thing(ToMap()) self.add_thing(Safe()) self.add_thing(FishbowlThing()) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/cryo.py --- a/gamelib/scenes/cryo.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/cryo.py Sat Feb 11 17:38:57 2012 +0200 @@ -34,8 +34,7 @@ 'silent.ogg', ] - def __init__(self, state): - super(Cryo, self).__init__(state) + def setup(self): self.add_item(TitaniumLeg("titanium_leg")) self.add_thing(CryoUnitAlpha()) self.add_thing(CryoRoomDoor()) @@ -509,8 +508,7 @@ BACKGROUND = "cryo_unit_detail.png" NAME = "cryo_detail" - def __init__(self, state): - super(CryoUnitWithCorpse, self).__init__(state) + def setup(self): self.add_thing(TitaniumLegThing()) self.add_thing(PlaqueThing()) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/engine.py --- a/gamelib/scenes/engine.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/engine.py Sat Feb 11 17:38:57 2012 +0200 @@ -21,8 +21,7 @@ 'greet': True, } - def __init__(self, state): - super(Engine, self).__init__(state) + def setup(self): self.add_item(CanOpener('canopener')) self.add_thing(CanOpenerThing()) self.add_thing(SuperconductorSocket()) @@ -537,9 +536,7 @@ ALERT_OFFSET = (16, 100) ALERT_SPACING = 4 - def __init__(self, state): - super(EngineCompDetail, self).__init__(state) - + def setup(self): self._alert_messages = {} for key, name in self.ALERTS.iteritems(): self._alert_messages[key] = get_image(self.FOLDER, name) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/machine.py --- a/gamelib/scenes/machine.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/machine.py Sat Feb 11 17:38:57 2012 +0200 @@ -13,8 +13,7 @@ FOLDER = "machine" BACKGROUND = "machine_room.png" - def __init__(self, state): - super(Machine, self).__init__(state) + def setup(self): self.add_thing(ToMap()) self.add_thing(LaserWelderSlot()) self.add_thing(LaserWelderButton()) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/manual.py --- a/gamelib/scenes/manual.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/manual.py Sat Feb 11 17:38:57 2012 +0200 @@ -105,9 +105,7 @@ BACKGROUND = 'manual_detail.png' - def __init__(self, state): - super(ManualDetail, self).__init__(state) - + def setup(self): self.add_thing(ManualPage()) self.add_thing(PagePrior()) self.add_thing(PageNext()) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/map.py --- a/gamelib/scenes/map.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/map.py Sat Feb 11 17:38:57 2012 +0200 @@ -23,8 +23,7 @@ 'implant': True, } - def __init__(self, state): - super(Map, self).__init__(state) + def setup(self): self.add_thing(ToCryo()) self.add_thing(ToBridge()) self.add_thing(ToMess()) diff -r 4117d7b201a4 -r 4e9178215e75 gamelib/scenes/mess.py --- a/gamelib/scenes/mess.py Sat Feb 11 17:34:23 2012 +0200 +++ b/gamelib/scenes/mess.py Sat Feb 11 17:38:57 2012 +0200 @@ -21,8 +21,7 @@ 'life support status': 'broken', # broken, replaced, fixed } - def __init__(self, state): - super(Mess, self).__init__(state) + def setup(self): self.add_thing(CansOnShelf()) self.add_thing(Tubes()) self.add_thing(ToMap()) diff -r 4117d7b201a4 -r 4e9178215e75 pyntnclick/state.py --- a/pyntnclick/state.py Sat Feb 11 17:34:23 2012 +0200 +++ b/pyntnclick/state.py Sat Feb 11 17:38:57 2012 +0200 @@ -92,14 +92,16 @@ self.debug_rects = value def add_scene(self, scene): + scene.set_state(self) self.scenes[scene.name] = scene def add_detail_view(self, detail_view): + detail_view.set_state(self) self.detail_views[detail_view.name] = detail_view def add_item(self, item): + item.set_state(self) self.items[item.name] = item - item.set_state(self) def load_scenes(self, modname): mod = __import__("gamelib.scenes.%s" % (modname,), fromlist=[modname]) @@ -198,12 +200,39 @@ self.do_check = self.gd.constants.leave -class StatefulGizmo(object): +class GameDeveloperGizmo(object): + """Base class for objects game developers see.""" + + def __init__(self): + """Set """ + self.state = None + self.gd = None + self.resource = None + self.sound = None + + def set_state(self, state): + self.state = state + self.gd = state.gd + self.resource = self.gd.resource + self.sound = self.gd.sound + self.setup() + + def setup(self): + """Game developers should override this to do their setup. + + It will be called after all the useful state functions have been + set. + """ + pass + + +class StatefulGizmo(GameDeveloperGizmo): # initial data (optional, defaults to none) INITIAL_DATA = None def __init__(self): + GameDeveloperGizmo.__init__(self) self.data = {} if self.INITIAL_DATA: # deep copy of INITIAL_DATA allows lists, sets and @@ -236,10 +265,6 @@ StatefulGizmo.__init__(self) # scene name self.name = self.NAME if self.NAME is not None else self.FOLDER - # link back to state object - self.state = state - self.sound = state.gd.sound - self.resource = state.gd.resource # map of thing names -> Thing objects self.things = {} self._background = None @@ -249,6 +274,7 @@ def add_thing(self, thing): self.things[thing.name] = thing + thing.set_state(self.state) thing.set_scene(self) def remove_thing(self, thing): @@ -280,7 +306,7 @@ def _cache_background(self): if self.BACKGROUND and not self._background: - self._background = self.state.gd.resource.get_image( + self._background = self.resource.get_image( (self.FOLDER, self.BACKGROUND)) def draw_background(self, surface): @@ -405,7 +431,6 @@ self.interacts = self.INTERACTS # these are set by set_scene self.scene = None - self.state = None self.current_interact = None self.rect = None self.orig_rect = None @@ -477,7 +502,7 @@ rect.inflate(1, 1), 1) -class Item(InteractiveMixin): +class Item(GameDeveloperGizmo, InteractiveMixin): """Base class for inventory items.""" # image for inventory @@ -493,7 +518,7 @@ CURSOR = None def __init__(self, name=None): - self.state = None + GameDeveloperGizmo.__init__(self) self.name = self.NAME if name is not None: self.name = name @@ -504,13 +529,9 @@ def _cache_inventory_image(self): if not self.inventory_image: - self.inventory_image = self.state.gd.resource.get_image( + self.inventory_image = self.resource.get_image( ('items', self.INVENTORY_IMAGE)) - def set_state(self, state): - assert self.state is None - self.state = state - def get_inventory_image(self): self._cache_inventory_image() return self.inventory_image