Заколебало. Что такое new? mimgui-1.7.1-0

ORLADOK

Участник
Автор темы
14
0
Версия MoonLoader
.027.0-preview
mimgui-basic-example.lua:
local imgui_example = { -- 7
    show = false,
    show_demo_window = new.bool(),
    show_another_window = new.bool(),
    f = new.float(0.0),
    counter = new.int(0),
    clear_color = new.float[3](0.45, 0.55, 0.60)
} -- 14


Вот такой незамысловатый код находится в примере, но единственное упоминание new я заметил лишь в init.lua и там запутался (у меня слабые познания Lua).

В общем, вопрос такой: как это все работает?

Затем:

mimgui-basic-example.lua:
    -- 3. Show another simple window.
    if imgui_example.show_another_window[0] then
        imgui.Begin("Another Window", imgui_example.show_another_window) -- ...
        imgui.Text("Hello from another window!")
        if imgui.Button("Close Me") then
            imgui_example.show_another_window[0] = false
        end
        imgui.End()
    end

Но больше всего меня прям выбешивает [0]. Что это вообще такое? Почему в обычных ситуациях (не касающихся mimgui) используется [0], а в касательных mimgui уже без этого?

Что будет, если поставить [1]? [Можно было бы по старинке пройтись debug-ом, "поломать" программу для изучения ее поведения, но зачем?]

mimgui-basic-example.lua:
    if imgui.Button("Button") then -- Buttons return true when clicked (most widgets return true when edited/activated)
        imgui_example.counter[0] = imgui_example.counter[0] + 1
    end
    imgui.SameLine()
    imgui.Text("counter = %g", imgui_example.counter[0])

Что вообще такое new . (ctype), где потом идет обращение через [0]?

P.S. Работа авторов действительно хороша, но я такой профан, что уже сутки ничего догнать не могу. И даже больше, чем сутки и чем профан...
 
Последнее редактирование:

ORLADOK

Участник
Автор темы
14
0

Кхм... Спасибо.
А я думал, что это...
init.lua:
local new = {}
setmetatable(new, {
    __index = function(self, key)
        local basetype = ffi.typeof(key)
        local mt = {
            __index = function(self, sz)
                return setmetatable({type = ffi.typeof('$[$]', self.type, sz)}, getmetatable(self))
            end,
            __call = function(self, ...)
                return self.type(...)
            end
        }
        return setmetatable({type = ffi.typeof('$[1]', basetype), basetype = basetype}, {
            __index = function(self, sz)
                return setmetatable({type = ffi.typeof('$[$]', self.basetype, sz)}, mt)
            end,
            __call = mt.__call
        })
    end,
    __call = function(self, t, ...)
        return ffi.new(t, ...)
    end
})
mimgui.new = new

S E V E N написал(а):
Сейчас появится тема или вопрос от него же, что такое ffi.new


Я в интернете не мог найти ту самую строчку, что дал мне DonHomka.
 

AnWu

Guardian of Order
Всефорумный модератор
4,687
5,167
Кхм... Спасибо.
А я думал, что это...
init.lua:
local new = {}
setmetatable(new, {
    __index = function(self, key)
        local basetype = ffi.typeof(key)
        local mt = {
            __index = function(self, sz)
                return setmetatable({type = ffi.typeof('$[$]', self.type, sz)}, getmetatable(self))
            end,
            __call = function(self, ...)
                return self.type(...)
            end
        }
        return setmetatable({type = ffi.typeof('$[1]', basetype), basetype = basetype}, {
            __index = function(self, sz)
                return setmetatable({type = ffi.typeof('$[$]', self.basetype, sz)}, mt)
            end,
            __call = mt.__call
        })
    end,
    __call = function(self, t, ...)
        return ffi.new(t, ...)
    end
})
mimgui.new = new




Я в интернете не мог найти ту самую строчку, что дал мне DonHomka.
ну оно так и есть. это замена ссылкам