Было
Стало
Движение более плавное, а так же присутсвует плавное изменение цвета.
Каждый светодиод на шкале создан массивом цветов
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();
};
}