ChristmasTree/dynamic.py

44 lines
1.3 KiB
Python
Raw Normal View History

#! /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()