ImGui в GTA: San Andreas – интерфейсы для Lua-скриптов
Откуда у скриптов для SA:MP окна и меню и как их делают.
Dear ImGui – популярная библиотека для интерфейсов в режиме «immediate mode». В отличие от классических GUI-фреймворков, окно здесь описывается кодом, который выполняется каждый кадр: «нарисуй кнопку; если нажата, сделай X». Для игровых модификаций это очень удобно, потому что интерфейс живёт прямо в игровом цикле.
ImGui в MoonLoader
Для MoonLoader есть привязки Dear ImGui к Lua: сначала появилась imgui, потом mimgui на LuaJIT FFI. С ними у скриптов для SA:MP появились полноценные окна с настройками, меню, таблицами, вкладками и поиском.
Пример простого окна на mimgui:
local imgui = require("mimgui")
local show = imgui.new.bool(true)
imgui.OnFrame(function() return show[0] end, function()
imgui.SetNextWindowSize(imgui.ImVec2(320, 160), imgui.Cond.FirstUseEver)
imgui.Begin("Pakulichev", show)
imgui.Text("Привет из ImGui!")
if imgui.Button("Закрыть") then show[0] = false end
imgui.End()
end)
Типичные элементы интерфейса
| Элемент | Функция ImGui | Где используется |
|---|---|---|
| Окно | Begin / End |
Любое меню скрипта |
| Кнопка | Button |
Действия, бинды |
| Флажок | Checkbox |
Включение функций |
| Поле ввода | InputText |
Ники, команды, текст отыгровок |
| Вкладки | BeginTabBar / BeginTabItem |
Разделы настроек |
| Дочерняя область | BeginChild |
Списки, прокрутка |
Проблема ручной вёрстки
Размеры, отступы, позиции и стили каждого окна подбираются вручную. На большом интерфейсе это долго. Поэтому я и сделал ImGUI Editor: в нём интерфейс собирается мышью, а на выходе получается готовый код.
Советы
- Храните состояние (флажки, буферы ввода) вне функции отрисовки.
- Выносите стили и цвета в отдельную функцию темы.
- Используйте
imgui.Cond.FirstUseEver, чтобы пользователь мог двигать окно. - Не выполняйте тяжёлую логику внутри кадра – только отрисовку.
Частые вопросы
Что такое Dear ImGui?
Dear ImGui – библиотека немедленного режима (immediate mode GUI) на C++ для создания интерфейсов: окна, кнопки, поля ввода, вкладки. Её широко используют в играх, инструментах и отладочных панелях.
Что такое mimgui?
mimgui – привязка Dear ImGui для MoonLoader на LuaJIT FFI. Она позволяет рисовать интерфейсы ImGui поверх GTA: San Andreas прямо из Lua-скрипта.
Зачем нужен визуальный редактор ImGui?
Верстать окна кодом долго: приходится много раз перезапускать скрипт, подбирая размеры и позиции. Визуальный редактор, такой как ImGUI Editor, позволяет собрать интерфейс мышью и получить готовый Lua-код.