annotate gamelib/toolbar.py @ 474:a50b53983389

Allow moving multiple animals more easily
author Neil Muller <drnlmuller@gmail.com>
date Wed, 25 Nov 2009 16:42:28 +0000
parents 67574723427e
children cab751de93cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
1 import pygame
450
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
2 import xmlrpclib
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
3 from pgu import gui
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
5 import icons
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
6 import constants
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
7 import buildings
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
8 import equipment
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
9 import cursors
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
10 import engine
466
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
11 import version
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
12
472
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
13 class RinkhalsTool(gui.Tool):
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
14 def __init__(self, group, label, value, func, **params):
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
15 gui.Tool.__init__(self, group, label, value, **params)
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
16 self.func = func
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
17
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
18 def click(self):
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
19 gui.Tool.click(self)
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
20 if not self.func():
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
21 # Don't hightlight if the function says so
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
22 self.group.value = None
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
23
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
24 class OpaqueLabel(gui.Label):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
25 def __init__(self, value, **params):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
26 gui.Label.__init__(self, value, **params)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
27 if 'width' in params:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
28 self._width = params['width']
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
29 if 'height' in params:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
30 self._height = params['height']
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
31 self._set_size()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
32
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
33 def _set_size(self):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
34 width, height = self.font.size(self.value)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
35 width = getattr(self, '_width', width)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
36 height = getattr(self, '_height', height)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
37 self.style.width, self.style.height = width, height
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
38
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
39 def paint(self, s):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
40 s.fill(self.style.background)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
41 if self.style.align > 0:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
42 r = s.get_rect()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
43 w, _ = self.font.size(self.value)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
44 s = s.subsurface(r.move((r.w-w, 0)).clip(r))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
45 gui.Label.paint(self, s)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
46
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
47 def update_value(self, value):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
48 self.value = value
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
49 self._set_size()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
50 self.repaint()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
51
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
52 def mklabel(text="", **params):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
53 params.setdefault('color', constants.FG_COLOR)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
54 params.setdefault('width', constants.TOOLBAR_WIDTH/2)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
55 return OpaqueLabel(text, **params)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
56
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
57 def mkcountupdate(counter):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
58 def update_counter(self, value):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
59 getattr(self, counter).update_value("%s " % value)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
60 self.repaint()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
61 return update_counter
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
62
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
63 class BaseToolBar(gui.Table):
434
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
64 def __init__(self, gameboard, **params):
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
65 gui.Table.__init__(self, **params)
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
66 self.group = gui.Group(name='base_toolbar', value=None)
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
67 self._next_tool_value = 0
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
68 self.gameboard = gameboard
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
69 self.cash_counter = mklabel(align=1)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
70 self.wood_counter = mklabel(align=1)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
71 self.chicken_counter = mklabel(align=1)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
72 self.egg_counter = mklabel(align=1)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
73 self.day_counter = mklabel(align=1)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
74 self.killed_foxes = mklabel(align=1)
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
75 self.add_labels()
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
76
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
77 def add_labels(self):
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
78 self.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
79 self.td(gui.Spacer(self.rect.w/2, 0))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
80 self.td(gui.Spacer(self.rect.w/2, 0))
459
e9393970b5f6 picture icons for all counters
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 458
diff changeset
81 self.add_counter(icons.DAY_ICON, self.day_counter)
e9393970b5f6 picture icons for all counters
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 458
diff changeset
82 self.add_counter(icons.GROATS_ICON, self.cash_counter)
e9393970b5f6 picture icons for all counters
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 458
diff changeset
83 self.add_counter(icons.WOOD_ICON, self.wood_counter)
e9393970b5f6 picture icons for all counters
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 458
diff changeset
84 self.add_counter(icons.EGG_ICON, self.egg_counter)
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
85 self.add_counter(icons.CHKN_ICON, self.chicken_counter)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
86 self.add_counter(icons.KILLED_FOX, self.killed_foxes)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
87 self.add_spacer(5)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
88
434
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
89 def start_night(self):
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
90 self.clear_tool()
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
91 self._set_all_disabled(True)
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
92 self.fin_tool.widget = gui.basic.Label('Fast Forward')
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
93 self.fin_tool.resize()
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
94 self.fin_tool.disabled = False # Can always select this
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
95 self.fin_tool.focusable = True # Can always select this
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
96
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
97 def start_day(self):
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
98 self.clear_tool()
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
99 self._set_all_disabled(False)
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
100 self.fin_tool.widget = gui.basic.Label('Finished Day')
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
101 self.fin_tool.resize()
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
102
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
103 def _set_all_disabled(self, state):
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
104 """Sets the disabled flag on all the buttons in the toolbar"""
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
105 for td in self.widgets:
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
106 for widget in td.widgets:
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
107 if hasattr(widget, 'group'): # Tool
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
108 widget.disabled = state
f2a55e5e24db Disable non-selectable toolbar widgets at night
Neil Muller <drnlmuller@gmail.com>
parents: 433
diff changeset
109 widget.focusable = not state
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
110
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
111 def show_prices(self):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
112 """Popup dialog of prices"""
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
113 def make_box(text):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
114 style = {
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
115 'border' : 1
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
116 }
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
117 word = gui.Label(text, style=style)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
118 return word
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
119
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
120 def fix_widths(doc):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
121 """Loop through all the widgets in the doc, and set the
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
122 width of the labels to max + 10"""
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
123 # We need to do this because of possible font issues
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
124 max_width = 0
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
125 for thing in doc.widgets:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
126 if hasattr(thing, 'style'):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
127 # A label
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
128 if thing.style.width > max_width:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
129 max_width = thing.style.width
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
130 for thing in doc.widgets:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
131 if hasattr(thing, 'style'):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
132 thing.style.width = max_width + 10
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
133
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
134 tbl = gui.Table()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
135 tbl.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
136 doc = gui.Document(width=510)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
137 space = doc.style.font.size(" ")
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
138 for header in ['Item', 'Buy Price', 'Sell Price', 'Repair Price']:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
139 doc.add(make_box(header))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
140 doc.br(space[1])
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
141 for building in buildings.BUILDINGS:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
142 doc.add(make_box(building.NAME))
448
92e7a641b4a6 added units to price list
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 447
diff changeset
143 doc.add(make_box('%d planks' % building.BUY_PRICE))
92e7a641b4a6 added units to price list
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 447
diff changeset
144 doc.add(make_box('%d planks' % building.SELL_PRICE))
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
145 if building.BREAKABLE:
448
92e7a641b4a6 added units to price list
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 447
diff changeset
146 doc.add(make_box('%d planks' % building.REPAIR_PRICE))
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
147 else:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
148 doc.add(make_box('N/A'))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
149 doc.br(space[1])
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
150 for equip in equipment.EQUIPMENT:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
151 doc.add(make_box(equip.NAME))
448
92e7a641b4a6 added units to price list
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 447
diff changeset
152 doc.add(make_box('%d groats' % equip.BUY_PRICE))
92e7a641b4a6 added units to price list
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 447
diff changeset
153 doc.add(make_box('%d groats' % equip.SELL_PRICE))
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
154 doc.add(make_box('N/A'))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
155 doc.br(space[1])
461
279caa00f3fa exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 460
diff changeset
156 doc.add(make_box("5 planks"))
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
157 doc.add(make_box('%d groats' % self.gameboard.wood_buy_price))
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
158 doc.add(make_box('%d groats' % self.gameboard.wood_sell_price))
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
159 doc.add(make_box('N/A'))
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
160 doc.br(space[1])
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
161
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
162 fix_widths(doc)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
163 for word in "Damaged equipment or buildings will be sold for" \
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
164 " less than the sell price.".split():
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
165 doc.add(gui.Label(word))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
166 doc.space(space)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
167 close_button = gui.Button("Close")
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
168 tbl.td(doc)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
169 tbl.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
170 tbl.td(close_button, align=1)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
171 dialog = gui.Dialog(gui.Label('Price Reference'), tbl)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
172 close_button.connect(gui.CLICK, dialog.close)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
173 dialog.open()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
174
444
feb9b7a23ef2 Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents: 434
diff changeset
175 def save_game(self):
feb9b7a23ef2 Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents: 434
diff changeset
176 """Save game 'dialog'."""
446
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
177 dialog = gui.FileDialog("Save game ...", button_txt="Save")
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
178
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
179 def save():
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
180 if dialog.value is None:
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
181 return
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
182 data = self.gameboard.save_game()
466
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
183 params = (version.SAVE_GAME_VERSION, data)
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
184 xml = xmlrpclib.dumps(params, "foxassault")
450
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
185 try:
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
186 open(dialog.value, "wb").write(xml)
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
187 except Exception, e:
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
188 print "Failed to save game: %s" % (e,)
446
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
189
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
190 dialog.connect(gui.CHANGE, save)
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
191 dialog.open()
444
feb9b7a23ef2 Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents: 434
diff changeset
192
feb9b7a23ef2 Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents: 434
diff changeset
193 def load_game(self):
feb9b7a23ef2 Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents: 434
diff changeset
194 """Load game 'dialog'."""
446
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
195 dialog = gui.FileDialog("Load game ...", button_txt="Load")
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
196
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
197 def restore():
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
198 if dialog.value is None:
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
199 return
450
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
200 try:
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
201 xml = open(dialog.value, "rb").read()
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
202 params, methodname = xmlrpclib.loads(xml)
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
203 if methodname != "foxassault":
466
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
204 raise ValueError("File does not appear to be a "
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
205 "Fox Assault save game.")
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
206 save_version = params[0]
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
207 if save_version != version.SAVE_GAME_VERSION:
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
208 raise ValueError("Incompatible save game version.")
3d173ea43ad5 Add version number to saved games.
Simon Cross <hodgestar@gmail.com>
parents: 461
diff changeset
209 data = params[1]
450
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
210 except Exception, e:
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
211 "Failed to load game: %s" % (e,)
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
212 return
5d74d0e4a4cc Switch to XML (RPC) for save game encoding.
Simon Cross <hodgestar@gmail.com>
parents: 448
diff changeset
213
446
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
214 self.gameboard.restore_game(data)
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
215
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
216 dialog.connect(gui.CHANGE, restore)
0c523d384681 Basic load and save dialogs.
Simon Cross <hodgestar@gmail.com>
parents: 444
diff changeset
217 dialog.open()
444
feb9b7a23ef2 Support for saving and loading games (toolbar entries commented out for lack of space).
Simon Cross <hodgestar@gmail.com>
parents: 434
diff changeset
218
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
219 update_cash_counter = mkcountupdate('cash_counter')
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
220 update_wood_counter = mkcountupdate('wood_counter')
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
221 update_fox_counter = mkcountupdate('killed_foxes')
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
222 update_chicken_counter = mkcountupdate('chicken_counter')
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
223 update_egg_counter = mkcountupdate('egg_counter')
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
224 update_day_counter = mkcountupdate('day_counter')
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
225
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
226 def add_spacer(self, height):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
227 self.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
228 self.td(gui.Spacer(0, height), colspan=2)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
229
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
230 def add_heading(self, text):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
231 self.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
232 self.td(mklabel(text), colspan=2)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
233
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
234 def add_tool_button(self, text, tool, price=None, cursor=None):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
235 if price is not None:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
236 text = "%s (%s)" % (text, price)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
237 self.add_tool(text, lambda: self.gameboard.set_selected_tool(tool,
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
238 cursor))
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
239
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
240 def add_tool(self, text, func):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
241 label = gui.basic.Label(text)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
242 value = self._next_tool_value
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
243 self._next_tool_value += 1
472
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
244 tool = RinkhalsTool(self.group, label, value, func, width=self.rect.w,
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
245 style={"padding_left": 0})
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
246 #tool.connect(gui.CLICK, func)
433
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
247 self.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
248 self.td(tool, align=-1, colspan=2)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
249 return tool
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
250
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
251 def clear_tool(self):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
252 self.group.value = None
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
253 for item in self.group.widgets:
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
254 item.pcls = ""
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
255
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
256 def add_counter(self, icon, label):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
257 self.tr()
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
258 self.td(icon, width=self.rect.w/2)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
259 self.td(label, width=self.rect.w/2)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
260
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
261 def resize(self, width=None, height=None):
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
262 width, height = gui.Table.resize(self, width, height)
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
263 width = constants.TOOLBAR_WIDTH
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
264 return width, height
8643893635e7 Seperate toolbar and gameboard
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
265
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
266 class DefaultToolBar(BaseToolBar):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
267 def __init__(self, gameboard, **params):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
268 BaseToolBar.__init__(self, gameboard, **params)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
269 self.group = gui.Group(name='default_toolbar', value=None)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
270 self.make_toolbar()
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
271
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
272 def make_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
273 self.add_tool_button("Select chicken", constants.TOOL_SELECT_CHICKENS,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
274 None, cursors.cursors['select'])
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
275
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
276 self.add_spacer(5)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
277
458
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
278 self.add_tool('Equip chickens', self.add_equipment_toolbar)
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
279
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
280 self.add_tool_button("Move chickens", constants.TOOL_PLACE_ANIMALS,
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
281 None, cursors.cursors['select'])
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
282
454
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
283 self.add_tool('Sell stuff', self.add_sell_toolbar)
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
284
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
285 self.add_tool('Trade wood', self.add_wood_toolbar)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
286
458
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
287 self.add_spacer(5)
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
288
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
289 self.add_heading("Buildings")
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
290
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
291 self.add_tool('Buy building', self.add_building_toolbar)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
292
458
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
293 self.add_tool_button("Sell building", constants.TOOL_SELL_BUILDING,
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
294 None, cursors.cursors['sell'])
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
295
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
296 self.add_tool_button("Repair", constants.TOOL_REPAIR_BUILDING, None, cursors.cursors['repair'])
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
297
458
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
298 self.add_spacer(5)
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
299 self.add_heading("Help")
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
300 self.add_tool("Price Reference", self.show_prices)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
301
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
302 self.add_spacer(5)
458
7e4ea53d8b10 Reorder toolbar. Fix 'Finished Day' position
Neil Muller <drnlmuller@gmail.com>
parents: 454
diff changeset
303 self.add_heading("Game")
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
304 self.add_tool("Save Game", self.save_game)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
305 self.add_tool("Load Game", self.load_game)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
306
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
307 self.add_heading(" ")
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
308 ## Dear pgu, is there a better way to get the current height?
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
309 #_cur_width, cur_height = self.resize()
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
310 #self.add_spacer(570-cur_height)
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
311 self.fin_tool = self.add_tool("Finished Day", self.day_done)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
312
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
313 def add_building_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
314 self.gameboard.change_toolbar(BuildingToolBar(self.gameboard,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
315 width=self.style.width))
472
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
316 self.gameboard.unselect_all()
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
317
454
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
318 def add_sell_toolbar(self):
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
319 self.gameboard.change_toolbar(SellToolBar(self.gameboard,
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
320 width=self.style.width))
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
321
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
322 def add_wood_toolbar(self):
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
323 self.gameboard.change_toolbar(WoodToolBar(self.gameboard,
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
324 width=self.style.width))
472
67574723427e Partially working (but much less crashy) multiple select support
Neil Muller <drnlmuller@gmail.com>
parents: 466
diff changeset
325 self.gameboard.unselect_all()
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
326
447
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
327 def add_equipment_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
328 self.gameboard.change_toolbar(EquipmentToolBar(self.gameboard,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
329 width=self.style.width))
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
330
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
331 def day_done(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
332 if self.gameboard.day:
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
333 pygame.event.post(engine.START_NIGHT)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
334 else:
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
335 pygame.event.post(engine.FAST_FORWARD)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
336
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
337 class BuildingToolBar(BaseToolBar):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
338 def __init__(self, gameboard, **params):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
339 BaseToolBar.__init__(self, gameboard, **params)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
340 self.group = gui.Group(name='building_toolbar', value=None)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
341 self.make_toolbar()
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
342
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
343 def make_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
344 self.gameboard.set_cursor(cursors.cursors['arrow'], None)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
345 for building_cls in buildings.BUILDINGS:
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
346 self.add_tool_button(building_cls.NAME.title(), building_cls,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
347 None, cursors.cursors.get('build', None))
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
348 self.add_spacer(15)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
349 self.add_tool('Done', self.add_default_toolbar)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
350
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
351 def add_default_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
352 self.gameboard.change_toolbar(DefaultToolBar(self.gameboard,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
353 width=self.style.width))
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
354
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
355 class EquipmentToolBar(BaseToolBar):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
356 def __init__(self, gameboard, **params):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
357 BaseToolBar.__init__(self, gameboard, **params)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
358 self.group = gui.Group(name='building_toolbar', value=None)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
359 self.make_toolbar()
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
360
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
361 def make_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
362 self.gameboard.set_cursor(cursors.cursors['arrow'], None)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
363 for equipment_cls in equipment.EQUIPMENT:
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
364 self.add_tool_button(equipment_cls.NAME.title(),
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
365 equipment_cls,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
366 equipment_cls.BUY_PRICE,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
367 cursors.cursors.get('buy', None))
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
368 self.add_spacer(15)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
369 self.add_tool('Done', self.add_default_toolbar)
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
370
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
371 def add_default_toolbar(self):
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
372 self.gameboard.change_toolbar(DefaultToolBar(self.gameboard,
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
373 width=self.style.width))
f04a2490c35f The sub-toolbar rewrite, the finally not crashing version
Neil Muller <drnlmuller@gmail.com>
parents: 446
diff changeset
374
454
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
375 class SellToolBar(BaseToolBar):
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
376 def __init__(self, gameboard, **params):
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
377 BaseToolBar.__init__(self, gameboard, **params)
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
378 self.group = gui.Group(name='building_toolbar', value=None)
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
379 self.make_toolbar()
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
380
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
381 def make_toolbar(self):
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
382 self.gameboard.set_cursor(cursors.cursors['arrow'], None)
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
383
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
384 self.add_heading("Sell ...")
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
385 self.add_tool_button("Chicken", constants.TOOL_SELL_CHICKEN,
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
386 self.gameboard.level.sell_price_chicken, cursors.cursors['sell'])
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
387 self.add_tool_button("Egg", constants.TOOL_SELL_EGG,
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
388 self.gameboard.level.sell_price_egg, cursors.cursors['sell'])
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
389 self.add_tool_button("Equipment", constants.TOOL_SELL_EQUIPMENT,
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
390 None, cursors.cursors['sell'])
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
391 self.add_spacer(15)
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
392 self.add_tool('Done', self.add_default_toolbar)
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
393
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
394 def add_default_toolbar(self):
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
395 self.gameboard.change_toolbar(DefaultToolBar(self.gameboard,
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
396 width=self.style.width))
30e6d6097b12 Make selling things sub-toolbar
Neil Muller <drnlmuller@gmail.com>
parents: 450
diff changeset
397
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
398 class WoodToolBar(BaseToolBar):
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
399 def __init__(self, gameboard, **params):
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
400 BaseToolBar.__init__(self, gameboard, **params)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
401 self.group = gui.Group(name='building_toolbar', value=None)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
402 self.make_toolbar()
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
403
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
404 def make_toolbar(self):
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
405 self.gameboard.set_cursor(cursors.cursors['arrow'], None)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
406
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
407 self.add_heading("Trade...")
461
279caa00f3fa exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 460
diff changeset
408 self.add_tool("Buy 5 planks (%s)" % self.gameboard.wood_buy_price, self.buy_wood)
279caa00f3fa exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 460
diff changeset
409 self.add_tool("Sell 5 planks (%s)" % self.gameboard.wood_sell_price, self.sell_wood)
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
410
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
411 self.add_spacer(15)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
412 self.add_tool('Done', self.add_default_toolbar)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
413
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
414 def add_default_toolbar(self):
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
415 self.gameboard.change_toolbar(DefaultToolBar(self.gameboard,
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
416 width=self.style.width))
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
417
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
418 def buy_wood(self):
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
419 if self.gameboard.cash >= self.gameboard.wood_buy_price:
461
279caa00f3fa exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 460
diff changeset
420 self.gameboard.add_wood(5)
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
421 self.gameboard.add_cash(-self.gameboard.wood_buy_price)
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
422
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
423 def sell_wood(self):
461
279caa00f3fa exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 460
diff changeset
424 if self.gameboard.wood >= 5:
279caa00f3fa exchange rate should be per tree, not per plank
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 460
diff changeset
425 self.gameboard.add_wood(-5)
460
7204c16ab64d Wood market!
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 459
diff changeset
426 self.gameboard.add_cash(self.gameboard.wood_sell_price)