Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
    def __init__(self, creature, font, dismiss):
        self._creature = creature
        self._dismiss = dismiss
        self._tree = TreeOptions(self._laboroptions(), font, None, self.changed)

        self.scale(font)