コード例 #1
0
ファイル: Flash4.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self, size):
        Tile.__init__(self)
        frame = self.getFrame()

        # Underlying pattern:
        b = Block(size, size).fill(LampState.ON)

        i = 0
        n = 0
        while i < 8:
            j = 0
            while j < 8:
                if n % 2 == 0: frame.add(ViewPort(b, 0, 0, size, size), i, j)
                n += 1
                j += size

            i += size
            n += 1

        # Top layer which we flip:
        b = Block(8, 8).fill(LampState.FLIP)
        frame.add(b, 0, 0)

        def tick():
            while True:
                frame.hide(b)
                yield None
                frame.show(b)
                yield None
    
        self.__ticker = tick()
コード例 #2
0
ファイル: Border.py プロジェクト: cassiel/net.loadbang.shado
class Border(Tile):
    '''Animate a border.'''
    
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border): yield (i, border)
                for i in range(1 + border, 8 - border): yield (7 - border, i)
                for i in range(1 + border, 8 - border): yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border): yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)

    def count(self, n):
        self.__bloc.fill(LampState.OFF)

        for g in self.__gens:
            (x, y) = g.next()
            self.__bloc.setLamp(x, y, LampState.ON)
コード例 #3
0
ファイル: Border.py プロジェクト: cassiel/net.loadbang.shado
class Border(Tile):
    '''Animate a border.'''
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border):
                    yield (i, border)
                for i in range(1 + border, 8 - border):
                    yield (7 - border, i)
                for i in range(1 + border, 8 - border):
                    yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border):
                    yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)

    def count(self, n):
        self.__bloc.fill(LampState.OFF)

        for g in self.__gens:
            (x, y) = g.next()
            self.__bloc.setLamp(x, y, LampState.ON)
コード例 #4
0
    def __init__(self):
        DisposableTile.__init__(self, 10)
        self.__random = Random()

        widget = Block('010 111 010')
        self.getFrame().add(widget, 0, 0)
        self.__widget = widget

        # Add the 'blow-up' on top - but hide it.
        bang = Block(8, 8).fill(LampState.ON)
        self.getFrame().add(bang, 0, 0).hide(bang)
        self.__bang = bang
コード例 #5
0
    def __init__(self):
        Tile.__init__(self, 1, 1)
        self.__random = Random()
        b = Block(8, 8)

        for i in range(0, 8):
            for j in range(0, 8):
                if self.__random.nextBoolean():
                    b.setLamp(i, j, LampState.ON)
                else:
                    b.setLamp(i, j, LampState.OFF)

        self.getFrame().add(b, 0, 0)
        self.__block = b
コード例 #6
0
    def __init__(self):
        DisposableTile.__init__(self, 3)

        f = self.getFrame()
        b = Block('1')
        f.add(b, 7, 7)
        self.__block = b
コード例 #7
0
    def __init__(self):
        def position(block):
            '''
            position generator: for convenience, it draws in a 6 x 6
            block which we then position into the frame.
            '''
            while True:
                for x in range(6):
                    for y in range(5):  # snake
                        block.fill(LampState.OFF)
                        if x % 2 == 0:  # snake up
                            block.setLamp(x, 4 - y, LampState.ON)
                            yield None
                        else:  # snake down
                            block.setLamp(x, y, LampState.ON)
                            yield None

                for x in range(6):
                    block.fill(LampState.OFF).setLamp(5 - x, 5, LampState.ON)
                    yield None

        Tile.__init__(self, 3)
        b = Block(6, 6)
        self.__gen = position(b)
        self.getFrame().add(b, 1, 1)
コード例 #8
0
    def __init__(self):
        FlipTile.__init__(self, 1)

        def bouncer():
            while True:
                for i in range(6): yield i
                for i in range(6): yield 6 - i

        self.__hor = Block(8, 2).fill(LampState.FLIP)
        self.getFrame().add(self.__hor, 0, 0)

        self.__ver = Block(2, 8).fill(LampState.FLIP)
        self.getFrame().add(self.__ver, 0, 0)

        self.__xGen = bouncer()
        self.__yGen = bouncer()
コード例 #9
0
    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
コード例 #10
0
    def __init__(self):
        FlipTile.__init__(self, 1)

        sun = Block('011110 111111 111111 111111 111111 011110')
        moon = Block('.00. 0000 0000 .00.')

        self.getFrame().add(sun, 0, 0).add(moon, 0, 0)

        def bouncer(size):
            while True:
                for i in range(8 + 1 - size):
                    yield i
                # for i in range(8 - size): yield 8 - size - i

        self.__sunGen = bouncer(6)
        self.__moonGen = bouncer(4)

        self.__sun = sun
        self.__moon = moon
コード例 #11
0
ファイル: Cross.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self):
        FlipTile.__init__(self)

        cross1 = Block(8, 8).fill(LampState.OFF)
        cross2 = Block(8, 8).fill(LampState.OFF)

        for i in range(0, 8):
            cross1.setLamp(i, i, LampState.ON)
            cross1.setLamp(i, 7 - i, LampState.ON)

        for i in range(0, 8):
            cross2.setLamp(3, i, LampState.ON)
            cross2.setLamp(4, i, LampState.ON)
            cross2.setLamp(i, 3, LampState.ON)
            cross2.setLamp(i, 4, LampState.ON)

        self.getFrame().add(cross1, 0, 0).add(cross2, 0, 0)

        self.__cross1 = cross1
        self.__cross2 = cross2
コード例 #12
0
    def __init__(self):
        Tile.__init__(self, 10, 100)
        digits = [
            '111 101 101 101 111', '110 010 010 010 010',
            '111 001 111 100 111', '111 001 111 001 111',
            '101 101 111 001 001', '111 100 111 001 111',
            '111 100 111 101 111', '111 001 001 001 001',
            '111 101 111 101 111', '111 101 111 001 111'
        ]

        lftBlocks = [Block(digits[i]) for i in range(10)]
        rhtBlocks = [Block(digits[i]) for i in range(10)]

        f = self.getFrame()

        for i in range(10):
            f.add(lftBlocks[i], 0, 0).add(rhtBlocks[i], 5, 0)

        self.__lftBlocks = lftBlocks
        self.__rhtBlocks = rhtBlocks
コード例 #13
0
ファイル: Border.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border):
                    yield (i, border)
                for i in range(1 + border, 8 - border):
                    yield (7 - border, i)
                for i in range(1 + border, 8 - border):
                    yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border):
                    yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)
コード例 #14
0
ファイル: FourWay.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self):
        Tile.__init__(self, 5)
        block = Block(4, 4)

        f = self.getFrame()
        f.add(ViewPort(block, 0, 0, 4, 4), 0, 0)
        f.add(ViewPort(block, 0, 0, 4, 4), 4, 0)
        f.add(ViewPort(block, 0, 0, 4, 4), 0, 4)
        f.add(ViewPort(block, 0, 0, 4, 4), 4, 4)
        f.add(ViewPort(block, 0, 0, 4, 4), 2, 2)

        self.__block = block
        self.__pos = 0
コード例 #15
0
    def __init__(self, inSync):
        FlipTile.__init__(self, 5)

        self.__blocks = []
        self.__states = []
        self.__random = Random()

        for border in range(4):
            size = 8 - border * 2
            b = Block(size, size).fill(LampState.FLIP)
            self.getFrame().add(b, border, border)
            self.__blocks.append(b)
            self.__states.append(False)

        self.__inSync = inSync
