begin и button

Citrys

Участник
Автор темы
179
5
Версия MoonLoader
.026-beta
как сделать так что при нажатии на кнопку изменялся размер окна, желательно плавно
 
Решение
как сделать так что при нажатии на кнопку изменялся размер окна, желательно плавно
Lua:
local size = 0

--imgui
function imgui.OnDrawFrame()
    if size == 1 then imgui.SetNextWindowSize(imgui.ImVec2(500, 500), imgui.Cond.Always) end
    if size == 0 then imgui.SetNextWindowSize(imgui.ImVec2(200, 200), imgui.Cond.Always) end
    imgui.Begin('Test')
    if imgui.Button('Size big') then size = 1 end
    if imgui.Button('Size small') then size = 0 end
    imgui.End()
end

Rice.

Известный
Модератор
1,753
1,660
как сделать так что при нажатии на кнопку изменялся размер окна, желательно плавно
Lua:
local size = 0

--imgui
function imgui.OnDrawFrame()
    if size == 1 then imgui.SetNextWindowSize(imgui.ImVec2(500, 500), imgui.Cond.Always) end
    if size == 0 then imgui.SetNextWindowSize(imgui.ImVec2(200, 200), imgui.Cond.Always) end
    imgui.Begin('Test')
    if imgui.Button('Size big') then size = 1 end
    if imgui.Button('Size small') then size = 0 end
    imgui.End()
end
 
  • Bug
Реакции: PanSeek и SomaGnoma

Citrys

Участник
Автор темы
179
5
Lua:
local size = 0

--imgui
function imgui.OnDrawFrame()
    if size == 1 then imgui.SetNextWindowSize(imgui.ImVec2(500, 500), imgui.Cond.Always) end
    if size == 0 then imgui.SetNextWindowSize(imgui.ImVec2(200, 200), imgui.Cond.Always) end
    imgui.Begin('Test')
    if imgui.Button('Size big') then size = 1 end
    if imgui.Button('Size small') then size = 0 end
    imgui.End()
end
ничего не происходит
 

RedHolms

Известный
Проверенный
622
369
ничего не происходит
Lua:
size_Animation_ChangeWindowSize = imgui.ImVec2(200, 200) -- Размер окна, например, можешь загружать из файла настроек, или т.п.
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    period = period / 10
    local xChange, yChange = ((from.x - to.x) / period), ((from.y - to.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(0)
        size_Animation_ChangeWindowSize = imgui.ImVec2(size_Animation_ChangeWindowSize.x - xChange, size_Animation_ChangeWindowSize.y - yChange)
        xLost = xLost - math.abs(xChange)
        yLost = yLost - math.abs(yChange)
        if (xLost < 0.5 and xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 and yLost > -0.5) then yLost = 0 end
    end
    size_Animation_ChangeWindowSize = imgui.ImVec2(round(size_Animation_ChangeWindowSize.x), round(size_Animation_ChangeWindowSize.y))
end)
function round(num)
   if num >= 0 then return math.floor(num+.5)
   else return math.ceil(num-.5) end
end

Пример работы:
Lua:
imgui = require "imgui"

WindowActive = imgui.ImBool()
function imgui.OnDrawFrame()
if WindowActive.v then
    imgui.SetNextWindowSize(size_Animation_ChangeWindowSize, imgui.Cond.Always)
    imgui.Begin("Test window", WindowActive)
        if
            imgui.Button("Change size")
        then
            th_Animation_ChangeWindowSize:run(imgui.GetWindowSize(), imgui.ImVec2(500, 500), 1000)
        end

        if
            imgui.Button("Restore size")
        then
            size_Animation_ChangeWindowSize = imgui.ImVec2(200, 200)
        end
    imgui.End()
end
end

function main()
    while not isSampAvailable() do wait(10) end
    sampRegisterChatCommand("testimguianim", function(arg)
        WindowActive.v = not WindowActive.v
    end)
    while true do wait(0) imgui.Process = WindowActive.v end
end

size_Animation_ChangeWindowSize = imgui.ImVec2(200, 200)
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    period = period / 10
    local xChange, yChange = ((from.x - to.x) / period), ((from.y - to.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(0)
        size_Animation_ChangeWindowSize = imgui.ImVec2(size_Animation_ChangeWindowSize.x - xChange, size_Animation_ChangeWindowSize.y - yChange)
        xLost = xLost - math.abs(xChange)
        yLost = yLost - math.abs(yChange)
        if (xLost < 0.5 and xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 and yLost > -0.5) then yLost = 0 end
    end
    size_Animation_ChangeWindowSize = imgui.ImVec2(round(size_Animation_ChangeWindowSize.x), round(size_Animation_ChangeWindowSize.y))
end)

function round(num)
    if num >= 0 then return math.floor(num+.5)
    else return math.ceil(num-.5) end
end
 

RedHolms

Известный
Проверенный
622
369
Пардоньте, нужна задержка в 1 мс, а не в 1 кадр:
Lua:
size_Animation_ChangeWindowSize = imgui.ImVec2(200, 200) -- Размер окна, например, можешь загружать из файла настроек, или т.п.
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    period = period / 10
    local xChange, yChange = ((from.x - to.x) / period), ((from.y - to.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 - math.abs(xChange)
        yLost = yLost - math.abs(yChange)
        if (xLost < 0.5 and xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 and yLost > -0.5) then yLost = 0 end
    end
    size_Animation_ChangeWindowSize = imgui.ImVec2(round(size_Animation_ChangeWindowSize.x), round(size_Animation_ChangeWindowSize.y))
end)
function round(num)
   if num >= 0 then return math.floor(num+.5)
   else return math.ceil(num-.5) end
end
[/CODE
 

Rice.

Известный
Модератор
1,753
1,660
Пардоньте, нужна задержка в 1 мс, а не в 1 кадр:
Lua:
size_Animation_ChangeWindowSize = imgui.ImVec2(200, 200) -- Размер окна, например, можешь загружать из файла настроек, или т.п.
th_Animation_ChangeWindowSize = lua_thread.create_suspended(function(from, to, period)
    period = period / 10
    local xChange, yChange = ((from.x - to.x) / period), ((from.y - to.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 - math.abs(xChange)
        yLost = yLost - math.abs(yChange)
        if (xLost < 0.5 and xLost > -0.5) then xLost = 0 end
        if (yLost < 0.5 and yLost > -0.5) then yLost = 0 end
    end
    size_Animation_ChangeWindowSize = imgui.ImVec2(round(size_Animation_ChangeWindowSize.x), round(size_Animation_ChangeWindowSize.y))
end)
function round(num)
   if num >= 0 then return math.floor(num+.5)
   else return math.ceil(num-.5) end
end
[/CODE
Это сообщение было не тебе адресовано.
 
  • Нравится
Реакции: Citrys