Окна imgui

teddy bear

Активный
Автор темы
294
81
Версия MoonLoader
.026-beta
Доброго времени суток, уважаемые! Встал такой вопрос, как организовать переключение окон imgui? У меня есть 6 окон одинакого размера и содержания, но в некоторые в последующем буду добавлять доп информацию, функции, кнопки и т.п.
sa-mp-002.png

Вот главное окно. Мне нужно чтобы при переключении пунктов слева, переключались окна и окно оставалось таким же. Просто менялось содержимое правой части. Надеюсь обьяснил... Сам код
lua:
require 'lib.moonloader'
local imgui = require "imgui"
local encoding = require "encoding"
encoding.default = 'CP1251'
u8 = encoding.UTF8

local main_window = imgui.ImBool(false)
local second_window = imgui.ImBool(false)
local third_window = imgui.ImBool(false)
local fourth_window = imgui.ImBool(false)
local fifth_window = imgui.ImBool(false)
local sixth_window = imgui.ImBool(false)

local sw, sh = getScreenResolution()

local fa = require "fAwesome5"
local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })

function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
        font_config.MergeMode = true

        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 13.0, font_config, fa_glyph_ranges)
    end
end


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    sampRegisterChatCommand('noob', noobs)
    while not isSampAvailable() do wait(100) end
    imgui.Process = false
    while true do
    wait(0)
    if main_window.v == false then
        imgui.Process = main_window.v or second_window.v or third_window.v or fourth_window.v or fifth_window.v or sixth_window.v
    end
    end
end

function noobs(arg)
    main_window.v = not main_window.v
    imgui.Process = main_window.v
end

function imgui.OnDrawFrame()
    if main_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", main_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("One", imgui.ImVec2(120,180), true)
        imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false)
        imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false)
        imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false)
        imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false)
        imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false)
        imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false)
        imgui.EndChild()
        imgui.End()
    end
    if second_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", second_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("Two", imgui.ImVec2(120,180), true)
        imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false)
        imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false)
        imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false)
        imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false)
        imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false)
        imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false)
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginChild("Two", imgui.ImVec2(305,180), true)
        imgui.Text(u8"Тут что то обязательно будет")
        imgui.EndChild()
        imgui.End()
    end
    if third_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", third_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("Three", imgui.ImVec2(120,180), true)
        imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false)
        imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false)
        imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false)
        imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false)
        imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false)
        imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false)
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginChild("Three", imgui.ImVec2(305,180), true)
        imgui.Text(u8"Тут что то обязательно будет 2")
        imgui.EndChild()
        imgui.End()
    end
    if fourth_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", fourth_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("Four", imgui.ImVec2(120,180), true)
        imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false)
        imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false)
        imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false)
        imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false)
        imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false)
        imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false)
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginChild("Four", imgui.ImVec2(305,180), true)
        imgui.Text(u8"Тут что то обязательно будет 3")
        imgui.EndChild()
        imgui.End()
    end
    if fifth_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", fifth_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("Five", imgui.ImVec2(120,180), true)
        imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false)
        imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false)
        imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false)
        imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false)
        imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false)
        imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false)
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginChild("Five", imgui.ImVec2(305,180), true)
        imgui.Text(u8"Тут что то обязательно будет 4")
        imgui.EndChild()
        imgui.End()
    end
    if sixth_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", sixth_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("Five", imgui.ImVec2(120,180), true)
        imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false)
        imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false)
        imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false)
        imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false)
        imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false)
        imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false)
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginChild("Five", imgui.ImVec2(305,180), true)
        imgui.Text(u8"Тут что то обязательно будет 4")
        imgui.EndChild()
        imgui.End()
    end
end
И да, на последок. Подскажите более правильное решение кода, чтобы в дальнейшем не "говнокодить"
Заранее благодарю за помощь/совет и прошу прощения возможно за глупый вопрос. Только начинаю изучать lua и imgui в целом
 
Решение
Lua:
require 'lib.moonloader'
local imgui = require "imgui"
local fa = require "fAwesome5"
local encoding = require "encoding"
encoding.default = 'CP1251'
u8 = encoding.UTF8