コード例 #16
0
ファイル: Spell.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self):
        Tile.__init__(self)
        letters = [
            '00000011 00000000 00000000 00000000 00000000 00000000 00000000 00000000',  # ---
            '00000000 00000011 00000000 00000000 00000000 00000000 00000000 00000000',  # ---
            '10001000 11011000 10101011 10101000 10001000 10001000 10001000 00000000',  # M
            '01110000 10001000 10001000 10001011 10001000 10001000 01110000 00000000',  # O
            '10001000 11001000 10101000 10011000 10001011 10001000 10001000 00000000',  # N
            '01110000 10001000 10001000 10001000 10001000 10001011 01110000 00000000',  # O
            '10001000 11011000 10101000 10101000 10001000 10001000 10001011 00000000',  # M
            '11111000 10000000 10000000 11110000 10000000 10000000 11111000 00000011'  # E
        ]

        f = self.getFrame()
        self.__blocks = [Block(letters[i]) for i in range(8)]
        for b in self.__blocks:
            f.add(b, 0, 0)
コード例 #17
0
ファイル: Border.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self):
        Tile.__init__(self, 3)

        def position(border):
            while True:
                for i in range(1 + border, 8 - border): yield (i, border)
                for i in range(1 + border, 8 - border): yield (7 - border, i)
                for i in range(1 + border, 8 - border): yield (7 - i, 7 - border)
                for i in range(1 + border, 8 - border): yield (border, 7 - i)

        self.__gens = []

        for i in range(4):
            self.__gens.append(position(i))

        self.__bloc = Block(8, 8)
        self.getFrame().add(self.__bloc, 0, 0)
コード例 #18
0
ファイル: Shards.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self, frame, width, row, interval):
        self.__width = width
        self.__interval = interval
        self.__row = row
        self.__frame = frame
        self.__interval = interval
        self.__count = 0

        def position():
            while True:
                for i in range(8 - width):
                    yield i
                for i in range(8 - width):
                    yield 8 - width - i

        self.__gen = position()

        b = Block(width, 1).fill(LampState.ON)
        frame.add(b, self.__gen.next(), row)
        self.__block = b
コード例 #19
0
ファイル: Migrate.py プロジェクト: cassiel/net.loadbang.shado
'''
Animation. (Needs 10msec metro.) Sweeps an
inner XOR block over a button-toggled
background pattern. Contains generator magic.
'''

from __future__ import generators
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()
コード例 #20
0
ファイル: Cross.py プロジェクト: cassiel/net.loadbang.shado
    def __init__(self):
        FlipTile.__init__(self)

        cross1 = Block(8, 8).fill(LampState.OFF)
        cross2 = Block(8, 8).fill(LampState.OFF)

        for i in range(0, 8):
            cross1.setLamp(i, i, LampState.ON)
            cross1.setLamp(i, 7 - i, LampState.ON)

        for i in range(0, 8):
            cross2.setLamp(3, i, LampState.ON)
            cross2.setLamp(4, i, LampState.ON)
            cross2.setLamp(i, 3, LampState.ON)
            cross2.setLamp(i, 4, LampState.ON)

        self.getFrame().add(cross1, 0, 0).add(cross2, 0, 0)

        self.__cross1 = cross1
        self.__cross2 = cross2
コード例 #21
0
ファイル: Simple2.py プロジェクト: cassiel/net.loadbang.shado
'''
A slightly smarter version of Simple, using shado's
button-tracking machinery.
'''

from net.loadbang.shado import Block, PressManager, ViewPort, Frame
from net.loadbang.shado.types import LampState
from config import renderer, monomeWidth, monomeHeight

block = Block(4, 4).fill(LampState.ON)

frame = Frame().add(block, 2, 2).hide(block)


class MyViewPort(ViewPort):
    '''
    In order to catch button presses, we'll put a ViewPort around
    the frame, but build it in Python with a callback.
    '''
    def __init__(self, router, x, y, width, height):
        ViewPort.__init__(self, router, x, y, width, height)

    def press(self, x, y, how):
        '''callback from shado: deal with a button press'''
        if how != 0:
            frame.show(block)
        else:
            frame.hide(block)

        renderer.render(self)
        return True
コード例 #22
0
ファイル: Tiles.py プロジェクト: cassiel/net.loadbang.shado
 def __init__(self):
     Block.__init__(self, 2, 2)
     self.fill(LampState.OFF)
コード例 #23
0
ファイル: Cross.py プロジェクト: cassiel/net.loadbang.shado
'''
Draw a cross for the last pressed button.
'''

