mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
New effect collision
Signed-off-by: Paulchen-Panther <paulchen-panter@protonmail.com>
This commit is contained in:
parent
380f9b5d3e
commit
4c0c102f2c
@ -690,6 +690,9 @@
|
||||
"edt_eff_trails_header_desc": "In verschiedenen Farben, wünsch dir was!",
|
||||
"edt_eff_flag_header": "Flaggen",
|
||||
"edt_eff_flag_header_desc": "Verpasse deinen LEDs die Farben deines Landes. Du kannst mehr als eine Flagge auswählen, je nach Intervall werden diese dann abwechselnd angezeigt.",
|
||||
"edt_eff_collision_header": "Farbkollision",
|
||||
"edt_eff_collision_header_desc": "Zwei Farbprojektile werden von zufälligen Positionen gesendet und kollidieren miteinander",
|
||||
"edt_eff_explodeRadius": "Detonationsreichweite ",
|
||||
"edt_eff_enum_all": "Alle",
|
||||
"edt_eff_enum_all-together": "Alle zusammen",
|
||||
"edt_eff_enum_list": "LED Liste",
|
||||
|
@ -689,6 +689,9 @@
|
||||
"edt_eff_trails_header_desc" : "Colored stars that fall from top to bottom",
|
||||
"edt_eff_flag_header" : "Flags",
|
||||
"edt_eff_flag_header_desc" : "Let your leds shine bright in the colors of your country. You could select more than one flag, they will change based on interval time.",
|
||||
"edt_eff_collision_header": "color collision",
|
||||
"edt_eff_collision_header_desc": "Two color projectiles are sent from random positions and collide with each other",
|
||||
"edt_eff_explodeRadius": "Detonation Range ",
|
||||
"edt_eff_enum_all" : "All",
|
||||
"edt_eff_enum_all-together" : "All together",
|
||||
"edt_eff_enum_list" : "LED List",
|
||||
|
10
effects/collision.json
Normal file
10
effects/collision.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name" : "Collision",
|
||||
"script" : "collision.py",
|
||||
"args" :
|
||||
{
|
||||
"speed" : 100,
|
||||
"trailLength" : 5,
|
||||
"explodeRadius" : 8
|
||||
}
|
||||
}
|
60
effects/collision.py
Normal file
60
effects/collision.py
Normal file
@ -0,0 +1,60 @@
|
||||
# Two projectiles are sent from random positions and collide with each other
|
||||
# Template from https://github.com/nickpesce/lit/blob/master/lit/effects/collision.py
|
||||
import hyperion, time, colorsys, random, math
|
||||
|
||||
# Get parameters
|
||||
sleepTime = max(0.02, float(hyperion.args.get('speed', 100))/1000.0)
|
||||
trailLength = max(3, int(hyperion.args.get('trailLength', 5)))
|
||||
explodeRadius = int(hyperion.args.get('explodeRadius', 8))
|
||||
|
||||
# Create additional variables
|
||||
increment = None
|
||||
projectiles = []
|
||||
|
||||
# Initialize the led data
|
||||
ledData = bytearray()
|
||||
for i in range(hyperion.ledCount):
|
||||
ledData += bytearray((0,0,0))
|
||||
|
||||
# Start the write data loop
|
||||
while not hyperion.abort():
|
||||
if (len(projectiles) != 2):
|
||||
projectiles = [ [0, 1, random.uniform(0.0, 1.0)], [hyperion.ledCount-1, -1, random.uniform(0.0, 1.0)] ]
|
||||
increment = -random.randint(0, hyperion.ledCount-1) if random.choice([True, False]) else random.randint(0, hyperion.ledCount-1)
|
||||
|
||||
ledDataBuf = ledData[:]
|
||||
for i, v in enumerate(projectiles):
|
||||
projectiles[i][0] = projectiles[i][0]+projectiles[i][1]
|
||||
for t in range(0, trailLength):
|
||||
pixel = v[0] - v[1]*t
|
||||
if pixel + 2 < 0:
|
||||
pixel += hyperion.ledCount
|
||||
if pixel + 2 > hyperion.ledCount-1:
|
||||
pixel -= hyperion.ledCount-1
|
||||
rgb = colorsys.hsv_to_rgb(v[2], 1, (trailLength - 1.0*t)/trailLength)
|
||||
ledDataBuf[3*pixel ] = int(255*rgb[0])
|
||||
ledDataBuf[3*pixel + 1] = int(255*rgb[1])
|
||||
ledDataBuf[3*pixel + 2] = int(255*rgb[2])
|
||||
|
||||
hyperion.setColor(ledDataBuf[-increment:] + ledDataBuf[:-increment])
|
||||
|
||||
for i1, p1 in enumerate(projectiles):
|
||||
for i2, p2 in enumerate(projectiles):
|
||||
if (p1 is not p2):
|
||||
prev1 = p1[0] - p1[1]
|
||||
prev2 = p2[0] - p2[1]
|
||||
if (prev1 - prev2 < 0) != (p1[0] - p2[0] < 0):
|
||||
for d in range(0, explodeRadius):
|
||||
for pixel in range(p1[0] - d, p1[0] + d):
|
||||
rgb = colorsys.hsv_to_rgb(random.choice([p1[2], p2[2]]), 1, (1.0 * explodeRadius - d) / explodeRadius)
|
||||
ledDataBuf[3*pixel ] = int(255*rgb[0])
|
||||
ledDataBuf[3*pixel + 1] = int(255*rgb[1])
|
||||
ledDataBuf[3*pixel + 2] = int(255*rgb[2])
|
||||
|
||||
hyperion.setColor(ledDataBuf[-increment:] + ledDataBuf[:-increment])
|
||||
time.sleep(sleepTime)
|
||||
|
||||
projectiles.remove(p1)
|
||||
projectiles.remove(p2)
|
||||
|
||||
time.sleep(sleepTime)
|
40
effects/schema/collision.schema.json
Normal file
40
effects/schema/collision.schema.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"type":"object",
|
||||
"script" : "collision.py",
|
||||
"title":"edt_eff_collision_header",
|
||||
"required":true,
|
||||
"properties":{
|
||||
"speed": {
|
||||
"type": "number",
|
||||
"title":"edt_eff_speed",
|
||||
"default": 100,
|
||||
"minimum" : 100,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"trailLength" :
|
||||
{
|
||||
"type": "integer",
|
||||
"title":"edt_eff_colorcount",
|
||||
"default": 5,
|
||||
"minimum" : 3,
|
||||
"maximum" : 100,
|
||||
"step" : 1,
|
||||
"append" : "edt_append_pixel",
|
||||
"propertyOrder" : 2
|
||||
},
|
||||
"explodeRadius" :
|
||||
{
|
||||
"type": "integer",
|
||||
"title":"edt_eff_explodeRadius",
|
||||
"default": 8,
|
||||
"minimum" : 5,
|
||||
"maximum" : 100,
|
||||
"step" : 1,
|
||||
"append" : "edt_append_pixel",
|
||||
"propertyOrder" : 3
|
||||
}
|
||||
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
Loading…
Reference in New Issue
Block a user