Skip to content
DobriyKabanPublic

About

backup

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

14 Commits

Folders and files

Repository files navigation

In Future

Imgui.net => Hexa.net

TODO / Roadmap

Легенда:
HIGH
MED
LOW


✅ Уже сделано (baseline)

  • ✅ Рендер 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)
  • ✅ Удалены неработающие/шумные старые текстовые патчи (глобальный/узкий скан).

🔥 Основной TODO

Логи / спам в консоль

  • HIGH Завязать весь “спамящий” лог на Config.AdvancedLogging или лимитировать logBudget:
    • RenderPatch: [ImGui] RenderImGui frame #...
    • RenderPatch: [ImGui] DrawData(after Render): ...
    • OverlayMenu: [OverlayMenu] Drawing frame #...
    • InputPatchMouse: MouseMove / MouseWheel
    • InputPatch: KeyDown / KeyUp
    • InputPatchSdl3RealTextInput: TEXT_INPUT="..." (только при AdvancedLogging или logBudget)
    • RenderPatch.SyncSdlTextInput: лог want/enabled только в debug-режиме.

UI‑переключатель логов

  • MED Добавить чекбокс в Settings: “Advanced logging (spam)”.
  • MED При переключении писать один Info лог: включили/выключили.

📝 Текстовый ввод (ImGui InputText) — что осталось

  • HIGH Починить отображение кириллицы (сейчас ?):
    • добавить загрузку TTF с кириллицей в ImGui font atlas (NotoSans/DejaVuSans)
    • добавить glyph ranges: Cyrillic + Default
    • продумать доставку шрифта:
      • файл рядом с модом или
      • embedded resource или
      • системный путь (Linux: DejaVuSans, Noto)
  • MED IME/compose:
    • при необходимости добавить патч на ProcessSdl3EventTextEditing(in SDL_TextEditingEvent) и поддержку preedit (если понадобится для CJK)
    • опционально синхронизировать CmdTextInputSetRect (курсорно‑прямоугольник) под ImGui InputText, чтобы IME окно появлялось в правильном месте

ASCII‑fallback больше не нужен для нормального ввода (оставить только как аварийный флаг/режим разработки, либо удалить полностью).


🎮 Блокировка ввода игры / политика захвата

  • HIGH Финализировать политику “когда блокируем”:
    • мышь: WantCaptureMouse || LastMouseOverUi (плюс “первый клик”)
    • клава: WantCaptureKeyboard и/или отдельный режим “UI active” (не всегда равен WantCaptureKeyboard)
    • текст: блокировать строго при WantTextInput (чтобы бинды не ломались)
  • MED ResetAllInputs():
    • при закрытии меню (уже есть)
    • при потере фокуса окна игры / alt-tab (если поймаешь focus event из Clyde/SDL)
    • при смене режима захвата (когда ImGui начал/закончил ввод текста)
  • MED Проверить edge-case “залипание”:
    • гарантировать согласованность KeyDown/KeyUp (suppressed state для событий, которые заблокированы)

🧭 Roadmap (по этапам)

Milestone 1 — “Чистый ввод + минимум мусора”

  • Логи: default off, UI toggle
  • Стабилизировать SyncSdlTextInput (без спама, с fail-safe)
  • Убедиться что текст/мышь/клава работают без дублей

Milestone 2 — “Русский/Unicode UI”

  • Подключить TTF с кириллицей
  • Опционально IME preedit (TextEditing) + SetTextInputRect

Milestone 3 — “Политика захвата и бинды”

  • Отдельный режим “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).

Рендер ImGui / OpenGL

  • 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 API
  • GLNative.cs — нативный glGetIntegerv(GL_VIEWPORT) для размеров

Ввод / блокировка

  • ImGui.cs (ImGuiInputBridge) — очередь input‑событий, ApplyEventsToIo, snapshot WantCapture/WantsTextInput/Focus, правила блокировки
  • InputPatch.cs — InputManager.KeyDown/KeyUp: маппинг клавиш и mouse buttons, контекст для bind‑block
  • InputPatchMouse.cs — GameController.MouseMove/MouseWheel: позиция/колесо
  • InputPatchBindBlock.cs — InputManager.DownBind/UpBind: блокировка игровых биндов (без зависимости от args.Handled)
  • InputPatchSdl3RealTextInput.cs — SDL3 TEXT_INPUT → EnqueueText (реальный UTF‑8 ввод)
  • InputPatchUiTextBlock.cs — блокировка UserInterfaceManager.TextEntered/TextEditing, чтобы текст не уходил в UI игры, когда ImGui активен
  • KeyMapper.cs — keyName → ImGuiKey
  • ArgsReflection.cs — fast reflection reader для args (mouse/wheel/text)

UI

  • OverlayMenu.cs — окна ImGui, тестовые поля ввода, scratchpad, диагностика, toggle/close

About

backup

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages