Files
XCEngine/docs/blueprint.md

27 KiB
Raw Blame History

XCEngine 蓝图


SYSTEM_META

name: XCEngine
version: 0.1.0
type: game-engine
description: "模块化的 C++17 游戏引擎,支持 D3D12 和 OpenGL 双图形后端"
target_runtime: C++17

SYSTEM_STRUCTURE

root: XCEngine

subsystems:
  - name: Core
    responsibilities:
      - "提供基础类型别名和断言机制"
      - "实现引用计数智能指针"
      - "提供线程安全的事件发布/订阅系统"
      - "提供文件写入 RAII 封装"
    provides: [RefCounted, Event, FileWriter, SmartPtr]
    depends_on: []
    boundary:
      inputs: []
      outputs: [类型系统]

  - name: Math
    responsibilities:
      - "实现向量、矩阵、四元数数学运算"
      - "提供变换Transform层次组合"
      - "实现几何基元(平面、球体、盒子、射线、视锥体)"
    provides: [Vector, Matrix, Quaternion, Transform, Geometry]
    depends_on: [Core]
    boundary:
      inputs: [Core 类型]
      outputs: [数学计算结果]

  - name: Containers
    responsibilities:
      - "提供动态数组模板"
      - "提供字符串处理功能"
      - "提供基于开放寻址的哈希表"
    provides: [Array, String, HashMap]
    depends_on: [Core, Memory]
    boundary:
      inputs: [Core 类型]
      outputs: [容器实例]

  - name: Memory
    responsibilities:
      - "定义内存分配器抽象接口"
      - "实现线性分配器(栈式)"
      - "实现池分配器(固定大小块)"
      - "提供代理分配器(统计追踪)"
      - "管理全局内存系统"
    provides: [IAllocator, LinearAllocator, PoolAllocator, ProxyAllocator, MemoryManager]
    depends_on: [Core]
    boundary:
      inputs: [分配请求]
      outputs: [内存块]

  - name: Threading
    responsibilities:
      - "封装线程 RAII 管理"
      - "提供互斥锁、自旋锁、读写锁"
      - "实现任务系统和线程池"
      - "支持任务依赖和优先级调度"
    provides: [Thread, Mutex, TaskSystem, TaskGroup]
    depends_on: [Core, Containers]
    boundary:
      inputs: [任务函数]
      outputs: [执行结果]

  - name: Debug
    responsibilities:
      - "提供多层级分类日志系统"
      - "支持多种日志输出目标(控制台、文件)"
      - "实现性能分析器和 Chrome 追踪导出"
    provides: [Logger, Profiler, ILogSink]
    depends_on: [Core, Containers, Threading]
    boundary:
      inputs: [日志消息]
      outputs: [日志输出]

  - name: Resources
    responsibilities:
      - "管理所有游戏资源的生命周期"
      - "实现资源加载器框架和多种格式支持"
      - "提供 LRU 缓存和内存预算控制"
      - "支持异步加载和依赖图管理"
      - "管理资源文件系统路径和资源包"
    provides: [IResource, ResourceManager, ResourceHandle, AsyncLoader]
    depends_on: [Core, Containers, Memory, Threading, Math, Debug]
    boundary:
      inputs: [资源路径]
      outputs: [资源对象]

  - name: RHI
    responsibilities:
      - "抽象渲染硬件接口,统一不同图形 API"
      - "封装 GPU 资源(缓冲区、纹理、着色器)"
      - "提供命令列表录制和提交机制"
      - "管理描述符堆和管线状态"
    provides: [RHIDevice, RHIBuffer, RHITexture, RHIShader, RHICommandList]
    depends_on: [Core]
    boundary:
      inputs: [渲染命令]
      outputs: [GPU 调用]

  - name: RHI_D3D12
    responsibilities:
      - "实现 DirectX 12 后端"
      - "封装 D3D12 设备和资源"
      - "管理描述符堆和根签名"
    provides: [D3D12Device, D3D12Buffer, D3D12Texture]
    depends_on: [Core, RHI]
    boundary:
      inputs: [RHI 调用]
      outputs: [D3D12 API]

  - name: RHI_OpenGL
    responsibilities:
      - "实现 OpenGL 4.6+ 后端"
      - "封装 OpenGL 设备和资源"
      - "管理 VAO 和采样器状态"
    provides: [OpenGLDevice, OpenGLBuffer, OpenGLTexture]
    depends_on: [Core, RHI]
    boundary:
      inputs: [RHI 调用]
      outputs: [OpenGL API]

modules:
  - name: CoreTypes
    parent_subsystem: Core
    responsibility: "定义基础类型别名int8、uint32 等)和断言宏"
    public_api:
      - fn: Assert
        params:
          - name: condition
            type: bool
          - name: message
            type: const char*
        returns: type: void

  - name: CoreSmartPtr
    parent_subsystem: Core
    responsibility: "实现引用计数智能指针 Ref<T> 和 UniqueRef<T>"
    public_api:
      - fn: MakeRef
        params:
          - name: args
            type: Args...
        returns: type: Ref<T>
      - fn: MakeUnique
        params:
          - name: args
            type: Args...
        returns: type: UniqueRef<T>

  - name: CoreEvent
    parent_subsystem: Core
    responsibility: "提供线程安全的事件发布/订阅系统"
    public_api:
      - fn: Subscribe
        params:
          - name: callback
            type: std::function<void(Args...)>
        returns: type: uint32
      - fn: Unsubscribe
        params:
          - name: id
            type: uint32
        returns: type: void
      - fn: Invoke
        params:
          - name: args
            type: Args...
        returns: type: void

  - name: MathVector
    parent_subsystem: Math
    responsibility: "实现 Vector2、Vector3、Vector4 及其运算"
    public_api:
      - fn: Dot
        params:
          - name: a
            type: const Vector3&
          - name: b
            type: const Vector3&
        returns: type: float
      - fn: Cross
        params:
          - name: a
            type: const Vector3&
          - name: b
            type: const Vector3&
        returns: type: Vector3
      - fn: Normalize
        params:
          - name: v
            type: const Vector3&
        returns: type: Vector3
      - fn: Lerp
        params:
          - name: a
            type: const Vector3&
          - name: b
            type: const Vector3&
          - name: t
            type: float
        returns: type: Vector3

  - name: MathMatrix
    parent_subsystem: Math
    responsibility: "实现 Matrix3x3、Matrix4x4 及其运算"
    public_api:
      - fn: Perspective
        params:
          - name: fov
            type: float
          - name: aspect
            type: float
          - name: near
            type: float
          - name: far
            type: float
        returns: type: Matrix4x4
      - fn: LookAt
        params:
          - name: eye
            type: const Vector3&
          - name: target
            type: const Vector3&
          - name: up
            type: const Vector3&
        returns: type: Matrix4x4
      - fn: Inverse
        params:
          - name: m
            type: const Matrix4x4&
        returns: type: Matrix4x4

  - name: MathQuaternion
    parent_subsystem: Math
    responsibility: "实现四元数和旋转变换"
    public_api:
      - fn: FromAxisAngle
        params:
          - name: axis
            type: const Vector3&
          - name: angle
            type: float
        returns: type: Quaternion
      - fn: FromEulerAngles
        params:
          - name: pitch
            type: float
          - name: yaw
            type: float
          - name: roll
            type: float
        returns: type: Quaternion
      - fn: Slerp
        params:
          - name: a
            type: const Quaternion&
          - name: b
            type: const Quaternion&
          - name: t
            type: float
        returns: type: Quaternion

  - name: MathTransform
    parent_subsystem: Math
    responsibility: "实现位置/旋转/缩放变换层次"
    public_api:
      - fn: Translate
        params:
          - name: position
            type: const Vector3&
        returns: type: Transform&
      - fn: Rotate
        params:
          - name: rotation
            type: const Quaternion&
        returns: type: Transform&
      - fn: Scale
        params:
          - name: scale
            type: const Vector3&
        returns: type: Transform&
      - fn: ToMatrix
        returns: type: Matrix4x4

  - name: MathGeometry
    parent_subsystem: Math
    responsibility: "实现几何基元Plane、Sphere、Box、Ray、Frustum、AABB、OBB"
    public_api:
      - fn: Intersects
        params:
          - name: ray
            type: const Ray&
          - name: sphere
            type: const Sphere&
        returns: type: bool
      - fn: Contains
        params:
          - name: frustum
            type: const Frustum&
          - name: point
            type: const Vector3&
        returns: type: bool

  - name: ContainersArray
    parent_subsystem: Containers
    responsibility: "提供模板动态数组"
    public_api:
      - fn: push
        params:
          - name: value
            type: const T&
        returns: type: void
      - fn: emplace
        params:
          - name: args
            type: Args...
        returns: type: T&
      - fn: Size
        returns: type: uint32

  - name: ContainersString
    parent_subsystem: Containers
    responsibility: "提供字符串处理功能"
    public_api:
      - fn: Substring
        params:
          - name: start
            type: uint32
          - name: length
            type: uint32
        returns: type: String
      - fn: Trim
        returns: type: String
      - fn: Find
        params:
          - name: str
            type: const String&
        returns: type: int32

  - name: ContainersHashMap
    parent_subsystem: Containers
    responsibility: "提供基于开放寻址的哈希表"
    public_api:
      - fn: Insert
        params:
          - name: key
            type: const K&
          - name: value
            type: const V&
        returns: type: bool
      - fn: Find
        params:
          - name: key
            type: const K&
        returns: type: Iterator
      - fn: Remove
        params:
          - name: key
            type: const K&
        returns: type: bool

  - name: MemoryAllocators
    parent_subsystem: Memory
    responsibility: "实现线性分配器、池分配器、代理分配器"
    public_api:
      - fn: Allocate
        params:
          - name: size
            type: size_t
        returns: type: void*
      - fn: Free
        params:
          - name: ptr
            type: void*
        returns: type: void
      - fn: Clear
        returns: type: void

  - name: MemoryManager
    parent_subsystem: Memory
    responsibility: "管理全局内存分配器和追踪统计"
    public_api:
      - fn: Get
        returns: type: MemoryManager&
      - fn: CreateLinearAllocator
        params:
          - name: size
            type: size_t
        returns: type: LinearAllocator
      - fn: CreatePoolAllocator
        params:
          - name: blockSize
            type: size_t
          - name: blockCount
            type: uint32
        returns: type: PoolAllocator

  - name: ThreadingPrimitives
    parent_subsystem: Threading
    responsibility: "提供线程、互斥锁、自旋锁、读写锁"
    public_api:
      - fn: Thread
        params:
          - name: func
            type: std::function<void()>
        returns: type: void
      - fn: Lock
        returns: type: void
      - fn: Unlock
        returns: type: void

  - name: ThreadingTaskSystem
    parent_subsystem: Threading
    responsibility: "实现任务调度和线程池"
    public_api:
      - fn: Get
        returns: type: TaskSystem&
      - fn: ParallelFor
        params:
          - name: begin
            type: uint32
          - name: end
            type: uint32
          - name: func
            type: std::function<void(uint32)>
        returns: type: void
      - fn: Submit
        params:
          - name: task
            type: ITask*
        returns: type: void
      - fn: Wait
        returns: type: void

  - name: DebugLogger
    parent_subsystem: Debug
    responsibility: "提供多层级分类日志系统"
    public_api:
      - fn: Get
        returns: type: Logger&
      - fn: Log
        params:
          - name: category
            type: const char*
          - name: level
            type: LogLevel
          - name: message
            type: const char*
        returns: type: void

  - name: DebugProfiler
    parent_subsystem: Debug
    responsibility: "实现性能分析器"
    public_api:
      - fn: Get
        returns: type: Profiler&
      - fn: BeginSession
        params:
          - name: name
            type: const char*
        returns: type: void
      - fn: EndSession
        returns: type: void
      - fn: ExportChromeTracing
        params:
          - name: path
            type: const char*
        returns: type: void

  - name: ResourcesIResource
    parent_subsystem: Resources
    responsibility: "定义资源基接口"
    public_api:
      - fn: GetType
        returns: type: ResourceType
      - fn: GetName
        returns: type: const String&
      - fn: GetPath
        returns: type: const String&
      - fn: GetGUID
        returns: type: const ResourceGUID&

  - name: ResourcesManager
    parent_subsystem: Resources
    responsibility: "管理资源生命周期、加载、卸载"
    public_api:
      - fn: Get
        returns: type: ResourceManager&
      - fn: Load
        params:
          - name: path
            type: const String&
        returns: type: LoadResult
      - fn: LoadAsync
        params:
          - name: path
            type: const String&
          - name: callback
            type: std::function<void(ResourceHandle<IResource>)>
        returns: type: void
      - fn: Unload
        params:
          - name: guid
            type: const ResourceGUID&
        returns: type: void

  - name: ResourcesLoaders
    parent_subsystem: Resources
    responsibility: "实现各类资源加载器"
    public_api:
      - fn: Load
        params:
          - name: path
            type: const String&
        returns: type: IResource*
      - fn: GetSupportedExtensions
        returns: type: Array<String>
      - fn: CanLoad
        params:
          - name: path
            type: const String&
        returns: type: bool

  - name: ResourcesFileSystem
    parent_subsystem: Resources
    responsibility: "管理资源路径和资源包"
    public_api:
      - fn: Get
        returns: type: ResourceFileSystem&
      - fn: RegisterLoader
        params:
          - name: loader
            type: IResourceLoader*
        returns: type: void
      - fn: LoadPackage
        params:
          - name: path
            type: const String&
        returns: type: bool

  - name: RHIDevice
    parent_subsystem: RHI
    responsibility: "创建和管理 RHI 设备及资源"
    public_api:
      - fn: CreateBuffer
        params:
          - name: desc
            type: const RHIBufferDesc&
        returns: type: RHIBuffer*
      - fn: CreateTexture
        params:
          - name: desc
            type: const RHITextureDesc&
        returns: type: RHITexture*
      - fn: CreateShader
        params:
          - name: desc
            type: const RHIShaderDesc&
        returns: type: RHIShader*
      - fn: CreateCommandList
        returns: type: RHICommandList*
      - fn: GetCapabilities
        returns: type: const RHICapabilities&

  - name: RHICommandList
    parent_subsystem: RHI
    responsibility: "录制和提交图形命令"
    public_api:
      - fn: Draw
        params:
          - name: vertexCount
            type: uint32
          - name: instanceCount
            type: uint32
        returns: type: void
      - fn: DrawIndexed
        params:
          - name: indexCount
            type: uint32
          - name: instanceCount
            type: uint32
        returns: type: void
      - fn: Dispatch
        params:
          - name: x
            type: uint32
          - name: y
            type: uint32
          - name: z
            type: uint32
        returns: type: void
      - fn: SetPipelineState
        params:
          - name: state
            type: RHIPipelineState*
        returns: type: void

  - name: RHIFactory
    parent_subsystem: RHI
    responsibility: "静态工厂创建后端设备"
    public_api:
      - fn: CreateRHIDevice
        params:
          - name: type
            type: RHIDeviceType
        returns: type: RHIDevice*

  - name: RHIBuffer
    parent_subsystem: RHI
    responsibility: "封装 GPU 缓冲区"
    public_api:
      - fn: Map
        params:
          - name: offset
            type: size_t
          - name: size
            type: size_t
        returns: type: void*
      - fn: Unmap
        returns: type: void

  - name: RHITexture
    parent_subsystem: RHI
    responsibility: "封装 GPU 纹理"
    public_api:
      - fn: GetWidth
        returns: type: uint32
      - fn: GetHeight
        returns: type: uint32
      - fn: GetFormat
        returns: type: PixelFormat

EVOLUTION_MODE

mode: build
description: "XCEngine 处于早期构建阶段,核心基础设施正在逐步完善"
context: |
  XCEngine 是一个正在开发中的游戏引擎项目,当前版本 0.1.0 专注于建立核心基础设施。
  核心模块Core、Math、Containers、Memory已基本完成提供了游戏引擎所需的基础构建块。
  
  渲染系统RHI已完成双后端支持D3D12 和 OpenGL但高级渲染特性如光线追踪、
  网格着色器)尚未实现。
  
  资源管理系统Resources已具备完整的加载框架支持异步加载、缓存和依赖管理
  但仅支持基础格式(纹理、网格、着色器)。
  
  缺少的子系统物理系统、脚本系统、实体组件系统ECS、音频系统、UI 系统。
  这些将在后续迭代中逐步添加。

REQUIREMENTS

  • id: REQ-001 title: "核心数学库完善" description: "扩展数学库以支持 SIMD 优化,提供更高效的向量/矩阵运算" source: user type: non-functional acceptance_criteria:

    • "向量运算支持 SSE/AVX 加速"
    • "矩阵运算支持 SIMD 优化"
    • "性能基准测试显示 2x 以上的性能提升" priority: P1
  • id: REQ-002 title: "资源系统扩展" description: "增加更多资源格式支持,包括音频、动画、骨骼网格" source: user type: functional acceptance_criteria:

    • "支持 WAV 音频加载"
    • "支持 glTF 格式模型导入"
    • "支持骨骼动画数据" priority: P1
  • id: REQ-003 title: "异步任务系统增强" description: "支持任务优先级、任务亲和性、任务追踪" source: user type: functional acceptance_criteria:

    • "支持高/中/低三档任务优先级"
    • "支持将任务分配到特定线程"
    • "提供任务执行状态查询接口" priority: P2
  • id: REQ-004 title: "内存追踪和泄漏检测" description: "增强内存管理器,提供分配追踪和泄漏检测功能" source: user type: non-functional acceptance_criteria:

    • "记录每次分配的调用栈"
    • "检测并报告内存泄漏"
    • "生成内存使用报告" priority: P1
  • id: REQ-005 title: "渲染管线扩展" description: "增加 Compute Shader 支持、GPU 驱动的剔除、延迟渲染管线" source: user type: functional acceptance_criteria:

    • "支持 Compute Shader 执行"
    • "实现视锥体剔除"
    • "提供延迟渲染模板" priority: P2
  • id: REQ-006 title: "日志系统国际化" description: "支持多语言日志输出" source: user type: functional acceptance_criteria:

    • "支持日志消息参数化"
    • "支持格式化字符串"
    • "提供本地化接口" priority: P2

MVS_DEFINITION

mvs_solutions:
  - id: MVS-001
    name: "SIMD 数学优化"
    goal: "为数学库添加 SIMD 加速,提升渲染和物理计算性能"
    verification_criteria:
      - "矩阵乘法性能提升 2x 以上"
      - "向量点积/叉积性能提升 2x 以上"
      - "不破坏现有 API 兼容性"
    scope:
      - subsystem: Math
        components: [Vector, Matrix, Quaternion]
      - external: [SSE4.2, AVX2]
    code_structure:
      - file: "engine/include/XCEngine/Math/Vector3.inl"
        purpose: "SIMD 向量实现"
        contains:
          - "SSE/AVX 向量运算内联函数"
          - "跨平台 SIMD 选择宏"
        standalone: true
      - file: "engine/include/XCEngine/Math/Matrix4x4.inl"
        purpose: "SIMD 矩阵实现"
        contains:
          - "SSE/AVX 矩阵乘法"
          - "SIMD 矩阵求逆"
        standalone: true
    integration_plan:
      - step: "定义 SIMD 抽象层选择宏XC_USE_SSE/AVX"
      - step: "在 Vector3.h 中引入条件编译的 SIMD 实现"
      - step: "在 Matrix4x4.h 中引入 SIMD 乘法实现"
      - step: "添加性能基准测试"
    status: pending

  - id: MVS-002
    name: "音频资源加载器"
    goal: "实现 WAV 格式音频加载,为后续音频系统打基础"
    verification_criteria:
      - "成功加载标准 WAV 文件"
      - "正确解析音频参数(采样率、声道、位深)"
      - "提供 AudioClip 资源对象"
    scope:
      - subsystem: Resources
        components: [AudioLoader, AudioClip]
      - external: [stb_vorbis, libwav]
    code_structure:
      - file: "engine/include/XCEngine/Resources/AudioClip.h"
        purpose: "音频数据资源"
        contains:
          - "AudioClip 类定义"
          - "音频格式枚举"
        standalone: true
      - file: "engine/src/Resources/AudioLoader.cpp"
        purpose: "WAV 加载器实现"
        contains:
          - "WAV 文件解析"
          - "音频数据解码"
        standalone: false
    integration_plan:
      - step: "创建 AudioClip 资源类"
      - step: "实现 WAV 解析器"
      - step: "注册 AudioLoader 到 ResourceManager"
      - step: "添加单元测试"
    status: pending

  - id: MVS-003
    name: "内存泄漏检测器"
    goal: "为 Memory 模块添加分配追踪和泄漏报告功能"
    verification_criteria:
      - "记录所有分配操作和调用栈"
      - "在程序结束时输出泄漏报告"
      - "支持泄漏检测白名单"
    scope:
      - subsystem: Memory
        components: [AllocationTracker, MemoryReport]
      - external: [DbgHelp.dll, walkmacros]
    code_structure:
      - file: "engine/include/XCEngine/Memory/AllocationTracker.h"
        purpose: "分配追踪器"
        contains:
          - "AllocationTracker 单例"
          - "调用栈记录器"
        standalone: true
      - file: "engine/src/Memory/AllocationTracker.cpp"
        purpose: "追踪器实现"
        contains:
          - "DbgHelp 调用栈捕获"
          - "泄漏检测算法"
        standalone: false
    integration_plan:
      - step: "创建 AllocationTracker 类"
      - step: "修改 ProxyAllocator 集成追踪器"
      - step: "实现泄漏报告生成器"
      - step: "在程序退出时自动输出报告"
    status: pending

DATA_MODELS

- name: ResourceHandle
  description: "类型安全的资源智能指针,自动引用计数"
  fields:
    - name: m_resource
      type: T*
      default: nullptr
      constraints: optional
    - name: m_refCount
      type: uint32*
      default: nullptr
      constraints: optional

- name: ResourceGUID
  description: "资源的全局唯一标识符,由路径哈希生成"
  fields:
    - name: m_hash
      type: uint64
      default: 0
      constraints: required

- name: LoadResult
  description: "资源加载结果"
  fields:
    - name: success
      type: bool
      default: false
      constraints: required
    - name: resource
      type: IResource*
      default: nullptr
      constraints: optional
    - name: errorMessage
      type: String
      default: ""
      constraints: optional

- name: RHICapabilities
  description: "GPU 硬件能力查询"
  fields:
    - name: raytracing
      type: bool
      default: false
      constraints: optional
    - name: meshShaders
      type: bool
      default: false
      constraints: optional
    - name: tessellation
      type: bool
      default: false
      constraints: optional
    - name: maxTextureSize
      type: uint32
      default: 4096
      constraints: optional

- name: Transform
  description: "位置、旋转、缩放的三维变换"
  fields:
    - name: m_position
      type: Vector3
      default: (0,0,0)
      constraints: required
    - name: m_rotation
      type: Quaternion
      default: identity
      constraints: required
    - name: m_scale
      type: Vector3
      default: (1,1,1)
      constraints: required

