# HG changeset patch # User Neil Muller # Date 1282730588 -7200 # Node ID 0db92b3b5833f5e2156ac8c000108c2d753ece72 # Parent 9b3bba5e65f3b0852fec3c2e4410d5691dda7cae Add inventory interactions diff -r 9b3bba5e65f3 -r 0db92b3b5833 gamelib/gamescreen.py --- a/gamelib/gamescreen.py Wed Aug 25 11:19:30 2010 +0200 +++ b/gamelib/gamescreen.py Wed Aug 25 12:03:08 2010 +0200 @@ -22,9 +22,10 @@ sel_color = Color("yellow") sel_width = 2 - def __init__(self, state): + def __init__(self, state, scene_widget): PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6, scrolling=True) self.state = state + self.scene_widget = scene_widget def num_items(self): return len(self.state.inventory) @@ -37,7 +38,12 @@ if self.item_is_selected(item_no): self.unselect() else: - self.state.set_tool(self.state.inventory[item_no]) + if self.state.tool: + result = self.state.inventory[item_no].interact(self.state.tool) + if result: + result.process(self.scene_widget) + else: + 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] @@ -164,7 +170,7 @@ self.handbutton = HandButton(action=self.hand_pressed) - self.inventory = InventoryView(self.state) + self.inventory = InventoryView(self.state, self.state_widget) self.toolbar = ToolBar([ self.menubutton, diff -r 9b3bba5e65f3 -r 0db92b3b5833 gamelib/scenes/cryo.py --- a/gamelib/scenes/cryo.py Wed Aug 25 11:19:30 2010 +0200 +++ b/gamelib/scenes/cryo.py Wed Aug 25 12:03:08 2010 +0200 @@ -84,6 +84,9 @@ INVENTORY_IMAGE = "titanium_femur.png" CURSOR = CursorSprite('titanium_femur_cursor.png', 47, 3) + def interact_with_full_can(self, tool): + return Result("You club the can with the femur. It doesn't help") + class CryoUnitAlpha(Thing): "Cryo unit containing titanium leg." diff -r 9b3bba5e65f3 -r 0db92b3b5833 gamelib/state.py --- a/gamelib/state.py Wed Aug 25 11:19:30 2010 +0200 +++ b/gamelib/state.py Wed Aug 25 12:03:08 2010 +0200 @@ -551,3 +551,16 @@ def get_inventory_image(self): return self.inventory_image + def interact(self, tool): + handler = getattr(self, 'interact_with_' + tool.name, None) + inverse_handler = getattr(tool, 'interact_with_' + self.name, None) + if handler is not None: + return handler(tool) + elif inverse_handler is not None: + return inverse_handler(self) + else: + return self.interact_default(tool) + + def interact_default(self, tool): + return Result("That doesn't do anything useful") +