Для проекта визуализации системы жидкостного охлаждения понадобился стрелочный индикатор давления.
За основу берем изображение:
Отделяем зёрна от плевел:
Изображение стрелки будет у нас отдельно крутиться.
Итак, создаём объект gauge:
Расклад по переменным такой:
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));