Button и Begin

Citrys

Участник
Автор темы
179
5
Версия MoonLoader
.026-beta
как сделать так, что бы при нажатии на кнопку изменялся размер imgui окна с плавной анимацией
 

RedHolms

Известный
Проверенный
622
369
Lua:
-- Рекомендую запихнуть в конец кода, либо в часть кода с декларациями и т.п. --
size_Animation_ChangeWindowSize = imgui.ImVec2(0, 0) -- Размер окна(!!! ДОЛЖНА БЫТЬ ИНИЦИАЛИЗИРОВАНА !!!)
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    --[[
        from - ImVec2 - Начальный размер окна
        to - ImVec2 - Размер, на который нужно изменить
        period - number - Время анимации(ms)
    ]]
    local xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
    local xLost, yLost = (to.x - from.x), (to.y, from.y)
    size_Animation_ChangeWindowSize = from
    while (xLost ~= 0) and (yLost ~= 0) do wait(1)
        size_Animation_ChangeWindowSize = size_Animation_ChangeWindowSize - imgui.ImVec2(xChange, yChange)
        xLost = xLost - xChange
        yLost = yLost - yChange
        if (xLost < 0.5 or xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 or yLost > -0.5) then yLost = 0 end
    end
end)

-- Когда нужно произвести анимацию --
th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
-- Изменит размер окна от ImVec2(200, 200) до ImVec2(500, 500) за 1 секунду(1000ms)

-- Во время создания окна --
imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, condition) -- Вместо condition своё значение

На счёт работы не уверен, не тестил
 

Citrys

Участник
Автор темы
179
5
Lua:
-- Рекомендую запихнуть в конец кода, либо в часть кода с декларациями и т.п. --
size_Animation_ChangeWindowSize = imgui.ImVec2(0, 0) -- Размер окна(!!! ДОЛЖНА БЫТЬ ИНИЦИАЛИЗИРОВАНА !!!)
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    --[[
        from - ImVec2 - Начальный размер окна
        to - ImVec2 - Размер, на который нужно изменить
        period - number - Время анимации(ms)
    ]]
    local xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
    local xLost, yLost = (to.x - from.x), (to.y, from.y)
    size_Animation_ChangeWindowSize = from
    while (xLost ~= 0) and (yLost ~= 0) do wait(1)
        size_Animation_ChangeWindowSize = size_Animation_ChangeWindowSize - imgui.ImVec2(xChange, yChange)
        xLost = xLost - xChange
        yLost = yLost - yChange
        if (xLost < 0.5 or xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 or yLost > -0.5) then yLost = 0 end
    end
end)

-- Когда нужно произвести анимацию --
th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
-- Изменит размер окна от ImVec2(200, 200) до ImVec2(500, 500) за 1 секунду(1000ms) 

-- Во время создания окна --
imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, condition) -- Вместо condition своё значение

На счёт работы не уверен, не тестил
собственно говоря, куда нужно вставлять th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000), куда вот это imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, condition) -- Вместо condition своё значение и как тут поменять размер? я просто немного не понял ocal xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
 

RedHolms

Известный
Проверенный
622
369
собственно говоря, куда нужно вставлять th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000), куда вот это imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, condition) -- Вместо condition своё значение и как тут поменять размер? я просто немного не понял ocal xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)

Код:
-- Рекомендую запихнуть в конец кода, либо в часть кода с декларациями и т.п. --
size_Animation_ChangeWindowSize = imgui.ImVec2(0, 0) -- Изначальный разме окна, можешь подгружать из файла настроек и т.п.
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    --[[
        from - ImVec2 - Начальный размер окна
        to - ImVec2 - Размер, на который нужно изменить
        period - number - Время анимации(ms)
    ]]
    local xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
    local xLost, yLost = (to.x - from.x), (to.y, from.y)
    size_Animation_ChangeWindowSize = from
    while (xLost ~= 0) and (yLost ~= 0) do wait(1)
        size_Animation_ChangeWindowSize = size_Animation_ChangeWindowSize - imgui.ImVec2(xChange, yChange)
        xLost = xLost - xChange
        yLost = yLost - yChange
        if (xLost < 0.5 or xLost > -0.5) then xLost = 0 end

        if (yLost < 0.5 or yLost > -0.5) then yLost = 0 end
    end
end)

-- Когда нужно произвести анимацию, чего еще добавить я хз, когда нужно произвести анимацию - туда и вставляй --
th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
-- Изменит размер окна от ImVec2(200, 200) до ImVec2(500, 500) за 1 секунду(1000ms)

-- Перед созданием окна, как ты обычно и задаёшь размер --
imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, condition) -- Вместо condition своё значение
 

Citrys

Участник
Автор темы
179
5
Код:
-- Рекомендую запихнуть в конец кода, либо в часть кода с декларациями и т.п. --
size_Animation_ChangeWindowSize = imgui.ImVec2(0, 0) -- Изначальный разме окна, можешь подгружать из файла настроек и т.п.
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    --[[
        from - ImVec2 - Начальный размер окна
        to - ImVec2 - Размер, на который нужно изменить
        period - number - Время анимации(ms)
    ]]
    local xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
    local xLost, yLost = (to.x - from.x), (to.y, from.y)
    size_Animation_ChangeWindowSize = from
    while (xLost ~= 0) and (yLost ~= 0) do wait(1)
        size_Animation_ChangeWindowSize = size_Animation_ChangeWindowSize - imgui.ImVec2(xChange, yChange)
        xLost = xLost - xChange
        yLost = yLost - yChange
        if (xLost < 0.5 or xLost > -0.5) then xLost = 0 end

        if (yLost < 0.5 or yLost > -0.5) then yLost = 0 end
    end
