как сделать нормальный поиск на mimgui

Slavka Priore

Активный
Автор темы
114
38
Версия MoonLoader
.026-beta
Нужно сделать поиск, который будет работать с маленькими буквами, также не будет жрать дохрена фпс. Нигде не нашел как, помогайте


lua:
local imgui = require('mimgui')
local encoding = require('encoding')
encoding.default = ('CP1251')
local u8 = encoding.UTF8

local gui = imgui.new.bool()

local texts = {
    'Почему программисты не любят природу? Потому что в ней слишком много багов.',
    'Почему коты не любят интернет? Они предпочитают реальные мыши.',
    'Как программист делает покупки? Он добавляет в корзину, а потом удаляет ее.',
    'Что напишет программист в его анкету? "Я кодирую! "',
    'Почему компьютер на диете? Потому что у него слишком много "битов".',
    'Какой самый веселый элемент в таблице Менделеева? "Сн", потому что он всегда "смешной".',
    'Почему сломанный компьютер не может спать? Потому что у него проблемы с "диском".',
    'Почему собаки никогда не становятся программистами? Они всегда отказываются от "программирования".',
    'Как программист отмечает свой день рождения? Он устанавливает "апдейт".',
    'Почему жирафы не любят программировать? У них слишком длинные "переменные".',
    'Что сказал один сервер другому? "Слушай, у меня проблемы с соединением!"',
    'Почему математики ненавидят лес? Потому что там слишком много "корней".',
    'Как понять, что программист устал? Он начинает ошибаться в "кодах".',
    'Почему тестировщики не работают в зоопарках? Потому что они слишком часто находят "багов".',
    'Что получает программист, когда сталкивается с пчелами? "Код ошибки - Б"!'
}

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage('jopka')
    sampRegisterChatCommand('gui', function()
        gui[0] = not gui[0]
    end)
end

imgui.OnFrame(
    function() return gui[0] and not isPauseMenuActive() and not sampIsScoreboardOpen() end,
    function(menu)

        local clipper = imgui.ImGuiListClipper(#texts)
        while clipper:Step() do
        for i = clipper.DisplayStart + 1, clipper.DisplayEnd do
            imgui.Text(u8(texts[i]))
        end
        end

end)
 

Орк

Известный
268
170

Slavka Priore

Активный
Автор темы
114
38

Gorskin

♥ Love Lua ♥
Проверенный
1,338
1,178
если делать через обычный for, то на слабых устройствах будет 3 фпс
Не будет, ты скорее всего напрямую читаешь из файла какого-нибудь и там же вызываешь постоянное открытие. Я когда-то давно делал поиск по списку, там у меня искало и в верхнем регистре и в нижнем.


imguiInputsCmdEditor - массив с командами и их описанием.
orderedPairs - сортировщик по алфавиту (кастом)
Lua:
imgui.NewInputText('##SearchBar', buffers.search_cmd, 300, u8'Поиск по списку', 2)
                        imgui.Separator()
                        imgui.PushItemWidth(130)
                        for k, v in orderedPairs(imguiInputsCmdEditor) do
                            if str(buffers.search_cmd) ~= "" then
                                if k:find(str(buffers.search_cmd)) or str(v.var):find(str(buffers.search_cmd)) then
                                    if imgui.InputText(k, v.var, sizeof(v.var)) then
                                        local cmd = string.lower(str(v.var))
                                        ini.commands[v.cfg] = cmd
                                        save()
                                    end
                                end
                            else
                                if imgui.InputText(k, v.var, sizeof(v.var)) then
                                    local cmd = string.lower(str(v.var))
                                    ini.commands[v.cfg] = cmd
                                    save()
                                end
                            end
                        end