Files
EVEngine/src/modules
..

这些都是可以载入的module,不需要时可以不载入 全是等待被调用的模块,不会主动去调用

主要参考love2d的设计,但也要将cocos2dx中的一些优秀设计拿过来

类绑定原则

每个API都不重名,不使用重载,使用明确的类型,有部分参数有默认值

考虑一下枚举类型的接口 可以使用 uint32_t 或直接用 string

经过考虑,我计划使用string,主要原因有3:

  1. 方便,无需定义枚举类型,少了很多绑定操作的费事定义
  2. 可扩展,日后api想扩展新功能,无需导出新的定义,只需在函数增加对新名称的支持即可
  3. 直观,不但脚本中直观,C++代码中用string也很直观地知道这是啥,避免了用宏,枚举等需要引入头文件,解决namespace等诸多问题

模块设计

  1. 文件系统 - filesystem 封装了核心的文件系统功能,提供如下功能:统一的文件系统访问、目录查看修改、监视文件变动、文件读取 主实现:physfs;cppfs::File 仅用于 OS 绝对路径特例 watch API(抽象虚函数):watch / unwatch / pollWatch / getLastWatchPath watch 实现:physfs 后端 + Poco DirectoryWatcher(FileWatch)

  2. 事件系统 - event 主要处理多线程间的信号同步与各种回调事件,处理来自硬件的各种信号 响应式编程 - rx(eve.Rx) UniRx 风格推送流:Subject / BehaviorSubject / ReplaySubject / ReactiveProperty

    • LINQ 操作符(map / filter / take / skip / first / takeUntil / distinctUntilChanged)
    • 事件桥接(fromEvent + pump) 代码:src/modules/rx/;设计:docs/dev/superpowers/specs/2026-08-17-rx-module-design.md
  3. 窗口系统 - window 主要处理渲染窗口的设置、位置、样式、全屏等,我们只支持单窗口

  4. 图形系统 - graphic 主要处理图形的各种渲染、显卡、shader等,是核心中的核心,并且相比love2d, 拥有更多高级功能 有如下主要功能: a. 精灵类,根据属性,自动渲染不同样式的图片 b. 场景类,可以传入参数的场景,方便调试游戏的部分模块,部分章节 c. 地图类接口,可以直接渲染tilemap d. 摄像机,可以做2d下的光照和法线贴图 e. 低像素优化,支持小图片的旋转

  5. 插件系统 - plugins 主要负责加载第三方模块和插件,加载dll等

  6. 管理系统 - system 负责系统版本、时间、状态等的查询和设置 Module:System(getOS / getProcessorCount / getSystemRAM / getProcessMemoryMB / getWallTime / sleepMilliseconds / 剪贴板 / 电量 / GPU 查询) 帧计时仍用 Timer;GPU 信息在 Graphics init 后可用

6b. 数学库 - math(eve.Math) Vec2 / Vec3 / Mat4(glm);标量与几何工具;noise1/2/3;贝塞尔;可种子随机数 代码:src/modules/math/

6b1. 空间索引 - spatial(eve.Spatial) QuadTree / Octree / SpatialHash2D·3D / BSPTree2D·3D:AABB 宽相查询与地图裁剪候选 insert / queryRect|queryAABB / queryCircle|querySphere / getResultId 代码:src/modules/spatial/ 设计:docs/dev/空间索引模块设计.md

6b1a. 编辑器构件 - editor(eve.Editor) 不内置完整 3D/地图编辑器;提供可组装构件: TransformGizmo / GizmoManager(平移旋转缩放/包围盒操作框) TileBuffer + Brush(地图笔刷:paint/erase/fill/line/rect/stamp) EditorToolbar / Inspector / Dock / History(快速搭编辑器壳) 代码:src/modules/editor/ 设计:docs/dev/编辑器模块设计.md

6b1b. 体素渲染 - voxel(eve.Voxel) 32³ chunk、贪婪矩形合并、32-bit 打包实例、六向缓冲、视锥/距离/朝向裁剪 newWorld / selectVisible / drawVisible;Graphics::drawVoxelFaceInstances 代码:src/modules/voxel/ 设计:docs/dev/体素渲染模块设计.md

6b1c. 可交互积雪 - snow(eve.Snow) 深度场雪面(SnowField 网格)+ 真实位移深坑 + POM 微细节 + 降雪回填 newField / stampFootprint / stampImpact / addSnowfall / applyToHeightmap 代码:src/modules/snow/

6b2. 逆运动学 - ik(eve.IK) 封装 ik.hpp(external/ik.hpp):Skeleton2D/3D、Solver2D/3D(FABRIK) newSkeleton2D / newSolver2D / createBone / addTarget / solve / step 代码:src/modules/ik/