end)

-- Когда нужно произвести анимацию, чего еще добавить я хз, когда нужно произвести анимацию - туда и вставляй --
th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
-- Изменит размер окна от ImVec2(200, 200) до ImVec2(500, 500) за 1 секунду(1000ms)

-- Перед созданием окна, как ты обычно и задаёшь размер --
imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, condition) -- Вместо condition своё значение
я имел ввиду его вставлять перед imgui.Button? или в него и т.д.


local xChange, yChange = ((to.500 - from.450) / period), ((to.500 - from.450) / period) <- вот так вот?
 

RedHolms

Известный
Проверенный
622
369
я имел ввиду его вставлять перед imgui.Button? или в него и т.д.


local xChange, yChange = ((to.500 - from.450) / period), ((to.500 - from.450) / period) <- вот так вот?
Ты о чём?...

Для запуска анимации, просто:
Lua:
th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
-- Изменит размер окна от ImVec2(200, 200) до ImVec2(500, 500) за 1 секунду(1000ms)
Естественно, заменяешь значения на нужные тебе
 

Citrys

Участник
Автор темы
179
5
Ты о чём?...

Для запуска анимации, просто:
Lua:
th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
-- Изменит размер окна от ImVec2(200, 200) до ImVec2(500, 500) за 1 секунду(1000ms)
Естественно, заменяешь значения на нужные тебе
я просто не понимаю куда это вставлять!! в OnDrawFrame? в саму кнопку? за пределы OnDrawFrame
 

RedHolms

Известный
Проверенный
622
369
Когда нужно произвести анимацию - туда и вставляй, я хз, когда тебе нужно анимацию производить, если по нажатию на кнопку -
Lua:
if
imgui.Button(...)
then
    th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
end
и т.п.
 
  • Нравится
Реакции: Citrys

Citrys

Участник
Автор темы
179
5
Когда нужно произвести анимацию - туда и вставляй, я хз, когда тебе нужно анимацию производить, если по нажатию на кнопку -
Lua:
if
imgui.Button(...)
then
    th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
end
и т.п.
на кнопку, на которую я нажимаю
Lua:
                if imgui.Button('Информация', imgui.ImVec2(-1, 30)) then
                    th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
                end
скрипт рипается с такой ошибкой
[14:35:56.597600] (error) GOSHelper: D:\1234\moonloader\GOShelper.lua:276: attempt to perform arithmetic on global 'size_Animation_ChangeWindowSize' (a userdata value)
stack traceback:
 

RedHolms

Известный
Проверенный
622
369
на кнопку, на которую я нажимаю
Lua:
                if imgui.Button('Информация', imgui.ImVec2(-1, 30)) then
                    th_Animation_ChangeWindowSize:run(imgui.ImVec2(200, 200), imgui.ImVec2(500, 500), 1000)
                end
скрипт рипается с такой ошибкой
[14:35:56.597600] (error) GOSHelper: D:\1234\moonloader\GOShelper.lua:276: attempt to perform arithmetic on global 'size_Animation_ChangeWindowSize' (a userdata value)
stack traceback:
Пора переходить на Mimgui

Версия для Moon Imgui:
Lua:
size_Animation_ChangeWindowSize = imgui.ImVec2(0, 0) -- Размер окна(!!! ДОЛЖНА БЫТЬ ИНИЦИАЛИЗИРОВАНА !!!)
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    local xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
    local xLost, yLost = (to.x - from.x), (to.y, from.y)
    size_Animation_ChangeWindowSize = from
    while (xLost ~= 0) and (yLost ~= 0) do wait(1)
        size_Animation_ChangeWindowSize = imgui.ImVec2(size_Animation_ChangeWindowSize.x - xChange, size_Animation_ChangeWindowSize.y - yChange)
        xLost = xLost - xChange
        yLost = yLost - yChange
        if (xLost < 0.5 or xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 or yLost > -0.5) then yLost = 0 end
    end
end)
 

Citrys

Участник
Автор темы
179
5
Пора переходить на Mimgui

Версия для Moon Imgui:
Lua:
size_Animation_ChangeWindowSize = imgui.ImVec2(0, 0) -- Размер окна(!!! ДОЛЖНА БЫТЬ ИНИЦИАЛИЗИРОВАНА !!!)
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    local xChange, yChange = ((to.x - from.x) / period), ((to.y - from.y) / period)
    local xLost, yLost = (to.x - from.x), (to.y, from.y)
    size_Animation_ChangeWindowSize = from
    while (xLost ~= 0) and (yLost ~= 0) do wait(1)
        size_Animation_ChangeWindowSize = imgui.ImVec2(size_Animation_ChangeWindowSize.x - xChange, size_Animation_ChangeWindowSize.y - yChange)
        xLost = xLost - xChange
        yLost = yLost - yChange
        if (xLost < 0.5 or xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 or yLost > -0.5) then yLost = 0 end
    end
end)
ничего не происходит