local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })

local main_window = imgui.ImBool(false)
local act = imgui.ImInt(0)

local sw, sh = getScreenResolution()

function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
        font_config.MergeMode = true

        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 13.0, font_config, fa_glyph_ranges)
    end
end

function main()
    if...

LagoonNR

Известный
784
117
Окно:
oknogo = 0

imgui.BeginChild('##1' )
if imgui.Button('Главная') then
oknogo = 0
end
if imgui.Button('Hello') then
oknogo = 1
end
imgui.EndChild()

Imgui.SameLine()

if oknogo == 0 then
imgui.BeginChild('##222')
imgui.Text(u8'Приветик')
imgui.EndChild()

elseif oknogo == 1 then
...
end

Примерно так, в lua толком не шарю, но должно быть правильно
 
Последнее редактирование:

PanSeek

t.me/dailypanseek
Всефорумный модератор
906
1,773
Lua:
require 'lib.moonloader'
local imgui = require "imgui"
local fa = require "fAwesome5"
local encoding = require "encoding"
encoding.default = 'CP1251'
u8 = encoding.UTF8

local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })

local main_window = imgui.ImBool(false)
local act = imgui.ImInt(0)

local sw, sh = getScreenResolution()

function imgui.BeforeDrawFrame()
    if fa_font == nil then
        local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
        font_config.MergeMode = true

        fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 13.0, font_config, fa_glyph_ranges)
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    sampRegisterChatCommand('noob', function() main_window.v = not main_window.v end)
    while not isSampAvailable() do wait(100) end
    while true do
        wait(0)
        imgui.Process = main_window.v
    end
end

function imgui.OnDrawFrame()
    if main_window.v then
        imgui.SetNextWindowSize(imgui.ImVec2(450,220))
        imgui.SetNextWindowPos(imgui.ImVec2(sw/2,sh/2),imgui.Cond.FirstUseEver,imgui.ImVec2(0.5,0.5))
        imgui.Begin("Helper", main_window, imgui.WindowFlags.NoResize)
        imgui.BeginChild("One", imgui.ImVec2(120,180), true)
        if imgui.Selectable(fa.ICON_FA_HOME .. u8" Главная", false) then act.v = 0 end
        if imgui.Selectable(fa.ICON_FA_MALE .. u8" Второе", false) then act.v = 1 end
        if imgui.Selectable(fa.ICON_FA_CAR_SIDE .. u8" Третье", false) then act.v = 2 end
        if imgui.Selectable(fa.ICON_FA_COMMENTS .. u8" Четвёртое", false) then act.v = 3 end
        if imgui.Selectable(fa.ICON_FA_ADDRESS_BOOK .. u8" Пятое", false) then act.v = 4 end
        if imgui.Selectable(fa.ICON_FA_COGS .. u8" Шестое", false) then act.v = 5 end
        imgui.EndChild()
        imgui.SameLine()
        if act.v == 0 then
            imgui.BeginChild("Once", imgui.ImVec2(305,180), true)
            imgui.Text(u8"Тут что то обязательно будет 0")
            imgui.EndChild()
        elseif act.v == 1 then
            imgui.BeginChild("Two", imgui.ImVec2(305,180), true)
            imgui.Text(u8"Тут что то обязательно будет 1")
            imgui.EndChild()
        elseif act.v == 2 then
            imgui.BeginChild("Three", imgui.ImVec2(305,180), true)
            imgui.Text(u8"Тут что то обязательно будет 2")
            imgui.EndChild()
        elseif act.v == 3 then
            imgui.BeginChild("Four", imgui.ImVec2(305,180), true)
            imgui.Text(u8"Тут что то обязательно будет 3")
            imgui.EndChild()
        elseif act.v == 4 then
            imgui.BeginChild("Five", imgui.ImVec2(305,180), true)
            imgui.Text(u8"Тут что то обязательно будет 4")
            imgui.EndChild()
        elseif act.v == 5 then
            imgui.BeginChild("Six", imgui.ImVec2(305,180), true)
            imgui.Text(u8"Тут что то обязательно будет 5")
            imgui.EndChild()
        end
        imgui.End()
    end
end