这些都是可以载入的module,不需要时可以不载入 全是等待被调用的模块,不会主动去调用
主要参考love2d的设计,但也要将cocos2dx中的一些优秀设计拿过来
类绑定原则
每个API都不重名,不使用重载,使用明确的类型,有部分参数有默认值
考虑一下枚举类型的接口 可以使用 uint32_t 或直接用 string
经过考虑,我计划使用string,主要原因有3:
- 方便,无需定义枚举类型,少了很多绑定操作的费事定义
- 可扩展,日后api想扩展新功能,无需导出新的定义,只需在函数增加对新名称的支持即可
- 直观,不但脚本中直观,C++代码中用string也很直观地知道这是啥,避免了用宏,枚举等需要引入头文件,解决namespace等诸多问题
模块设计
-
文件系统 - filesystem 封装了核心的文件系统功能,提供如下功能:统一的文件系统访问、目录查看修改、监视文件变动、文件读取 主实现:physfs;cppfs::File 仅用于 OS 绝对路径特例 watch API(抽象虚函数):
watch/unwatch/pollWatch/getLastWatchPathwatch 实现:physfs 后端 + Poco DirectoryWatcher(FileWatch) -
事件系统 - 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
- LINQ 操作符(
-
窗口系统 - window 主要处理渲染窗口的设置、位置、样式、全屏等,我们只支持单窗口
-
图形系统 - graphic 主要处理图形的各种渲染、显卡、shader等,是核心中的核心,并且相比love2d, 拥有更多高级功能 有如下主要功能: a. 精灵类,根据属性,自动渲染不同样式的图片 b. 场景类,可以传入参数的场景,方便调试游戏的部分模块,部分章节 c. 地图类接口,可以直接渲染tilemap d. 摄像机,可以做2d下的光照和法线贴图 e. 低像素优化,支持小图片的旋转
-
插件系统 - plugins 主要负责加载第三方模块和插件,加载dll等
-
管理系统 - 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/
-
资源管理系统 - 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) -
网络系统 - network 封装网络通讯的各种基础操作
-
线程系统 - thread(
eve.Thread) 负责线程池、异步 Task、跨线程 ThreadChannel(字符串消息)getPool/newThreadPool/getChannel/newChannel/postMainThreadPool::submitSleep/submitPush/submitPost/waitAll;worker 勿碰 Squirrel VM 脚本异步:src/scripts/async.nut(Promise / nextTick / setTimeout / asyncSleep / asyncDelay) 帧循环async_pump();.fail代替 JS 的.catch(Squirrel 关键字) -
粒子系统 - particles
ECSParticleEmitter+ Sim/Render/Config System;JSON 热更;Camera2D/Canvas;发射区域与径向/切向力。 ECS:ParticleEmitter(Config/Sim/Draw/Resource) System:ParticleConfigSystem(filesystem watch + mtime 回退)/ParticleSimSystem/ParticleRenderSystemModule:工厂、newEmitterFromFile、脚本绑定;update含 poll+sim -
物理 - 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)碰撞事件:2Dbegincontact/endcontact;3Dbegincontact3d/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/
- 动画系统 - 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
- GPU计算系统 - compute 并行化和异构计算,封装compute shader的相关操作