changeset 302:01c1682dc250

Mostly working selling equipment in buildings
author Neil Muller <drnlmuller@gmail.com>
date Sat, 05 Sep 2009 17:18:14 +0000
parents 8d6647c912b3
children e12d99215b74
files TODO gamelib/gameboard.py
diffstat 2 files changed, 29 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/TODO	Sat Sep 05 16:47:10 2009 +0000
+++ b/TODO	Sat Sep 05 17:18:14 2009 +0000
@@ -7,6 +7,7 @@
 * Py2app packaging (jerith)
 
 * Sell equipment from chickens in buildings (Neil)
+  - Display bug with multiple equipment to be resolved
 
 == POST PYWEEK ==
 
--- a/gamelib/gameboard.py	Sat Sep 05 16:47:10 2009 +0000
+++ b/gamelib/gameboard.py	Sat Sep 05 17:18:14 2009 +0000
@@ -550,7 +550,7 @@
             if chicken in self.tv.sprites:
                 self.tv.sprites.remove(chicken)
 
-    def open_dialog(self, widget, close_callback=None):
+    def open_dialog(self, widget, x=None, y=None, close_callback=None):
         """Open a dialog for the given widget. Add close button."""
         tbl = gui.Table()
 
@@ -569,7 +569,12 @@
         tbl.td(gui.Spacer(100, 0))
         tbl.td(close_button, align=1)
 
-        self.disp.open(tbl)
+        if x:
+            offset = (self.disp.rect.center[0] +  x,
+                    self.disp.rect.center[1] + y)
+        else:
+            offset = None
+        self.disp.open(tbl, pos=offset)
         return tbl
 
     def open_building_dialog(self, building, sell_callback=None):
@@ -742,17 +747,29 @@
         self.remove_building(building)
 
     def sell_equipment(self, tile_pos):
+        x, y = 0, 0
+        def do_sell(chicken):
+            if not chicken.equipment:
+                return
+            elif len(chicken.equipment) == 1:
+                item = chicken.equipment[0]
+                self.add_cash(item.sell_price())
+                chicken.unequip(item)
+            else:
+                self.open_equipment_dialog(chicken, x, y)
+            return False
+
         chicken = self.get_outside_chicken(tile_pos)
-        if chicken is None or not chicken.equipment:
-            return
-        if len(chicken.equipment) == 1:
-            item = chicken.equipment[0]
-            self.add_cash(item.sell_price())
-            chicken.unequip(item)
+        if chicken is not None:
+            do_sell(chicken)
         else:
-            self.open_equipment_dialog(chicken)
+            building = self.get_building(tile_pos)
+            if building is None:
+                return
+            x, y = 50, 0
+            self.open_building_dialog(building, do_sell)
 
-    def open_equipment_dialog(self, chicken):
+    def open_equipment_dialog(self, chicken, x, y):
         tbl = gui.Table()
 
         def sell_item(item, button):
@@ -772,7 +789,7 @@
             button.connect(gui.CLICK, sell_item, item, button)
             tbl.td(button, align=1, **kwargs)
 
-        dialog = self.open_dialog(tbl)
+        dialog = self.open_dialog(tbl, x=x, y=y)
 
     def event(self, e):
         if e.type == KEYDOWN and e.key in [K_UP, K_DOWN, K_LEFT, K_RIGHT]: