* docs(sensing): propose UE5-aligned targeting pipeline design Document gaps between EVEngine sensing/Targeting* and UE5 GameplayTargetingSystem, and a phased Preset/Task plan that keeps candidate scoring out of domain semantics. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * docs(sensing): make QuerySpec the unified SensingWorld query surface Revise the targeting design so SensingWorld owns one configurable QuerySpec path; Provider/Resolver become compatibility adapters, and Phase 1 targets semantic unification instead of a thin bridge only. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * feat(sensing): unify SensingWorld queries behind QuerySpec Add SensingWorld::query with CountPolicy/top-K ranking, route circle/box through it, and adapt Targeting via SensingWorldCandidateProvider so RTS and Action share one candidate fact source without inventing domain relations. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * feat(sensing): add TargetingPipeline presets, cone geometry, executePreset Phase 2 of the UE5-aligned targeting design: registerable Select/Filter/Sort tasks, QueryCone + WorldArea::cone2D, script executePreset, and usr docs. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * feat(sensing): migrate RTS acquisition to QuerySpec; add PerceptionFact bridge Phase 3 consumer work: CombatFireSystem builds QuerySpec instead of circle sugar while keeping RTS priority selection local. Add perceptionFactsFrom for npc_ai adapters; weapon lock-on remains deferred until that path exists. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * feat(sensing): optional SpatialHash2D broadphase and last-query debug JSON Add SensingWorld::setSpatialIndexEnabled for an opt-in SpatialHash2D cull before QuerySpec filtering, plus debugLastQueryJson for MCP/debug overlays. Keep sorting/filtering QuerySpec-owned; document Phase 4 and cover parity with linear scan in tests. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * feat(sensing): mirror zone membership onto TargetCandidate.zones Add SensingWorld::setZones for LogicalId membership facts, project them through SensingWorldCandidateProvider, and honor TargetingSpec.zone filters. Snapshot/restore and script bindings round-trip zones. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * feat(npc_ai): adapt sensing PerceptionFact into PerceptionMemory Add npc_ai/SensingPerception.h helpers that copy ranked sensing facts into adapter-owned perception memories without creating a sensing→npc_ai dependency. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> * docs(sensing): document Candidate and owned-world script bindings Cover getId/getX/getY/getDistance, getName, and ownership/ownerEpoch/handle so Source quality --strict binding checks pass for the sensing module. Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
EVEngine 开发者文档
本目录保存引擎的架构、模块设计、测试策略和实现计划,面向 EVEngine 本身的维护者与贡献者。
如果你是游戏开发者而不是引擎开发者:请从官网发布页 下载预编译 SDK 直接使用,不需要编译引擎;用户文档见用户指南与 模块使用手册。本目录及下文“从源码构建”只对需要修改引擎的人有意义。
架构与工程约定
- 发布流程(
main/dev/vX.X.X,Pre-release 发版) - 整体架构
- 模块设计与实现进度
- 模块编排与裁剪架构(实测依赖分层、协作接缝、按需裁剪;用户侧用法见按需裁剪模块)
- EveScript 语言设计(统一
.nut前端、脚本模块、类型、持久变量与异步 lowering) - 依赖项
- 命令行设计
- 测试覆盖
- AI 与 MCP 支持
- AI 场景导演(剧情 → 自动搭台 → 质检迭代 → 交付)
- 游戏开发系统与工具差距分析
功能设计
- 2D 渲染 API
- 3D 渲染管线(初始化 / VKBuilder / 异步帧、buffers、数据流、函数与 shader)
- 体积光模块
- 抗锯齿模块
- 风格化渲染模块
- GUI 框架
- Tilemap
- 寻路系统
- 动态视野系统
- 程序化生成模块
- 体积光模块
- 环境光遮蔽模块
- 风格化渲染模块
- RPG 系统
- RPG 任务系统
- 背包系统
- 建筑放置系统
- 空间索引模块
- 游戏模型
- 界面设计
- 修改思路
实施记录
阶段性设计稿与实施计划位于 superpowers/。文档使用的图示位于 img/。
构建与文档
-
生成 C++ API 文档(Doxygen):
make docs(或cmake --build <build-dir> --target docs), 产物位于docs/api/html/(已加入.gitignore)。需要先安装 doxygen: Ubuntu/WSLsudo apt install doxygen、macOSbrew install doxygen、Windowschoco install doxygen。 文档配置见docs/Doxyfile.in与docs/CMakeLists.txt,入口src/、Readme.md与docs/usr/。 在线版由 GitHub Pages 持续发布:https://evengine.github.io/EVEngine/。 -
运行时断言:引擎统一通过 zeroerr 的
ASSERT系列宏做函数参数校验与内部不变量检查, 入口见src/engine/common/Assert.h(EV_PARAM_CHECK/EV_ASSERT)。- Debug 构建默认启用;
- Release 等非 Debug 构建默认通过
ZEROERR_NO_ASSERT编译剔除,零运行时开销; - 需要手动开启时:
make build/linux CMAKE_EXTRA_ARGS=-DEVENGINE_ENABLE_ASSERTS=ON(或 CMake 配置时加-DEVENGINE_ENABLE_ASSERTS=ON)。
如果你是使用 EVEngine 制作游戏,而不是修改引擎,请从用户指南开始。