class FlipTile(Tile): ''' Abstract widget class for one Tile. We also have the ability to completely invert whatever the concrete subclass chooses to do. ''' def __init__(self, interval=10, limit=10): Tile.__init__(self, interval, limit) b = Block(8, 8).fill(LampState.FLIP) self.__masterFrame = Frame() self.__masterFrame.add(self.getFrame(), 0, 0).add(b, 0, 0).hide(b) self.__flipped = False self.__flipper = b def recyclable(self): return True def getMasterFrame(self): 'Return the master frame for display' return self.__masterFrame def prepare(self): if self.__flipped: self.__masterFrame.hide(self.__flipper) else: self.__masterFrame.show(self.__flipper) self.__flipped = not self.__flipped
from net.loadbang.shado import Frame, Block from net.loadbang.shado.types import LampState from config import renderer outer = Block(4, 4).fill(LampState.ON) inner = Block(2, 2).fill(LampState.FLIP) def posGenerator(): while True: for i in range(8): yield i pos = posGenerator() n = pos.next() frame = Frame().add(outer, 2, 2).add(inner, n, n) frame.hide(outer) count = 0 def bang(): global count count += 1 if count % 10 == 0: doit() def press(x, y, n): if n == 1: frame.show(outer) else: frame.hide(outer) draw()