Что означает .v

lightmetal

Участник
Автор темы
34
3
Версия MoonLoader
.026-beta
Что означает .v? Для меня это большая загадка, не понимаю значение.

Например
main_window_state.v = not main_window_state.v

Или например вот
settings.v = true
other.v = false
leader.v = false
add.v = false
info.v = false
 
Последнее редактирование:
  • Злость
  • Нравится
Реакции: Анонимный и qdIbp
Решение
.v - приписка imgui
Внутри функций imgui пишешь без .v, извне - с .v ( для переменных )
imgui.Begin("window", window) - без .v
if window.v then - с .v
и че это за объяснение? Не мог нормально ответить парню на его вопрос? Он спросил, ЧТО ЭТО ОЗНАЧАЕТ, а не как используется.

v это ключ имеющийся у всех объектов (созданных нами переменных) из Moon ImGui, это особенность именно этой библиотеки. Когда мы хотим получить значение переменной, а не ее указатель, мы используем именно ключ v (полн. value, что в переводе - значение). Таким образом, например:

Example:
local ImGui = require('imgui')
local window = ImGui.ImBool(false)

хочу прежде всего уточнить, что библиотека imgui.lua является лишь "посредником" нашего скрипта и самой...

СоМиК

Известный
458
314
.v - приписка imgui
Внутри функций imgui пишешь без .v, извне - с .v ( для переменных )
imgui.Begin("window", window) - без .v
if window.v then - с .v
и че это за объяснение? Не мог нормально ответить парню на его вопрос? Он спросил, ЧТО ЭТО ОЗНАЧАЕТ, а не как используется.

v это ключ имеющийся у всех объектов (созданных нами переменных) из Moon ImGui, это особенность именно этой библиотеки. Когда мы хотим получить значение переменной, а не ее указатель, мы используем именно ключ v (полн. value, что в переводе - значение). Таким образом, например:

Example:
local ImGui = require('imgui')
local window = ImGui.ImBool(false)

хочу прежде всего уточнить, что библиотека imgui.lua является лишь "посредником" нашего скрипта и самой библиотеки Dear ImGui, в которой и происходит выполнение всей логики вместе с отображением графического интерфейса. Когда мы подгружаем скрипт imgui.lua, эта библиотека в свою очередь подгружает в себя уже настоящую библиотеку, написанную на C, это и есть MoonImGui.dll

Итак, в коде мы используем функцию ImBool из imgui.lua, которая благодаря FFI создаёт специальный объект CDATA (объект из языка C). Почему именно язык C? Потому что абсолютно вся логика библиотеки обрабатывается в сбилженной под луажит 2.1 дллке имгуишки на языке C, о чём я и писал выше. Так как языки Lua и C разные, то и типы данных друг друга эти языки понять не могут. Для этого библиотека Moon ImGui при вызове функции ImBool создаёт специальную переменную на языке C, которая будет иметь тип bool (полн. boolean) и будет обрабатываться в коде этой самой библиотеки ImGui внутри дллки. Но как же получить значение этой переменной, если создаётся она внутри языка C, из за чего прочитать нормально этот тип данных Lua не может? Тут нам помогает та самая залупа из Moon ImGui.

Функция ImBool возвращает таблицу, внутри которой под ключом v находится наше boolean значение переменной, которую за нас уже в автоматическом режиме перевела на понятный Lua тип данных та самая библиотека-посредник imgui.lua. Проще говоря, эта библиотека imgui.lua просто связывает наш скрипт с имгуи, написанным на другом языке, отличным от Lua. Отсюда и ключ v.

Вот небольшой абстрактный псевдопример:

Example:
ImType = function(value)
    local randomTable = {}
    local randomCData = ffi.new("randomDataType", value)
    randomTable.v = randomCData[0]
    return randomTable
end

randomImData = ImType(123)

print(randomImData) -- output: table: 0x........
print(randomImData.v) -- output: 123

В примере я использовал ImBool, но всё аналогично и с другими типами данных, вроде ImInt, ImFloat и др.

А вообще мой тебе совет, используй mimgui, разница между библиотеками минимальна, зато работает эта библиотека лучше за счёт более новой версии. Как минимум там есть новые функции и улучшена оптимизация.

Moon ImGui - Dear ImGui v1.52
mimgui - Dear ImGui v1.72
официальная версия которую ещё не сбилдили под LuaJIT 2.1 - Dear ImGui v1.90.4
 
Последнее редактирование: