Слайдер, рисуется на чистом draw_shape, легко кастомизируется на этапе проектирования комнаты.
/// @description Инициализация
//Site: MidaDev.ru
hh1 = sprite_height;
hh2 = bbox_right - bbox_left;
//масштаб линейке поотношению к масштабу спрайта
slider_step_scal = hh2 / (slider_max - slider_min);
//факт захвата ползунка мышкой
grab_mouse = false;
alarm[2] = 1;
/// @description alarm[2] Обновление текcтового поля
//Site: MidaDev.ru
//Author: Dimusikus
if instance_exists(slider_text_object) then if variable_instance_exists(slider_text_object, "text_text") then slider_text_object.text_text = slider_position;
alarm[2] = 1;
/// @description Draw Рисует контроллер
//Site: MidaDev.ru
//Author: Dimusikus
//slider_ruler_color цвет полоски
//slider_depth_ruler толщина полоски
//slider_ruler_border_color тцвет бордюра полоски
//slider_step_scal масштаб в экранных координатах
//slider_position позиция бегунка
//slider_min минимальное значение бегунка
//slider_max максимальное значение бегунка
//grab_mouse захват ползунка мышкой
//slider_markup рисовать или нет масштабные риски
//slider_depth_begunok масштаб бегунка
//
//
//--------------------------------------------------------------------------------------------
//рисуем полоску, заменить бы на draw_buttom........
draw_set_color(slider_ruler_color);
draw_rectangle(bbox_left, y - slider_depth_ruler, bbox_right, y + slider_depth_ruler, false);
draw_set_color(slider_ruler_border_color);
draw_rectangle(bbox_left, y - slider_depth_ruler, bbox_right, y + slider_depth_ruler, true);
//--------------------------------------------------------------------------------------------
//проверка на отхват мышкой, т.к. курсор может уехать за пределы ползунка, но это не значит
//что кнопка мыши отпувстила сам ползунок
if mouse_check_button_released(mb_left) then grab_mouse = false;
//--------------------------------------------------------------------------------------------
//рисуем ползунок, но сначала вычисляем его координаты все
if grab_mouse
{ //мышка навелась на кнопку
//позицию ползунка приравниваем к позиции мышки
poso = slider_min + (device_mouse_x_to_gui(0) - bbox_left) / slider_step_scal;
//масштабируем правильно позицию ползунка согласно slider_step
poso = round(poso / slider_step)*slider_step;
//отклампиваем минимум и максимум значений ползунка
slider_position = clamp(poso , slider_min, slider_max);
}
//--------------------------------------------------------------------------------------------
//вычисляем позицию ползунка на полоске
xx = slider_step_scal * (slider_position - slider_min);
//формируем масштаб ползунка в зависимости от настроек
x1 = bbox_left + xx - slider_depth_begunok;
y1 = bbox_top + 0 ;
x2 = bbox_left + xx + slider_depth_begunok;
y2 = bbox_bottom - 0;
//--------------------------------------------------------------------------------------------
//ну уже и рисуем сам ползунок
draw_set_color(slider_ruler_color);
draw_button(x1,y1,x2,y2, true);
//--------------------------------------------------------------------------------------------
//рисуем масштабные метки под линейкой
if (slider_markup) then
{
//perc1 = slider_step / 100;
//if (slider_max&1) {perc10 = perc1 * 16.6666;} else { perc10 = perc1 * 10;}
//if (slider_max&1) {perc50 = perc1 * 33.3333;} else { perc50 = perc1 * 50;}
draw_set_color(slider_ruler_color);
//рисуем в начале рисочку
draw_point(bbox_left , bbox_bottom - 3);
draw_point(bbox_left , bbox_bottom - 2);
//если шак не меньше отдного пикселя то рисуем рисочки по всей длинне
if (slider_step*slider_step_scal) >= 1 then
for(i=0; i <= (slider_max - slider_min); i = i + slider_step)
{
draw_point(bbox_left + i*slider_step_scal, bbox_bottom - 0);
draw_point(bbox_left + i*slider_step_scal, bbox_bottom - 1);
}
//рисуем в конце рисочку
//draw_point(bbox_left + (slider_max - slider_min)*slider_step_scal, bbox_bottom - 3);
//draw_point(bbox_left + (slider_max - slider_min)*slider_step_scal, bbox_bottom - 2);
draw_point(bbox_right , bbox_bottom - 3);
draw_point(bbox_right , bbox_bottom - 2);
//вычисляем можно ли отобразить корректно середину линейки
if !(((slider_max-slider_min)/slider_step)&1)
{
draw_point(bbox_left + (slider_max - slider_min)/2*slider_step_scal, bbox_bottom - 3);
draw_point(bbox_left + (slider_max - slider_min)/2*slider_step_scal, bbox_bottom - 2);
};
}
/// @description LeftPressed grab mouse
//произошол захват ползунка мышкой
grab_mouse = true;
/// @description LeftReleased ungrab mouse
//произошол отхват ползунка мышкой
grab_mouse = false;