from config import renderer
from net.loadbang.shado import Frame, Block
from net.loadbang.shado.types import LampState

vertical = Block(1, 16).fill(LampState.ON)
horizontal = Block(16, 1).fill(LampState.ON)

frame = Frame().add(vertical, 0, 0).add(horizontal, 0, 0)


def hide():
    frame.hide(vertical)
    frame.hide(horizontal)
    renderer.render(frame)


hide()


def bang():
    pass


def press(x, y, n):
    if n == 1:
        frame.moveTo(vertical, x, 0).show(vertical)
        frame.moveTo(horizontal, 0, y).show(horizontal)
コード例 #24
0
'''
A demo of the "extended shado" scheduler. We blink four
exclusive-OR panels at different speeds.
'''

from net.loadbang.shado import Frame, Block, ViewPort
from net.loadbang.shado.types import LampState
from net.loadbang.shadox import DisplayTaskManager, XFrame
from config import renderer

# Task manager at 10Hz.
taskManager = DisplayTaskManager(renderer, 100)

block = Block(4, 4).fill(LampState.FLIP)

frame = XFrame(taskManager)

vp1 = ViewPort(block, 0, 0, 4, 4)
vp2 = ViewPort(block, 0, 0, 4, 4)
vp3 = ViewPort(block, 0, 0, 4, 4)
vp4 = ViewPort(block, 0, 0, 4, 4)

frame.add(vp1, 1, 1).hide(vp1).blink(vp1, 1, 5, None)
frame.add(vp2, 3, 3).hide(vp1).blink(vp2, 7, 8, None)
frame.add(vp3, 1, 3).hide(vp3).blink(vp3, 1, 10, None)
frame.add(vp4, 3, 1).hide(vp4).blink(vp4, 9, 11, None)

taskManager.mainFrame.add(frame, 0, 0)

def _cleanup(): taskManager.clear()
engine.addCleanup(_cleanup)
コード例 #25
0
'''
When launched, this script turns on all LEDs.
'''

from net.loadbang.shado import Block
from net.loadbang.shado.types import LampState
from config import renderer

lightBlock = Block(8, 8)
lightBlock.fill(LampState.ON)
renderer.render(lightBlock)
コード例 #26
0
from config import renderer

digits = [
    '111 101 101 101 111', '110 010 010 010 010', '111 001 111 100 111',
    '111 001 111 001 111', '101 101 111 001 001', '111 100 111 001 111',
    '111 100 111 101 111', '111 001 001 001 001', '111 101 111 101 111',
    '111 101 111 001 111'
]

frame = Frame()
renderer.render(frame)

mainframe = Frame()
f = mainframe.add(frame, 0, 0)

lftBlocks = [Block(digits[i]) for i in range(10)]
rhtBlocks = [Block(digits[i]) for i in range(10)]

for i in range(10):
    frame.add(lftBlocks[i], 0, 0).add(rhtBlocks[i], 5, 0)

counter = 99
interval = 0


def bang():
    global interval
    global counter

    interval += 1
コード例 #27
0
'''
Simple animation. Turn on the 10msec
metronome to see things move.
'''

from net.loadbang.shado import Frame, Block, ViewPort
from net.loadbang.shado.types import LampState
from config import renderer

block = Block(4, 4).fill(LampState.THRU)

# We can no longer add a block to a frame more than once (we don't use stamps
# any more) so we have to add a sub-frame to each instance.

frame = Frame()

position = 0

frame.add(Frame().add(block, 0, 0), 0, 0)
frame.add(Frame().add(block, 0, 0), 4, 0)
frame.add(Frame().add(block, 0, 0), 0, 4)
frame.add(Frame().add(block, 0, 0), 4, 4)
frame.add(Frame().add(block, 0, 0), 2, 2)

count = 0


def bang():
    global count
    count += 1
    if count % 10 == 0: doit()
コード例 #28
0
 def __init__(self):
     Block.__init__(self, 2, 2)
     self.fill(LampState.OFF)