mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	* no smooth for efx rework fade effect * join strobe and fade effects new effect "breath" * - make transition efx to smooth mode more smooth - fixes for pacman - rework fade base effect - make it more versatile - fix prios in schema files - new notify blue effect to demonstrate capability of fade effect
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import hyperion, time, colorsys
 | |
| from random import randint
 | |
| 
 | |
| #get args
 | |
| rotationTime = float(hyperion.args.get('rotationTime', 4))
 | |
| marginPos    = float(hyperion.args.get('margin-pos', 2))
 | |
| 
 | |
| # define pacman
 | |
| pacman = bytearray((255, 255, 0))
 | |
| 
 | |
| # define ghosts
 | |
| redGuy  = bytearray((255, 0, 0))
 | |
| pinkGuy = bytearray((255, 184, 255))
 | |
| blueGuy = bytearray((0, 255, 255))
 | |
| slowGuy = bytearray((255, 184, 81))
 | |
| 
 | |
| light = bytearray((255, 184, 174))
 | |
| background = bytearray((0, 0, 0))
 | |
| 
 | |
| #helper
 | |
| posPac    = 1
 | |
| diffPac   = 6*marginPos
 | |
| diffGuys  = 3*marginPos
 | |
| sleepTime = max(0.02,rotationTime/hyperion.ledCount)
 | |
| 
 | |
| posPinkGuy = posPac + diffPac
 | |
| posBlueGuy = posPinkGuy + diffGuys
 | |
| posSlowGuy = posBlueGuy + diffGuys
 | |
| posRedGuy = posSlowGuy + diffGuys
 | |
| 
 | |
| # initialize the led data
 | |
| ledDataEscape = bytearray()
 | |
| for i in range(hyperion.ledCount):
 | |
| 	if i == 1:
 | |
| 		ledDataEscape += pacman
 | |
| 	elif i == posPinkGuy:
 | |
| 		ledDataEscape += pinkGuy
 | |
| 	elif i == posBlueGuy:
 | |
| 		ledDataEscape += blueGuy
 | |
| 	elif i == posSlowGuy:
 | |
| 		ledDataEscape += slowGuy
 | |
| 	elif i == posRedGuy:
 | |
| 		ledDataEscape += redGuy
 | |
| 	else:
 | |
| 		ledDataEscape += background
 | |
| 
 | |
| ledDataChase = bytearray()
 | |
| for i in range(hyperion.ledCount):
 | |
| 	if i == 1:
 | |
| 		ledDataChase += pacman
 | |
| 	elif i in [posPinkGuy, posBlueGuy, posSlowGuy, posRedGuy]:
 | |
| 		ledDataChase += bytearray((33, 33, 255))
 | |
| 	else:
 | |
| 		ledDataChase += background
 | |
| 
 | |
| # increment = 3, because LED-Color is defined by 3 Bytes
 | |
| increment = 3
 | |
| 
 | |
| def shiftLED(ledData, increment, limit, lightPos=None):
 | |
| 	state = 0
 | |
| 	while state < limit and not hyperion.abort():
 | |
| 		ledData = ledData[increment:] + ledData[:increment]
 | |
| 
 | |
| 		if (lightPos):
 | |
| 			tmp = ledData[lightPos]
 | |
| 			ledData[lightPos] = light
 | |
| 
 | |
| 		hyperion.setColor(ledData)
 | |
| 
 | |
| 		if (lightPos):
 | |
| 			ledData[lightPos] = tmp
 | |
| 
 | |
| 		time.sleep(sleepTime)
 | |
| 		state += 1
 | |
| 
 | |
| # start the write data loop
 | |
| while not hyperion.abort():
 | |
| 
 | |
| 	# escape mode
 | |
| 	ledData = ledDataEscape
 | |
| 	shiftLED(ledData, increment, hyperion.ledCount)
 | |
| 
 | |
| 	random = randint(10,hyperion.ledCount)
 | |
| 
 | |
| 	# escape mode + power pellet
 | |
| 	s = slice(3*random, 3*random+3)
 | |
| 	shiftLED(ledData, increment, hyperion.ledCount - random, s)
 | |
| 
 | |
| 	# chase mode
 | |
| 	shift   = 3*(hyperion.ledCount - random)
 | |
| 	ledData = ledDataChase[shift:]+ledDataChase[:shift]
 | |
| 	shiftLED(ledData, -increment, 2*hyperion.ledCount-random)
 | |
| 	time.sleep(sleepTime)
 | |
| 
 |