6c. 张量计算 - tensor(eve.TF / 类型 Tensor) TF2 风格:默认 eager;tf.func() 建图 → compile / run*(对应 tf.function) 模块级 add/multiply/matmul/relu/reduceSum/where;getDevice() → "cpu" 代码:src/modules/tensor/

  1. 资源管理系统 - image sound video font(font/Font) 3dmodel(model3d/Model3D) animation 负责加载图形、声音、视频、字体、3d模型、动画等不同格式数据 3dmodel:Model3D::newModelData / newModelDataFromFile → ModelData(medialoader Assimp) font:Font::newFontData / newFontDataFromFile → FontData(FreeType;glyph → ImageData)

  2. 网络系统 - network 封装网络通讯的各种基础操作

  3. 线程系统 - thread(eve.Thread) 负责线程池、异步 Task、跨线程 ThreadChannel(字符串消息) getPool / newThreadPool / getChannel / newChannel / postMain ThreadPool::submitSleep / submitPush / submitPost / waitAll;worker 勿碰 Squirrel VM 脚本异步:src/scripts/async.nut(Promise / nextTick / setTimeout / asyncSleep / asyncDelay) 帧循环 async_pump();.fail 代替 JS 的 .catch(Squirrel 关键字)

  4. 粒子系统 - particles
    ECS ParticleEmitter + Sim/Render/Config System;JSON 热更;Camera2D/Canvas;发射区域与径向/切向力。 ECS:ParticleEmitter(Config/Sim/Draw/Resource) System:ParticleConfigSystem(filesystem watch + mtime 回退)/ ParticleSimSystem / ParticleRenderSystem Module:工厂、newEmitterFromFile、脚本绑定;update 含 poll+sim

  5. 物理 - box2d / box3d(脚本模块名 Physics) 负责管理 Box2D(2D)与 Box3D(3D)刚体,以及可交互 2D/3D 布料(自碰撞、二面角折角限制、按质量动量交换的刚体碰撞)与 2D 流体 Module:Physics(setMeter / newWorld / newWorld3D / newCloth / newCloth3D / newFluid) 类型:World / Body / Fixture;2D 坐标为像素,内部按 meter 换算 类型:World3D / Body3D / Shape3D;3D 坐标为米(Box3D);形状 box/sphere/capsule 类型:Cloth / Cloth3D(Verlet 布料,grabAt / interactAt / setCollideWorld / update / draw)、ClothGPU(compute shader 加速,含空间哈希自碰撞与 Sequence 合并提交) 类型:Fluid(双密度松弛流体,emit / interactAt / update / draw) 帧循环:world.update(dt) / world3.update(dt) / cloth.update(dt) / fluid.update(dt) 碰撞事件:2D begincontact / endcontact;3D begincontact3d / endcontact3d → event 可选:world.drawDebug(gfx);布料/流体用自带 draw(gfx) 代码:src/modules/physics/(避免与第三方 Box2D/ 在大小写不敏感文件系统上冲突) 依赖:third-party/box3d(submodule) 示例:examples/softbody/(2D)、examples/softbody3d/(3D)

11b. 声明式场景树 - scene(eve.Scene) 与 ui 同构:SceneComponent.build → NodeDesc → SceneHost;mount / remountReconcile / beginBuild SceneNode(GameObject)+ TransformSystem(local → world Mat4);space 为 "2d"/"3d" 可选 linkRenderable2D/3D:world TRS 同步到渲染实体 场景即函数(props / children 插槽),非 Prefab 代码:src/modules/scene/

11c. Avatar 分层渲染 - avatar(eve.Avatar) Image 图层叠加 / Live2D 可插拔后端 / VRoid(Model3D + Renderable3D) newImageAvatar / newLive2DAvatar / newVroidAvatar;update / sync / render 设计:docs/对话与Avatar模块设计.md 代码:src/modules/avatar/

11d. 对话框及脚本 - dialogue(eve.Dialogue) VN 舞台:角色、打字机、选项、槽位;剧情仍用 Squirrel(推荐 generator) say / narrate / presentChoices / syncStage / bindAvatar 设计:docs/对话与Avatar模块设计.md;示例:examples/dialogue/ 代码:src/modules/dialogue/

  1. 动画系统 - animation(eve.Animation) 属性补间 Tween:newTween(duration) → setFrom / setTo / setDelta(相对差值) 缓动 kind 与 Math.ease 一致;setDelay / setRepeat / setYoyo;角度 set*Angle 帧循环:anim.update(dt)(或 tween.update(dt)) 3D 骨骼播放:AnimSkeleton / AnimClip / AnimPose / AnimPlayer 两套控制器:状态机 AnimStateMachine;Motion Matching(MotionDatabase + MotionMatcher) 代码:src/modules/animation/

12b. 风格化渲染 - stylize(eve.Stylize) NPR 后处理与网格着色:cartoon / watercolor / ink / pixel newPass → StylePass.apply / applyCanvas;newMeshShader(cartoon/ink) CPU:processImage(RGBA8);SPIR-V:scripts/compile_stylize_shaders.py 代码:src/modules/stylize/;设计:docs/风格化渲染模块设计.md

  1. GPU计算系统 - compute 并行化和异构计算,封装compute shader的相关操作