Добавление кнопок, полей ввода и т.д. ImGui

A S K I T

Активный
Автор темы
201
69
Версия MoonLoader
.026-beta
Привет.
Нужно сделать бесконечное(в лучшем случае) добавление элементов imgui, по нажатию кнопки "+".
Представьте биндер, в котором вы нажимаете кнопку и вводите новый бинд.

Ну и так-же нужно чтобы с этих элементов всё записывалось в конфиг.

1634149995211.png
 

Rice.

https://t.me/riceoff
Модератор
1,681
1,371
Привет.
Нужно сделать бесконечное(в лучшем случае) добавление элементов imgui, по нажатию кнопки "+".
Представьте биндер, в котором вы нажимаете кнопку и вводите новый бинд.

Ну и так-же нужно чтобы с этих элементов всё записывалось в конфиг.

Посмотреть вложение 117802
Lua:
-- Где-то в скрипте
local cfg = inicfg.load({ -- Создаем конфиг ini
    name_binder = {},
    text_binder = {}
}, "Tabl")

local name_binder =  imgui.ImBuffer('',256) -- Название бинда
local text_binder = imgui.ImBuffer(65536) -- Текст бинда


-- Imgui
imgui.InputText('##NameBinder', name_binder, imgui.ImVec2(-1, 20)) -- Записываем название бинда
imgui.InputTextMultiline("##TextBinder", text_binder, imgui.ImVec2(-1, 250)) -- Записываем текст бинда
if imgui.Button('Create') then -- Создаем бинд с названием name_binder.v и текстом text_binder.v
    table.insert(cfg.name_binder, name_binder.v)
    table.insert(cfg.text_binder, text_binder.v)
    inicfg.save(cfg, 'Tabl.ini')
end
 

A S K I T

Активный
Автор темы
201
69
Lua:
-- Где-то в скрипте
local cfg = inicfg.load({ -- Создаем конфиг ini
    name_binder = {},
    text_binder = {}
}, "Tabl")

local name_binder =  imgui.ImBuffer('',256) -- Название бинда
local text_binder = imgui.ImBuffer(65536) -- Текст бинда


-- Imgui
imgui.InputText('##NameBinder', name_binder, imgui.ImVec2(-1, 20)) -- Записываем название бинда
imgui.InputTextMultiline("##TextBinder", text_binder, imgui.ImVec2(-1, 250)) -- Записываем текст бинда
if imgui.Button('Create') then -- Создаем бинд с названием name_binder.v и текстом text_binder.v
    table.insert(cfg.name_binder, name_binder.v)
    table.insert(cfg.text_binder, text_binder.v)
    inicfg.save(cfg, 'Tabl.ini')
end
Спасибо, только не понял, как это использовать?
Допустим, мне нужно записывать значения: '/ban', 'time', 'reason', и создавать новые кнопки, т.е, добавлять бинд наказаний, добавил бинд - создалась новая кнопка, и так до бесконечности, как это сделать?
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,763
11,196
Lua:
local imgui = require('imgui')
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local window = imgui.ImBool(false)

local items = {
    {text = imgui.ImBuffer('/lock', 256), bind = imgui.ImInt(49), state = imgui.ImBool(true)}
}
local add_popup = {bind = imgui.ImInt(49), text = imgui.ImBuffer('bind #'..tostring(#items + 1)..' TEXT', 256)}


function main()
    while not isSampAvailable() do wait(200) end
    imgui.Process = false
    window.v = true  --show window
    while true do
        wait(0)
        imgui.Process = window.v
        for i = 1, #items do
            if wasKeyPressed(items[i].bind.v) then
                sampSendChat(items[i].text.v)
            end
        end
    end
end

function imgui.OnDrawFrame()
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2(350.0, 250.0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowSize(imgui.ImVec2(280.0, 70.0), imgui.Cond.FirstUseEver)
        imgui.Begin('Window Title', window)

        for i = 1, #items do
            if items[i] then
                imgui.Checkbox('checkbox for: '..items[i].text.v, items[i].state)
                imgui.SameLine()
                if imgui.Button('delete') then
                    table.remove(items, i)
                end
            end
        end
        
        if imgui.Button('Add new') then
            imgui.OpenPopup('Add new item')
        end
        
        if imgui.BeginPopupModal('Add new item', true, imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoResize) then
            imgui.SetWindowSize(imgui.ImVec2(300, 200))
            imgui.InputInt('New bind KEY ID', add_popup.bind)
            imgui.InputText('New bind TEXT', add_popup.text)
            if imgui.Button('ADD!') then
                table.insert(items, {text = imgui.ImBuffer(add_popup.text.v, 256), bind = imgui.ImInt(add_popup.bind.v), state = imgui.ImBool(true)})
                imgui.CloseCurrentPopup()
            end
            if imgui.Button('CLOSE') then
                imgui.CloseCurrentPopup()
            end
            imgui.EndPopup()
        end

        imgui.End()
    end
end