8. 贡献指南
欢迎为 Sync Engine 贡献代码!以下指南帮助你快速上手。
8.1. 目录结构
OpenSource/Sync/
├── include/sync/ # 核心头(sync::core 命名空间)
├── include/sync_godot/ # Godot 包装层头(godot:: 命名空间,19 个类)
├── src/core/ # 核心实现(静态库 build/)
├── src/godot/ # 包装层实现 + register_types.cpp(19 类唯一注册处)
├── doc_classes/ # 19 个类参考 XML
├── addons/sync/ # sync.gdextension + bin/(运行时分发物)
├── project/ # demo Godot 项目
├── test/ # 逻辑测试与基准测试
├── run_tests.py # 纯 C++ 测试运行器
├── SConstruct # 核心静态库构建
└── SConstruct.extension # GDExtension 构建(编译 src/core + src/godot + DocData)
8.2. 编码规范
8.2.1. 语言与风格
核心:C++17 标准,
sync::core命名空间(核心层)、godot::命名空间(Godot 包装层)。GDScript:demo 项目使用 GDScript,遵守 Godot 官方风格指南。
保持一致:匹配现有代码的缩进风格、命名约定和注释密度。
行尾:全仓库 LF 换行,禁止 CRLF。使用
.gitattributes自动强制。
8.3. 如何新增类
Sync 是单一包,新增一个类只需改**两处** (无桥接 / 导出宏第三处):
头文件:在
include/sync_godot/下创建类头(核心逻辑则 放include/sync/)。实现文件:在
src/godot/下创建.cpp(核心实现在src/core/)。注册类型:在
src/godot/register_types.cpp中调用ClassDB::register_class<YourNewClass>()。文档:在
doc_classes/下创建YourNewClass.xml, 格式参考已有文件(Godot editor help 格式)。
重要
单包内所有类共享同一个 DLL 与注册上下文,包装类公开接口直接使用
具体 C++ 类型(如 Ref<T>),无需 Object* 签名或任何桥接。
8.4. 构建与测试
# 1) 核心静态库 + 逻辑测试
cd OpenSource/Sync
scons # debug
scons mode=release # release
python run_tests.py # 逻辑测试(必须全绿)
# 2) GDExtension(全 19 类 + DocData)
scons -f SConstruct.extension target=template_debug platform=windows
scons -f SConstruct.extension target=template_release platform=windows
# 3) demo 验证
godot --headless --quit-after 600 --path OpenSource/Sync/project
备注
run_tests.py 必须全绿才能提交。
Headless 验证务必加 --quit-after (秒数)兜底——demo 脚本若因编译
或运行错误未自行退出,headless 进程将永久挂死。
8.5. 文档
修改 Godot 类(增删方法/属性)后:
更新
doc_classes/*.xml,格式遵循 Godot 编辑器帮助文档规范; 重新构建后src/gen/doc_data.gen.cpp自动再生。本 Sphinx 文档位于
OpenSource/docs/,修改后执行make html(或make.bat html)重建 HTML 并检查渲染结果。文档源文件统一使用 reStructuredText(
.rst)格式。
8.6. PR 流程
创建 Feature 分支,命名自描述改动,如
feat/add-new-axis-type。编写代码与测试,确保
run_tests.py全绿。更新文档:
doc_classes/*.xml+ Sphinx.rst文件。提交:commit message 使用中文 conventional 格式 (
feat:/fix:/refactor:等)。发起 PR,描述改动内容与测试结果。
8.7. 许可证
Sync Engine 采用 MIT 许可证。贡献代码即表示你同意在该许可证下 分发你的贡献。