mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Wave effect
This commit is contained in:
parent
92db744388
commit
fbcc46ed28
47
effects/Seawaves.json
Normal file
47
effects/Seawaves.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"args": {
|
||||
"center_x": 1.25,
|
||||
"center_y": -0.25,
|
||||
"colors": [
|
||||
[
|
||||
8,
|
||||
0,
|
||||
255
|
||||
],
|
||||
[
|
||||
0,
|
||||
161,
|
||||
255
|
||||
],
|
||||
[
|
||||
0,
|
||||
222,
|
||||
255
|
||||
],
|
||||
[
|
||||
0,
|
||||
153,
|
||||
255
|
||||
],
|
||||
[
|
||||
38,
|
||||
0,
|
||||
255
|
||||
],
|
||||
[
|
||||
0,
|
||||
199,
|
||||
255
|
||||
]
|
||||
],
|
||||
"random-center": false,
|
||||
"reverse": false,
|
||||
"reverse_time": 0,
|
||||
"rotation_time": 60,
|
||||
"smoothing-custom-settings": true,
|
||||
"smoothing-time_ms": 200,
|
||||
"smoothing-updateFrequency": 25
|
||||
},
|
||||
"name": "Sea waves",
|
||||
"script": "waves.py"
|
||||
}
|
8
effects/Waves.json
Normal file
8
effects/Waves.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"name" : "Waves with Color",
|
||||
"script" : "waves.py",
|
||||
"args" :
|
||||
{
|
||||
"reverse" : false
|
||||
}
|
||||
}
|
77
effects/waves.py
Normal file
77
effects/waves.py
Normal file
@ -0,0 +1,77 @@
|
||||
import hyperion, time, math, random
|
||||
|
||||
randomCenter = bool(hyperion.args.get('random-center', False))
|
||||
centerX = float(hyperion.args.get('center_x', -0.15))
|
||||
centerY = float(hyperion.args.get('center_y', -0.25))
|
||||
rotationTime = float(hyperion.args.get('rotation_time', 90))
|
||||
colors = hyperion.args.get('colors', ((255,0,0),(255,255,0),(0,255,0),(0,255,255),(0,0,255),(255,0,255)))
|
||||
reverse = bool(hyperion.args.get('reverse', False))
|
||||
reverseTime = int(hyperion.args.get('reverse_time', 0))
|
||||
#rotate = bool(hyperion.args.get('rotate', True))
|
||||
positions = []
|
||||
|
||||
# calc center if random
|
||||
if randomCenter:
|
||||
centerX = random.uniform(0.0, 1.0)
|
||||
centerY = random.uniform(0.0, 1.0)
|
||||
|
||||
rCenterX = int(round(float(hyperion.imageWidth())*centerX))
|
||||
rCenterY = int(round(float(hyperion.imageHeight())*centerY))
|
||||
|
||||
#calc interval
|
||||
sleepTime = max(1/(255/rotationTime), 0.016)
|
||||
|
||||
#calc diagonal
|
||||
if centerX < 0.5:
|
||||
cX = 1.0-centerX
|
||||
else:
|
||||
cX = 0.0+centerX
|
||||
|
||||
if centerY < 0.5:
|
||||
cY = 1.0-centerY
|
||||
else:
|
||||
cY = 0.0+centerY
|
||||
|
||||
diag = int(round(math.sqrt(((cX*hyperion.imageWidth())**2)+((cY*hyperion.imageHeight())**2))))
|
||||
# some diagonal overhead
|
||||
diag = int(diag*1.3)
|
||||
|
||||
# calc positions
|
||||
pos = 0
|
||||
step = int(255/len(colors))
|
||||
for entry in colors:
|
||||
positions.append(pos)
|
||||
pos += step
|
||||
|
||||
# target time
|
||||
targetTime = time.time()+float(reverseTime)
|
||||
|
||||
#hyperion.imageCOffset(int(hyperion.imageWidth()/2), int(hyperion.imageHeight()/2))
|
||||
|
||||
while not hyperion.abort():
|
||||
# verify reverseTime, randomize reverseTime based on reverseTime up to reversedTime*2
|
||||
if reverseTime >= 1:
|
||||
now = time.time()
|
||||
if now > targetTime:
|
||||
reverse = not reverse
|
||||
targetTime = time.time()+random.uniform(float(reverseTime), float(reverseTime*2.0))
|
||||
# apply rotate
|
||||
#if rotate:
|
||||
# hyperion.imageCRotate(1)
|
||||
# prepare bytearray with colors and positions
|
||||
gradientBa = bytearray()
|
||||
it = 0
|
||||
for color in colors:
|
||||
gradientBa += bytearray((positions[it],color[0],color[1],color[2]))
|
||||
it += 1
|
||||
|
||||
hyperion.imageRadialGradient(rCenterX,rCenterY, diag, gradientBa,0)
|
||||
|
||||
# increment positions
|
||||
for i, pos in enumerate(positions):
|
||||
if reverse:
|
||||
positions[i] = pos - 1 if pos >= 1 else 255
|
||||
else:
|
||||
positions[i] = pos + 1 if pos <= 254 else 0
|
||||
hyperion.imageShow()
|
||||
time.sleep(sleepTime)
|
Loading…
Reference in New Issue
Block a user