/
labors.py
70 lines (51 loc) · 1.93 KB
/
labors.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from pygame import Rect, Surface
from pygame.locals import *
from data import LaborOptions
from scroll import Scroll
from tree import TreeOptions
class LaborSelection(object):
dt = 0.01
def __init__(self, creature, font, dismiss):
self._creature = creature
self._dismiss = dismiss
self._tree = TreeOptions(self._laboroptions(), font, None, self.changed)
self.scale(font)
def _laboroptions(self, branch = None):
if not branch:
return [self._laboroptions(cat) for cat in LaborOptions]
if hasattr(branch, '__iter__'):
return branch, branch[0], [self._laboroptions(child)
for child in branch[1]]
else:
return branch, branch.noun, (branch in self._creature.labors)
def _makebackground(self, size):
self._background = Surface(size, flags = SRCALPHA)
self._scroll.draw(self._background, self._tree.draw())
def changed(self):
del self._creature.labors[:]
self._creature.labors.extend(self._tree.selected())
self._background = None
def scrolled(self):
self._background = None
def scale(self, font):
self._font = font
self._background = None
self._scroll = Scroll(self._font, None, self.scrolled)
self._tree.scale(self._font)
def resize(self, size):
self._background = None
def handle(self, e):
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
self._dismiss()
return True
if self._tree.handle(e):
self._background = None
return True
return False
def draw(self, surface):
if self._scroll.poll():
self._background = None
if not self._background:
self._makebackground(surface.get_size())
surface.blit(self._background, (0,0))