diff --git a/effects/pacman.json b/effects/pacman.json new file mode 100644 index 00000000..b91ef77f --- /dev/null +++ b/effects/pacman.json @@ -0,0 +1,4 @@ +{ + "name" : "Pac-Man", + "script" : "pacman.py" +} diff --git a/effects/pacman.py b/effects/pacman.py new file mode 100644 index 00000000..14387e0e --- /dev/null +++ b/effects/pacman.py @@ -0,0 +1,81 @@ +import hyperion +import time +import colorsys +from random import randint + +# define pacman +pacman = bytearray((255, 255, 1)) + +# define ghosts +redGuy = bytearray((255, 0, 0)) +pinkGuy = bytearray((255, 184, 255)) +blueGuy = bytearray((0, 255, 255)) +slowGuy = bytearray((255, 184, 81)) + +light = bytearray((255, 184, 174)) +background = bytearray((0, 0, 0)) + +# initialize the led data +ledDataEscape = bytearray() +for i in range(hyperion.ledCount): + if i == 1: + ledDataEscape += pacman + elif i == 7: + ledDataEscape += pinkGuy + elif i == 10: + ledDataEscape += blueGuy + elif i == 13: + ledDataEscape += slowGuy + elif i == 16: + ledDataEscape += redGuy + else: + ledDataEscape += background + +ledDataChase = bytearray() +for i in range(hyperion.ledCount): + if i == 1: + ledDataChase += pacman + elif i in [7, 10, 13, 16]: + ledDataChase += bytearray((33, 33, 255)) + else: + ledDataChase += background + +# increment = 3, because LED-Color is defined by 3 Bytes +increment = 3 +sleepTime = 0.3 + +def shiftLED(ledData, increment, limit, lightPos=None): + state = 0 + while state < limit and not hyperion.abort(): + ledData = ledData[increment:] + ledData[:increment] + + if (lightPos): + tmp = ledData[lightPos] + ledData[lightPos] = light + + hyperion.setColor(ledData) + + if (lightPos): + ledData[lightPos] = tmp + + time.sleep(sleepTime) + state += 1 + +# start the write data loop +while not hyperion.abort(): + + # escape mode + ledData = ledDataEscape + shiftLED(ledData, increment, hyperion.ledCount) + + random = randint(10,hyperion.ledCount) + + # escape mode + power pellet + s = slice(3*random, 3*random+3) + shiftLED(ledData, increment, hyperion.ledCount - random, s) + + # chase mode + shift = 3*(hyperion.ledCount - random) + ledData=ledDataChase[shift:]+ledDataChase[:shift] + shiftLED(ledData, -increment, 2*hyperion.ledCount-random) +