Imgui.net => Hexa.net
- ✅ Рендер ImGui стабильно (GL state сохраняется/восстанавливается, SwapAllBuffers hook).
- ✅ Ввод мыши (Move/Wheel + mouse buttons через KeyDown/KeyUp) прокидывается в ImGui.
- ✅ Реальный текстовый ввод SDL3 → ImGui:
- патч
Clyde+Sdl3WindowingImpl.ProcessSdl3EventTextInput(in SDL_TextInputEvent) - корректная распаковка
ev.textкакSystem.Reflection.Pointer→Marshal.PtrToStringUTF8 EnqueueTextпо Unicode runes (русские приходят как кодпоинты)
- патч
- ✅ SDL text input включается/выключается из оверлея через Robust API:
Sdl3WindowingImpl.TextInputStart(WindowReg)Sdl3WindowingImpl.TextInputStop(WindowReg)
- ✅ Блокировка текста, уходящего в UI игры (пока открыт оверлей/ImGui активен):
- патч
UserInterfaceManager.TextEntered/TextEditing(InputPatchUiTextBlock)
- патч
- ✅ Удалены неработающие/шумные старые текстовые патчи (глобальный/узкий скан).
Завязать весь “спамящий” лог на
Config.AdvancedLoggingили лимитироватьlogBudget:RenderPatch:[ImGui] RenderImGui frame #...RenderPatch:[ImGui] DrawData(after Render): ...OverlayMenu:[OverlayMenu] Drawing frame #...InputPatchMouse: MouseMove / MouseWheelInputPatch: KeyDown / KeyUpInputPatchSdl3RealTextInput:TEXT_INPUT="..."(только при AdvancedLogging илиlogBudget)RenderPatch.SyncSdlTextInput: логwant/enabledтолько в debug-режиме.
Добавить чекбокс в Settings: “Advanced logging (spam)”.
При переключении писать один
Infoлог: включили/выключили.
Починить отображение кириллицы (сейчас
?):- добавить загрузку TTF с кириллицей в ImGui font atlas (NotoSans/DejaVuSans)
- добавить glyph ranges: Cyrillic + Default
- продумать доставку шрифта:
- файл рядом с модом или
- embedded resource или
- системный путь (Linux: DejaVuSans, Noto)
IME/compose:
- при необходимости добавить патч на
ProcessSdl3EventTextEditing(in SDL_TextEditingEvent)и поддержку preedit (если понадобится для CJK) - опционально синхронизировать
CmdTextInputSetRect(курсорно‑прямоугольник) под ImGui InputText, чтобы IME окно появлялось в правильном месте
- при необходимости добавить патч на
ASCII‑fallback больше не нужен для нормального ввода (оставить только как аварийный флаг/режим разработки, либо удалить полностью).
Финализировать политику “когда блокируем”:
- мышь:
WantCaptureMouse || LastMouseOverUi(плюс “первый клик”) - клава:
WantCaptureKeyboardи/или отдельный режим “UI active” (не всегда равенWantCaptureKeyboard) - текст: блокировать строго при
WantTextInput(чтобы бинды не ломались)
- мышь:
ResetAllInputs():- при закрытии меню (уже есть)
- при потере фокуса окна игры / alt-tab (если поймаешь focus event из Clyde/SDL)
- при смене режима захвата (когда ImGui начал/закончил ввод текста)
Проверить edge-case “залипание”:
- гарантировать согласованность KeyDown/KeyUp (suppressed state для событий, которые заблокированы)
- Логи: default off, UI toggle
- Стабилизировать SyncSdlTextInput (без спама, с fail-safe)
- Убедиться что текст/мышь/клава работают без дублей
- Подключить TTF с кириллицей
- Опционально IME preedit (
TextEditing) +SetTextInputRect
- Отдельный режим “Overlay active” vs “Text input active”
- Бинды оверлея (hotkeys) без конфликтов с текстовым вводом
- Нормальное поведение при фокусе/alt-tab/Wayland
Entry.cs— точка входа, ждётContent.Client, запускаетHarmony.PatchAll.SubverterPatch.cs— инстанс Harmony.Logger.cs (MarseyLogger)— вывод логов в лоадер.Config.cs— глобальные флаги (напримерAdvancedLogging).
RenderPatch.cs— хук наClyde+GLContextWindow.SwapAllBuffers, кадр ImGui:- ApplyEvents → NewFrame → Draw UI → Snapshot → Render
- синхронизация SDL text input (Start/Stop через Robust API)
ImGuiController.cs— OpenGL backend для ImGui + место для загрузки шрифтов (кириллица/Unicode)RobustGL.cs— reflection‑обёртка под урезанный OpenTK GL APIGLNative.cs— нативныйglGetIntegerv(GL_VIEWPORT)для размеров
ImGui.cs (ImGuiInputBridge)— очередь input‑событий, ApplyEventsToIo, snapshot WantCapture/WantsTextInput/Focus, правила блокировкиInputPatch.cs—InputManager.KeyDown/KeyUp: маппинг клавиш и mouse buttons, контекст для bind‑blockInputPatchMouse.cs—GameController.MouseMove/MouseWheel: позиция/колесоInputPatchBindBlock.cs—InputManager.DownBind/UpBind: блокировка игровых биндов (без зависимости от args.Handled)InputPatchSdl3RealTextInput.cs— SDL3TEXT_INPUT→EnqueueText(реальный UTF‑8 ввод)InputPatchUiTextBlock.cs— блокировкаUserInterfaceManager.TextEntered/TextEditing, чтобы текст не уходил в UI игры, когда ImGui активенKeyMapper.cs—keyName→ImGuiKeyArgsReflection.cs— fast reflection reader для args (mouse/wheel/text)
OverlayMenu.cs— окна ImGui, тестовые поля ввода, scratchpad, диагностика, toggle/close