ImGui в GTA: San Andreas – интерфейсы для Lua-скриптов

Откуда у скриптов для SA:MP окна и меню и как их делают.

Автор: Опубликовано: Обновлено: 1 мин чтения

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-код.