贡献清单
当向Urho3D项目贡献代码时,有一些事情需要检查,以便过程顺利进行。
首先,贡献应该完全属于你自己,这样你就拥有了版权。如果你在借用任何东西(例如数学公式的特定实现),你必须确保你被允许这样做,并给予适当的奖励。例如,借用公共领域中的代码是可以的。
其次,您需要同意代码是根据麻省理工学院许可证发布的,并附有版权声明“版权(c)2008-2022 Urho3D项目”。请注意,“Urho3D工程”不是一个实际的法律实体,只是为了避免列出所有贡献者的简称。您当然保留您的个人版权。您应该将许可证语句从现有的.cpp或.h文件复制粘贴到您提供的每个新文件,以避免以后添加它。
第三,Urho3D对新代码提出了要求,力求成为一个具有凝聚力、易于使用的包,其中包括事件、序列化和脚本绑定等功能。选中所有适用项:
对于所有有意义的代码(类、函数),AngelScript和Lua绑定都应该存在。有关特定约定,请参阅现有绑定和脚本文档,例如在AngelScript中使用财产而不是setters/getter(如果可能),或同时提供函数和财产的Lua绑定。
对于只有从C++调用才有意义的低级功能(如线程处理或对GPU资源的字节级访问),或者仅由子系统访问且在使用类时不需要的内部但公共函数,不需要进行脚本绑定。
除非由于缺少绑定而无法实现(见上文),否则应该在所有C++、AngelScript和Lua中实现新的示例。
对于新的Component或UIElement子类,应该存在用于序列化、网络复制和编辑的属性。类应该可以在编辑器中创建;检查组件类别,并根据需要为其提供图标(请参见文件bin/Data/Textures/EditorIcons.png和bin/Data/UI/EditorIcon.xml)
如果类继承了其他类的属性定义,请确保在引擎初始化时以正确的顺序注册它们。
必须通过在每个修改网络复制属性的setter函数中调用MarkNetworkUpdate()来手动触发组件属性的网络复制。有关简单的示例,请参见Camera类。
定义您预计外部方可能希望与发生的事情挂钩的事件。例如,编辑器通过订阅场景更改事件来更新其场景层次窗口:添加/删除子节点、添加/删除组件。
使用宏URHO3D_API标记所有应用程序可用的类、结构和函数,以便在共享库构建中正确导出它们。
请注意所有编码惯例,并在不确定的地方研究现有代码。确保文本编辑器或IDE配置为显示空白,这样就不会意外地混合空格和制表符。
无论何时创建一个主要的新功能,除了头文件中的函数文档外,还应在.dox页面中记录其用法。如果需要,创建一个新页面,并从现有文档中的适当位置链接。例如,如果它是一个新的渲染功能,则可以从“渲染”页面链接它。如果该功能引入了一个全新的子系统,则应将其从Urho3D.dox中的主页列表中链接。
当您添加一个新的示例应用程序时,如果可能的话,它应该在所有C++、AngelScript和Lua中实现,以显示如何使用所有API。检查下一个可用的空闲样本编号。如果(C++)示例依赖于特定的Urho3D构建选项,例如物理或网络,则可以在其CMakeLists.txt中有条件地禁用该示例。请参见11_physics示例。
第三方库考虑
添加新的第三方库时,请将其许可证声明插入Source\ThirdParty目录中的license。只有BSD/MIT/zlib等具有许可证的库才被接受,因为例如在移动平台上遵守LGPL是很困难的,并且会使应用程序处于法律灰色地带。
对于Urho3D运行时,首选小型且重点突出的库。例如,我们使用stb_image而不是FreeImage来加载图像,因为假设应用程序开发人员可以控制数据,并根据需要将其脱机转换为支持的格式。
第三方库不应将C++异常或STL容器的使用泄露到Urho3D公共API中。如有必要,例如在子系统级别上进行包装。