вонючие каллбеки | imgui.InputTextFlags.CallbackCharFilter

ChаtGPT

Активный
Автор темы
402
96
Версия MoonLoader
.026-beta
Помогите пожалуйста, эти каллбеки меня полностью изнасиловали. Я не понимаю, почему им не нравится цикл:
Создал кастомный инпут текст с 4 инпутами и сделал фильтр на пропуск только '0' и '1'. При использовании функции, при вводе что-то в инпут - зависает и крашит. Если просто создать 4 инпута без цикла, все будет работать. Я вообще не понимаю почему. Что тут происходит.

Lua:
local imgui, ffi = require('mimgui'), require('ffi')


local input = { imgui.new.char[4 + 1](), imgui.new.char[4 + 1](), imgui.new.char[4 + 1](), imgui.new.char[4 + 1]() }

local callback = ffi.cast("int(*)(ImGuiInputTextCallbackData*)", function(data)
    local result, char = pcall(string.char, data.EventChar)
    return (not result or char:find("[01]")) and 0 or 1
end)

local InputText4 = function(buffers, callback)
    --for i = 1, 4 do
    --    local bufferStr = ffi.string(buffers[i])
    --    if #bufferStr < 4 then
    --        local rep = string.rep("-", 4)
    --        ffi.copy(buffers[i], rep)
    --    end
    --end

    for i = 1, 4 do
        imgui.InputText('##'..i, buffers[i], ffi.sizeof(buffers[i]), imgui.InputTextFlags.CallbackCharFilter, callback)
    end
end

imgui.OnFrame(function() return true end,
    function()
        --InputText4(input, callback) -- зависание..краш

        -- каким-то хуем работает
        imgui.InputText('##1', input[1], ffi.sizeof(input[1]), imgui.InputTextFlags.CallbackCharFilter, callback)
        imgui.InputText('##2', input[2], ffi.sizeof(input[2]), imgui.InputTextFlags.CallbackCharFilter, callback)
        imgui.InputText('##3', input[3], ffi.sizeof(input[3]), imgui.InputTextFlags.CallbackCharFilter, callback)
        imgui.InputText('##4', input[4], ffi.sizeof(input[4]), imgui.InputTextFlags.CallbackCharFilter, callback)
    end
)

Хотя если установить ключи
local input = { [1] = imgui.new.char[4 + 1](), [1] = imgui.new.char[4 + 1](), [2] = imgui.new.char[4 + 1](), [3] = imgui.new.char[4 + 1]() }
и перебивать циклом pairs, то вроде работает. Но почему через
for i =1, 4 do не работает? Индексация таблиц с 1 начинается же..

up
 
Последнее редактирование:

ChаtGPT

Активный
Автор темы
402
96
UP
(ебал рот эти каллбекчарФИЛЬТР)

Lua:
local buffers= {
    [1] = imgui.new.char[4 + 1](),
    [2] = imgui.new.char[4 + 1](),
    [3] = imgui.new.char[4 + 1](),
    [4] = imgui.new.char[4 + 1](),
    [5] = imgui.new.char[4 + 1](),
},

local ebaniy_callback = ffi.cast("int(*)(ImGuiInputTextCallbackData*)", function(data)
    local result, char = pcall(string.char, data.EventChar)
    return (not result or char:find("[01-]")) and 0 or 1
end),

function imgui.InputText5(buffers, callback, prefix)
    for i = 1, #buffers do
        imgui.InputText("##1"..prefix, buffers[i], ffi.sizeof(buffers[i]), imgui.InputTextFlags.CallbackCharFilter, callback)
    end
end

-- где-то в фрейме
imgui.InputText5(buffers, ebaniy_callback, "ebaniy_callback")

Проблема: при вводе в инпут символ - вылет игры без краша.
 
Последнее редактирование: