Стрелочный индикатор.

Для проекта визуализации системы жидкостного охлаждения понадобился стрелочный индикатор давления.
За основу берем изображение:
gauge2
Отделяем зёрна от плевел:
gauge2


gauge2
Изображение стрелки будет у нас отдельно крутиться.

Итак, создаём объект gauge:

stog gauge pressure object

Расклад по переменным такой:

pressure = 0;			//текущее значение показометра
arrow_color = c_black;  //цвет стрелки
arrow_degrees = 221;	//градус на котором стрелка стоит на изображении
arroe_len = 150;		//длина стрелки от центра к краю					(подбирается по изображению)
start_degrees = 221;	//градус с которого начинается шкала прибора		(подбирается по изображению)
end_degrees   = 263;	//количество градусов отводимое под шкалу прибора	(подбирается по изображению)
scale_value_max = 2.5;	//максимальное число на показометре					(подбирается по изображению)
arrow_sprite //изображение стрелки, если не задано значение то будет просто рисоваться стрелка через draw_line
arrow_degrees //градус на котором стоит стрелка на своём стоково изображении


Событие Create:

/// @description 
//Site:   MidaDev.ru
//Author: Dimusikus

pressure_display = pressure;
degrees_perscale = end_degrees / scale_value_max; //количество градусов на одно деление шкалы
alarm[0]=room_speed;
alarm[1]=1;
//*****************************************************************
function draw_gauge(_degrees)//, _color)
{
	
	if arrow_sprite == noone then
	{	//если не задан спрайт показометра то рисуем просто стрелку
		var deg = start_degrees - _degrees * degrees_perscale;
		_xh = x + lengthdir_x(arrow_len, deg);
		_yh = y + lengthdir_y(arrow_len, deg);
		draw_line_width_color(x, y, _xh, _yh, 3, arrow_color, arrow_color);	
	}
	else
	{
		var deg = start_degrees - arrow_degrees - _degrees * degrees_perscale;
		//draw_sprite_ext(arrow_sprite, 1, x, y, 1, 1,arrow_degrees + _degrees * degrees_perscale, -1 , image_alpha);
		draw_sprite_ext(arrow_sprite, 1, x, y, 1, 1,deg , -1 , image_alpha);
		
	}
}
//*******************************************************************


Событие Step:

/// @description плавный доводчик стрелки
//Site:   MidaDev.ru
//Author: Dimusikus

pressure_display = lerp(pressure_display, pressure, 0.01);


Событие Draw

/// @description 
//Site:   MidaDev.ru
//Author: Dimusikus

draw_self();
draw_gauge(pressure_display)

/*
hor=0.0;
draw_gauge(0.0);
draw_gauge(0.5);
draw_gauge(1.0);
draw_gauge(1.5);
draw_gauge(2.0);
draw_gauge(2.5);
*/

draw_set_color(c_ltgray);
draw_set_font(fnt_gauge_pressure);
draw_set_halign(fa_center)
draw_text(x,y+100, string(pressure_display));