Переделал шкалу индикатора аудио

Было

Стало

Движение более плавное, а так же присутсвует плавное изменение цвета.

Каждый светодиод на шкале создан массивом цветов

display_pins_max = 20;
pins_yellow = display_pins_max-6;
pins_red    = display_pins_max-3;

modulation	  = 0;
modulation_to = 10;

levels=[];
//*******************************************************************************
for(var i=0; i<display_pins_max;i++)
{
	if i<pins_yellow then{ levels[i]=new Color(c_gray, c_green);		continue;}
	if i<pins_red	 then{ levels[i]=new Color(c_gray, c_yellow);		continue;}
	levels[i]=new Color(c_gray, c_red);
}
//*******************************************************************************


Конструктор объекта Color:

/// @description
//Site:   MidaDev.ru
//Author: Dimusikus
function Color(_color=c_black, _color2=c_white) constructor
{ 
	#region Constructor
	color		=_color;  //динамическая изменяется туда сюда постоянно
	c1_default	= color;  //цвет к которому возвращаться будем, статическая переменная, дефолтное состояние цвета	 
	color2		= _color2;//цвет к которому мы LERPится будем в STEPE статическое значение, цвет по умолчанию
	c2_target	= color;  //цвет к которому надо придти, динамическая
	#endregion	
	//*******************************************************************	
	static get = function(){return color;};
	//*******************************************************************	
	static set = function(_c){color=_c;};
	//*******************************************************************	
	static step = function()
	{ 
		color = merge_color(color, c2_target, 0.1);
	};	
	//*******************************************************************	
	static set_to = function(_co=color2){ c2_target = _co;};
	//*******************************************************************	
	static set_to_back = function(){ set_to(c1_default)};	
}

 

В событии STEP обновляем состояние светодиодов:

/// @description
//Site:   MidaDev.ru
//Author: Dimusikus
modulation = lerp(modulation, modulation_to, 0.1);
update_modulation_level(modulation);
for(var i=0; i<display_pins_max;i++)
{
	levels[i].step();		
};


function update_modulation_level(_mod)
{
	for(var i=0; i<display_pins_max;i++)
	{
		if i<_mod then { levels[i].set_to(); continue; };
		else levels[i].set_to_back();		
	};		
}