- name: Frustum
  description: "视锥体,用于裁剪检测"
  fields:
    - name: m_planes
      type: Array<Plane, 6>
      default: []
      constraints: required
    - name: m_corners
      type: Array<Vector3, 8>
      default: []
      constraints: required

- name: IResource
  description: "所有资源的基接口"
  fields:
    - name: m_type
      type: ResourceType
      constraints: required
    - name: m_name
      type: String
      constraints: required
    - name: m_path
      type: String
      constraints: required
    - name: m_guid
      type: ResourceGUID
      constraints: required

EVOLUTION_PLAN

fix_plan:
  - issue_id: BUG-001
    description: "LinearAllocator Clear 后重新分配时可能返回重叠内存"
    root_cause: "Clear 仅重置指针,未清理旧内存映射"
    minimal_change:
      - file: "engine/src/Memory/LinearAllocator.cpp"
    verification: "连续 Clear 和分配,检查内存区域不重叠"
    
  - issue_id: BUG-002
    description: "Event 在多线程同时订阅/取消订阅时存在竞态条件"
    root_cause: "订阅列表操作未加锁保护"
    minimal_change:
      - file: "engine/include/XCEngine/Core/Event.h"
    verification: "压力测试多线程订阅场景,无崩溃和数据错误"

refactor_plan:
  - target: "统一内存分配接口"
    constraints:
      - "保持向后兼容"
      - "不引入运行时开销"
    steps:
      - "提取 IAllocator 接口的最小子集"
      - "将 MakeRef/MakeUnique 重构为使用分配器参数"
      - "添加便捷宏 XE_NEW/T_XE_DELETE"

  - target: "RHI 资源状态转换自动化"
    constraints:
      - "保持性能"
      - "兼容现有渲染器"
    steps:
      - "引入资源状态跟踪器"
      - "自动插入转换 barriers"
      - "暴露手动控制接口"

feature_plan:
  - feature_id: FEAT-001
    name: "实体组件系统ECS"
    addition: "实现高性能 ECS 架构,支持 archetypes 和 query"
    integration_point: "Engine 层,位于 Resources 和 Gameplay 之间"
    steps:
      - "定义 Component、Entity、World 接口"
      - "实现 Archetype 存储"
      - "实现 Query 系统"
      - "集成到引擎主循环"

  - feature_id: FEAT-002
    name: "物理子系统"
    addition: "集成物理引擎,支持刚体、碰撞体"
    integration_point: "Core 层下方,独立子系统"
    steps:
      - "评估物理引擎集成Bullet/PhysX"
      - "封装物理世界接口"
      - "实现碰撞检测和响应"
      - "集成到渲染管线"

  - feature_id: FEAT-003
    name: "脚本系统"
    addition: "支持 Lua 脚本和自定义脚本语言绑定"
    integration_point: "Core 层上方,独立子系统"
    steps:
      - "集成 Lua 虚拟机"
      - "绑定核心引擎 API"
      - "实现脚本组件"
      - "支持热重载"