44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
|
|
#! /bin/python3
|
||
|
|
|
||
|
|
import math
|
||
|
|
import random
|
||
|
|
import time
|
||
|
|
|
||
|
|
from Library.tree import RGBXmasTree
|
||
|
|
|
||
|
|
BRIGHTNESS_MULTIPLIER = 0.15
|
||
|
|
|
||
|
|
class Animation:
|
||
|
|
def __init__(self):
|
||
|
|
self.animation_steps = 50
|
||
|
|
self.progress = [random.randint(0, self.animation_steps) for i in range(25)]
|
||
|
|
self.colours = [(random.random(), random.random(), random.random()) for i in range(25)]
|
||
|
|
self.pixels = [(0, 0, 0) for i in range(25)]
|
||
|
|
|
||
|
|
def next(self):
|
||
|
|
for i in range(len(self.progress)):
|
||
|
|
self.progress[i] = (self.progress[i] + 1) % self.animation_steps
|
||
|
|
if self.progress[i] == 0:
|
||
|
|
self.colours[i] = (random.random(), random.random(), random.random())
|
||
|
|
|
||
|
|
magnitude = math.sin(math.pi * (self.progress[i] / self.animation_steps))
|
||
|
|
magnitude *= BRIGHTNESS_MULTIPLIER
|
||
|
|
colour = self.colours[i]
|
||
|
|
self.pixels[i] = (colour[0] * magnitude, colour[1] * magnitude, colour[2] * magnitude)
|
||
|
|
|
||
|
|
def set_colours(self, tree: RGBXmasTree):
|
||
|
|
for i in range(25):
|
||
|
|
tree[i].color = self.pixels[i]
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
tree = RGBXmasTree()
|
||
|
|
animation = Animation()
|
||
|
|
|
||
|
|
try:
|
||
|
|
while True:
|
||
|
|
animation.next()
|
||
|
|
animation.set_colours(tree)
|
||
|
|
time.sleep(0.5)
|
||
|
|
finally:
|
||
|
|
tree.off()
|