From 11004d55955e50345be909405d9937be855c9876 Mon Sep 17 00:00:00 2001 From: m0_75251201 Date: Wed, 9 Jul 2025 11:34:01 +0800 Subject: [PATCH] =?UTF-8?q?(Docs)=20feat:=E6=B7=BB=E5=8A=A0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E8=8C=83=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docs/spec.md | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 Docs/spec.md diff --git a/Docs/spec.md b/Docs/spec.md new file mode 100644 index 0000000..f113e26 --- /dev/null +++ b/Docs/spec.md @@ -0,0 +1,112 @@ + +# 代码与数据存储规范 + +## 1. 命名空间规范 +所有代码必须位于命名空间 `Cell` 中。例如: +```csharp +namespace Cell +{ + // 所有类、接口、枚举等均需定义在此命名空间下 +} +``` + +### 1.1 接口规范 +为了实现更方便的帧控制,受时刻影响的代码应选择实现以下接口之一或多个: +- **ITick**:适用于通用逻辑更新。 +- **ITickPhysics**:适用于物理相关逻辑更新(使用平稳的物理帧)。 +- **ITickUI**:适用于用户界面相关的逻辑更新。 + +首次启动需要调用Clock.Instance来初始化时钟 + +#### 1.1.1 接口说明 +- **ITick** 和 **ITickPhysics** 受暂停影响。 +- **ITickPhysics** 使用系统提供的平稳物理帧进行更新。 +- **ITickUI** 不受暂停影响,始终在每一帧更新。 + +#### 1.1.2 示例代码 +```csharp +namespace Cell +{ + public class ExampleObject : ITick, ITickPhysics + { + public void Tick() + { + // 更新通用逻辑 + } + + public void TickPhysics() + { + // 更新物理逻辑 + } + } +} +``` + +--- + +## 2. 数据存储规范 + +### 2.1 数据存储格式 +参考 RimWorld 的数据存储格式,本体和 Mod 的数据均使用 XML 文件存储,并支持动态加载。 + +#### 2.1.1 文件夹结构 +程序启动时会读取以下两个文件夹中的 XML 文件: +- **Data 文件夹**:存放本体的核心数据。 +- **Mods 文件夹**:存放 Mod 提供的扩展数据。 + +#### 2.1.2 XML 文件根属性规范 +XML 文件的根节点必须包含以下两种属性之一: +- **Define**:表示此 XML 文件定义的是一个数据类型。 +- **About**:表示此 XML 文件是 Mod 的介绍信息。 +- **Translation**:表示此 XML 文件是翻译文件。 + +#### 2.1.3 示例 XML 文件 + +##### 定义数据类型 (Define) +```xml + + + class1 + + value + + + ... + + + ... + + class1 + + +``` + +##### Mod 介绍 (About) +```xml + + AuthorName + This is a description of the mod. + +``` + +##### 翻译文件 (Translation) +```xml + + 苹果 + Value2 in English + +``` + +--- + +## 3. 动态加载流程 + +### 3.1 启动时加载 +程序启动时,按以下顺序加载数据: +1. **加载 Data 文件夹**:读取并解析核心数据。 +2. **加载 Mods 文件夹**:依次读取每个 Mod 的 XML 文件,动态加载 Mod 数据。 + +#### 3.1.1 加载优先级 +由加载列表确定加载优先级 + +