mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Trails effect (#346)
* Create trails.py * Create trails.json * Create trails_color.json
This commit is contained in:
parent
81e06ef6a0
commit
8ed8823033
14
effects/trails.json
Normal file
14
effects/trails.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name" : "trails",
|
||||||
|
"script" : "trails.py",
|
||||||
|
"args" :
|
||||||
|
{
|
||||||
|
"min_len" : 2,
|
||||||
|
"max_len" : 7,
|
||||||
|
"height" : 8,
|
||||||
|
"trails": 3,
|
||||||
|
"speed" : 1.0,
|
||||||
|
"random" : false,
|
||||||
|
"color" : [255, 255, 255]
|
||||||
|
}
|
||||||
|
}
|
99
effects/trails.py
Normal file
99
effects/trails.py
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
import hyperion
|
||||||
|
import time
|
||||||
|
import colorsys
|
||||||
|
import random
|
||||||
|
|
||||||
|
min_len = int(hyperion.args.get('min_len', 3))
|
||||||
|
max_len = int(hyperion.args.get('max_len', 3))
|
||||||
|
height = int(hyperion.args.get('height', 8))
|
||||||
|
trails = int(hyperion.args.get('int', 8))
|
||||||
|
sleepTime = float(hyperion.args.get('speed', 1.0)) * 0.01
|
||||||
|
color = list(hyperion.args.get('color', (255,255,255)))
|
||||||
|
randomise = bool(hyperion.args.get('random', False))
|
||||||
|
whidth = hyperion.ledCount / height
|
||||||
|
|
||||||
|
class trail:
|
||||||
|
def __init__(self):
|
||||||
|
return
|
||||||
|
|
||||||
|
def start(self, x, y, step, color, _len, _h):
|
||||||
|
self.pos = 0.0
|
||||||
|
self.step = step
|
||||||
|
self.h = _h
|
||||||
|
self.x = x
|
||||||
|
self.data = []
|
||||||
|
brigtness = color[2]
|
||||||
|
step_brigtness = color[2] / _len
|
||||||
|
for i in range(0, _len):
|
||||||
|
rgb = colorsys.hsv_to_rgb(color[0], color[1], brigtness)
|
||||||
|
self.data.insert(0, (int(255*rgb[0]), int(255*rgb[1]), int(255*rgb[2])))
|
||||||
|
brigtness -= step_brigtness
|
||||||
|
|
||||||
|
self.data.extend([(0,0,0)]*(_h-y))
|
||||||
|
if len(self.data) < _h:
|
||||||
|
for i in range (_h-len(self.data)):
|
||||||
|
self.data.insert(0, (0,0,0))
|
||||||
|
|
||||||
|
def getdata(self):
|
||||||
|
self.pos += self.step
|
||||||
|
if self.pos > 1.0:
|
||||||
|
self.pos = 0.0
|
||||||
|
self.data.pop()
|
||||||
|
self.data.insert(0, (0,0,0))
|
||||||
|
return self.x, self.data[-self.h:], all(x == self.data[0] for x in self.data)
|
||||||
|
|
||||||
|
tr = []
|
||||||
|
|
||||||
|
for i in range(trails):
|
||||||
|
r = {
|
||||||
|
'exec': trail()
|
||||||
|
}
|
||||||
|
|
||||||
|
if randomise:
|
||||||
|
col = (random.uniform(0.1, 1.0), random.uniform(0.1, 1.0), random.uniform(0.1, 1.0))
|
||||||
|
else:
|
||||||
|
col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0)
|
||||||
|
|
||||||
|
r['exec'].start(
|
||||||
|
random.randint(0, whidth),
|
||||||
|
random.randint(0, height),
|
||||||
|
random.uniform(0.2, 0.8),
|
||||||
|
col,
|
||||||
|
random.randint(min_len, max_len),
|
||||||
|
height
|
||||||
|
)
|
||||||
|
tr.append(r)
|
||||||
|
|
||||||
|
# Start the write data loop
|
||||||
|
while not hyperion.abort():
|
||||||
|
ledData = bytearray()
|
||||||
|
|
||||||
|
for r in tr:
|
||||||
|
r['x'], r['data'], c = r['exec'].getdata()
|
||||||
|
if c:
|
||||||
|
if randomise:
|
||||||
|
col = (random.uniform(0.1, 1.0), random.uniform(0.1, 1.0), random.uniform(0.1, 1.0))
|
||||||
|
else:
|
||||||
|
col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0)
|
||||||
|
|
||||||
|
r['exec'].start(
|
||||||
|
random.randint(0, whidth),
|
||||||
|
random.randint(0, height),
|
||||||
|
random.uniform(0.2, 0.8),
|
||||||
|
col,
|
||||||
|
random.randint(min_len, max_len),
|
||||||
|
height
|
||||||
|
)
|
||||||
|
|
||||||
|
for y in range(0, height):
|
||||||
|
for x in range(0, whidth):
|
||||||
|
for r in tr:
|
||||||
|
if x == r['x']:
|
||||||
|
led = bytearray(r['data'][y])
|
||||||
|
break
|
||||||
|
led = bytearray((0,0,0))
|
||||||
|
ledData += led
|
||||||
|
|
||||||
|
hyperion.setImage(whidth,height,ledData)
|
||||||
|
time.sleep(sleepTime)
|
||||||
|
|
14
effects/trails_color.json
Normal file
14
effects/trails_color.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name" : "trails_color",
|
||||||
|
"script" : "trails.py",
|
||||||
|
"args" :
|
||||||
|
{
|
||||||
|
"min_len" : 2,
|
||||||
|
"max_len" : 6,
|
||||||
|
"height" : 8,
|
||||||
|
"trails": 16,
|
||||||
|
"speed" : 8.0,
|
||||||
|
"random" : true,
|
||||||
|
"color" : [255, 255, 255]
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user