ImGui | Плавная анимация включения/выключения?

_lolike_

Новичок
Автор темы
8
0
Версия MoonLoader
.026-beta
Нашёл одну тему где есть анимация, вот собственно она:
Код который нашёл:
equire 'lib.moonloader'
local imgui = require 'imgui'
local key = require 'vkeys'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local update = false
local fAlpha = 0.00
local text = "Шо?"
local renderMenu = imgui.ImBool(false)
local canRender = imgui.ImBool(false)
function main()
while not isSampAvailable() do wait(0) end wait(5)
    while true do wait(0)
    if (isKeyJustPressed(VK_F2)) then renderMenu.v = not renderMenu.v end
    UpdateAlpha(renderMenu.v)
    if (fAlpha ~= 0.00) then canRender.v = true else canRender.v = false end -- вверх можете пихнуть, мне чиста пихуй
    imgui.Process = canRender.v
    end
end

function UpdateAlpha(menustate)
    if (menustate) then -- open
        if (fAlpha ~= 1.00)then fAlpha = fAlpha + 0.05 end
    else -- close
        if (fAlpha ~= 0.00)then fAlpha = fAlpha - 0.05 end
    end
    if (fAlpha > 1.00) then fAlpha = 1.00 end
    if (fAlpha < 0.00) then fAlpha = 0.00 end -- anti dowen fix
    apply_custom_style()
end
function imgui.OnDrawFrame()
        ScreenX, ScreenY = getScreenResolution()
        imgui.SetNextWindowPos(imgui.ImVec2(ScreenX / 2 , ScreenY / 2 ), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(350, 200), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"Animat1on DIMANSTATION BY rraggerr for blAst.hk", renderMenu, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize)
        imgui.Text(u8"Ебат як же красива украiна")
        if imgui.Button(u8(text)) then
        text = "Нишо!"
        end
        imgui.End()
end

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4

    style.Alpha = fAlpha
    style.FrameRounding = 0.0
    colors[clr.Text]                  = ImVec4(0.00, 0.00, 0.00, 1.00) -- тут можите ставитб чо хотите, не влияет
    colors[clr.TextDisabled]          = ImVec4(0.60, 0.60, 0.60, 1.00)
    colors[clr.WindowBg]              = ImVec4(0.94, 0.94, 0.94, 1.00)
    colors[clr.ChildWindowBg]         = ImVec4(0.00, 0.00, 0.00, 1.00)
    colors[clr.PopupBg]               = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.Border]                = ImVec4(0.00, 0.00, 0.00, 1.00)
    colors[clr.BorderShadow]          = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.FrameBg]               = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.FrameBgHovered]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.FrameBgActive]         = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.TitleBg]               = ImVec4(0.96, 0.96, 0.96, 1.00)
    colors[clr.TitleBgCollapsed]      = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TitleBgActive]         = ImVec4(0.82, 0.82, 0.82, 1.00)
    colors[clr.MenuBarBg]             = ImVec4(0.86, 0.86, 0.86, 1.00)
    colors[clr.ScrollbarBg]           = ImVec4(0.98, 0.98, 0.98, 1.00)
    colors[clr.ScrollbarGrab]         = ImVec4(0.69, 0.69, 0.69, 1.00)
    colors[clr.ScrollbarGrabHovered]  = ImVec4(0.59, 0.59, 0.59, 1.00)
    colors[clr.ScrollbarGrabActive]   = ImVec4(0.49, 0.49, 0.49, 1.00)
    colors[clr.ComboBg]               = ImVec4(0.86, 0.86, 0.86, 1.00)
    colors[clr.CheckMark]             = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.SliderGrab]            = ImVec4(0.24, 0.52, 0.88, 1.00)
    colors[clr.SliderGrabActive]      = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Button]                = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ButtonHovered]         = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ButtonActive]          = ImVec4(0.06, 0.53, 0.98, 1.00)
    colors[clr.Header]                = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.HeaderHovered]         = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.HeaderActive]          = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGrip]            = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.ResizeGripHovered]     = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGripActive]      = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.    Button]                = ImVec4(0.59, 0.59, 0.59, 1.00)
    colors[clr.CloseButtonHovered]    = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.PlotLines]             = ImVec4(0.39, 0.39, 0.39, 1.00)
    colors[clr.PlotLinesHovered]      = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]         = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered]  = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.TextSelectedBg]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ModalWindowDarkening]  = ImVec4(0.20, 0.20, 0.20, 1.00)
end
apply_custom_style()

Ну и я вставил в свой луа, где несколько окон и естественно есть условия открытия
Мой код, может что-то упустил, но смысл в другом:
local fAlpha = 0.00
local main_window_state = imgui.ImBool(false)
local canRender = imgui.ImBool(false)

function imgui.OnDrawFrame()
 if main_window_state.v then
  imgui.Begin('gg', main_window_state)
 end
 
 function UpdateAlpha(menustate)
    if (menustate) then -- open
        if (fAlpha ~= 1.00)then fAlpha = fAlpha + 0.05 end
    else -- close
        if (fAlpha ~= 0.00)then fAlpha = fAlpha - 0.05 end
    end
    if (fAlpha > 1.00) then fAlpha = 1.00 end
    if (fAlpha < 0.00) then fAlpha = 0.00 end -- anti dowen fix
    apply_custom_style()
end

function main()
while not isSampAvailable() do wait(0) end wait(5)
    while true do wait(0)
    if (isKeyJustPressed(VK_F2)) then main_window_state.v = not main_window_state.v end
    UpdateAlpha(main_window_state.v)
    if (fAlpha ~= 0.00) then canRender.v = true else canRender.v = false end -- вверх можете пихнуть, мне чиста пихуй
    imgui.Process = canRender.v
    end
end
Проблема в том, что при включении анимация идёт, а при выключении нет. Как видим это из-за созданного условия если main_window_state - true, без него всё работает отлично. Я бы мог его убрать, но у меня есть ещё несколько окон дополнительных и без условий никак. Можете помочь как обойтись без условий, но чтобы с анимациями, либо как-то подкорректировать, чтобы при условиях анимация всё равно работала
Поскольку есть риск, что многие не поняли, что я написал, то объясню ещё раз. Если есть условие if main_window_state.v then, то при нажатии кнопки, main_window_state.v меняется на false и условие if main_window_state.v then отключается следовательно отключается окно из-за чего не успевает пройти анимация. Помогите сделать так, чтобы анимация выключения проходила
Upd: Как я вижу здесь одни дилетанты и новички, не способные помочь. Посидев пару часов я понял как решить данную проблему и не готов поделиться решением. Обидно, что никто не смог мне помочь, я думал на форумах не только новички.
 
Последнее редактирование: