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

> Как устроены оконные интерфейсы в скриптах MoonLoader: что такое Dear ImGui и mimgui, как выглядит код окна, зачем нужен визуальный редактор ImGUI Editor.

- URL: https://pakulichev.com/wiki/imgui-for-gta-sa
- Author: Pakulichev (https://pakulichev.com/)
- Language: ru
- Updated: 2026-10-15
- Whole site for LLMs: https://pakulichev.com/llms.txt (index), https://pakulichev.com/llms-full.txt (full text)

**Dear ImGui** – популярная библиотека для интерфейсов в режиме «immediate mode». В отличие от классических GUI-фреймворков, окно здесь описывается кодом, который выполняется каждый кадр: «нарисуй кнопку; если нажата, сделай X». Для игровых модификаций это очень удобно, потому что интерфейс живёт прямо в игровом цикле.

## ImGui в MoonLoader

Для MoonLoader есть привязки Dear ImGui к Lua: сначала появилась `imgui`, потом **mimgui** на LuaJIT FFI. С ними у скриптов для SA:MP появились полноценные окна с настройками, меню, таблицами, вкладками и поиском.

Пример простого окна на mimgui:

```lua
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](https://pakulichev.com/projects/imgui-editor): в нём интерфейс собирается мышью, а на выходе получается готовый код.

## Советы

- Храните состояние (флажки, буферы ввода) вне функции отрисовки.
- Выносите стили и цвета в отдельную функцию темы.
- Используйте `imgui.Cond.FirstUseEver`, чтобы пользователь мог двигать окно.
- Не выполняйте тяжёлую логику внутри кадра – только отрисовку.

## FAQ

### Что такое Dear ImGui?

Dear ImGui – библиотека немедленного режима (immediate mode GUI) на C++ для создания интерфейсов: окна, кнопки, поля ввода, вкладки. Её широко используют в играх, инструментах и отладочных панелях.

### Что такое mimgui?

mimgui – привязка Dear ImGui для MoonLoader на LuaJIT FFI. Она позволяет рисовать интерфейсы ImGui поверх GTA: San Andreas прямо из Lua-скрипта.

### Зачем нужен визуальный редактор ImGui?

Верстать окна кодом долго: приходится много раз перезапускать скрипт, подбирая размеры и позиции. Визуальный редактор, такой как ImGUI Editor, позволяет собрать интерфейс мышью и получить готовый Lua-код.
