Add MrGameEng.AI utility-AI module; format codebase with CSharpier New MrGameEng.AI module (ResponseCurve, Consideration, UtilityAction, UtilityAi selector, Blackboard) plus CSharpier formatting applied across the whole engine. Documents the CSharpier convention in CLAUDE.md. @
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
| `MrGameEng.Atlases` | Текстурные атласы: офлайн-сборка из дерева картинок (`AtlasBuilder`) и рантайм-загрузка (`TextureAtlas`); CLI — `tools/MrGameEng.AtlasTool` |
|
||||
| `MrGameEng.Tilemaps` | Тайловые карты, создаваемые кодом: `TileGrid` + `TileSet` + компонент `Tilemap`, отрисовка видимых клеток через батчер |
|
||||
| `MrGameEng.Pathfinding` | Поиск пути по гриду: A*, Dijkstra, BFS и flow fields для толп; чистая логика без зависимостей |
|
||||
| `MrGameEng.AI` | Примитивы utility-ИИ: кривые отклика, соображения, действия и выбор (`UtilityAi<TContext>`), `Blackboard`; детерминированно, generic по контексту игры, без данных мира |
|
||||
| `MrGameEng.Collisions` | Определение столкновений: компонент `Collider`, spatial hash, пары/запросы/raycast |
|
||||
| `MrGameEng.UI` | Игровой UI на [Myra](https://github.com/rds1983/Myra): `Desktop` на сцену, виджеты, скининг |
|
||||
| `MrGameEng.DevConsole` | Ингейм-консоль разработчика: логи `Log`, команды, история, автодополнение |
|
||||
@@ -226,6 +227,34 @@ CLI-обёртка: `dotnet run --project tools/MrGameEng.AtlasTool -- <исто
|
||||
инвалидируются generation-штампом — повторные запросы не аллоцируют и не чистят
|
||||
массивы. Один экземпляр на систему; результаты детерминированы.
|
||||
|
||||
## ИИ агентов (utility)
|
||||
|
||||
`MrGameEng.AI` — примитивы для принятия решений агентами (жители LittleSim).
|
||||
Зависит только от Core, **не владеет данными мира** и не привязан к ECS: всё
|
||||
параметризовано контекстом `TContext`, который игра передаёт сама (снимок восприятия,
|
||||
хендл сущности, blackboard — что угодно). Основан на Infinite-Axis Utility System:
|
||||
|
||||
- `ResponseCurve` (value type) — кривая отклика, нормализованный вход `[0,1]` →
|
||||
полезность `[0,1]`: `Linear`, `Polynomial` (степень), `Logistic` (S-кривая),
|
||||
`SmoothStep`. Вход и выход клампятся. **Внимание:** `default(ResponseCurve)` имеет
|
||||
нулевой наклон (всегда 0) — для тождества используйте `ResponseCurve.Identity`.
|
||||
- `Consideration<TContext>` — одно соображение: читает сырое значение из контекста,
|
||||
нормирует по диапазону `[min,max]` и прогоняет через кривую.
|
||||
- `UtilityAction<TContext>` — действие из набора соображений. Очки = произведение
|
||||
соображений × `Weight`; любой ноль ветирует действие. Компенсирующий множитель
|
||||
(make-up value) убирает смещение произведения многих факторов вниз.
|
||||
- `UtilityAi<TContext>` — reasoner: `Select` (детерминированно лучшее действие, при
|
||||
равенстве — первое) и `SelectWeighted(random)` (рулетка по очкам для разнообразия,
|
||||
воспроизводимо при seed). Очки пишутся в переиспользуемый буфер — повторные
|
||||
вычисления не аллоцируют; один экземпляр на вид агента, не потокобезопасен.
|
||||
- `Blackboard` — типизированная рабочая память агента (`Set`/`TryGet`/`GetOrDefault`)
|
||||
для холодных путей (восприятие, планирование).
|
||||
|
||||
Витрина в LittleSim: `PawnDecisionSystem` выбирает «бродить/отдыхать» по энергии
|
||||
жителя, `PawnNeedsSystem` тратит/восстанавливает энергию, уставшие темнеют
|
||||
(`PawnAppearanceSystem`). Команда консоли `ai [energy]` печатает очки и расклад
|
||||
отдыхающих/блуждающих.
|
||||
|
||||
## Коллизии
|
||||
|
||||
`MrGameEng.Collisions` — определение столкновений (без разрешения физики — она в бэклоге):
|
||||
|
||||
Reference in New Issue
Block a user