-- Время начала и окончания наведения
hover_start_time = 0
hover_end_time = 0
-- Обновляем время начала и окончания наведения
function updateHoverTime(isHovered)
local time = os.clock()
if isHovered then
if hover_start_time == 0 then
hover_start_time = time
end
hover_end_time = 0
else
if hover_end_time == 0 then
hover_end_time = time
end
hover_start_time = 0
end
end
function drawAnimatedCard(text, isChecked)
local draw_list = imgui.GetWindowDrawList()
local cursor_pos = imgui.GetCursorScreenPos()
local card_size = imgui.ImVec2(300, 50)
local padding = 10
local checkbox_size = 20
local bubble_radius = 2.5
local num_bubbles = 23
local bg_color = imgui.ImVec4(0.1, 0.1, 0.1, 1)
local hover_bg_color = imgui.ImVec4(0.2, 0.6, 1, 0)
local isHovered = imgui.IsMouseHoveringRect(cursor_pos, imgui.ImVec2(cursor_pos.x + card_size.x, cursor_pos.y + card_size.y))
local time = os.clock()
-- Анимация появления и исчезновения фона
local hover_anim_time = 0.5 -- Время анимации в секундах
local hover_state = isHovered and math.min((time - hover_start_time) / hover_anim_time, 1) or math.max(1 - (time - hover_end_time) / hover_anim_time, 0)
hover_bg_color.w = hover_state * 0.3 -- Плавное изменение альфа-канала фона
-- Рисуем фон карточки
local current_bg_color = isHovered and hover_bg_color or bg_color
draw_list:AddRectFilled(cursor_pos, imgui.ImVec2(cursor_pos.x + card_size.x, cursor_pos.y + card_size.y), imgui.ColorConvertFloat4ToU32(current_bg_color), 5.0)
-- Рисуем анимированные шарики, если курсор наведен
if hover_state > 0 then
local time_since_hover = os.clock() - hover_start_time
for i = 1, num_bubbles do
-- Уникальный угол для каждого шарика
local angle = (i / num_bubbles) * 2 * math.pi*3
-- Случайное расстояние от центра, зависящее от времени и индекса шарика
local distance = math.sin(time_since_hover + i) * (card_size.x / 4 - bubble_radius)*2
local bubble_x = cursor_pos.x + card_size.x / 2 + math.cos(angle) * distance
local bubble_y = cursor_pos.y + card_size.y / 2 + math.sin(angle) * distance
-- Ограничиваем шарики внутри карточки
bubble_x = math.max(cursor_pos.x + bubble_radius, math.min(cursor_pos.x + card_size.x - bubble_radius, bubble_x))
bubble_y = math.max(cursor_pos.y + bubble_radius, math.min(cursor_pos.y + card_size.y - bubble_radius, bubble_y))
local bubble_color = imgui.ImVec4(1, 1, 1, hover_state * 0.5) -- Цвет шариков с плавным исчезновением
draw_list:AddCircleFilled(imgui.ImVec2(bubble_x, bubble_y), bubble_radius, imgui.ColorConvertFloat4ToU32(bubble_color))
end
end
-- Рисуем текст
local text_pos = imgui.ImVec2(cursor_pos.x + padding, cursor_pos.y + card_size.y * 0.5 - imgui.CalcTextSize(text).y * 0.5)
draw_list:AddText(text_pos, imgui.ColorConvertFloat4ToU32(imgui.ImVec4(1, 1, 1, 1)), text)
imgui.AlignTextToFramePadding()
-- Рисуем чекбокс
local checkbox_pos = imgui.ImVec2(cursor_pos.x + card_size.x - checkbox_size - padding, cursor_pos.y + (card_size.y - checkbox_size) * 0.5)
imgui.SetCursorScreenPos(checkbox_pos)
imgui.Checkbox("##checkbox", isChecked)
-- Сдвигаем курсор после рисования карточки
imgui.SetCursorScreenPos(imgui.ImVec2(cursor_pos.x, cursor_pos.y + card_size.y + padding))
end