docs: update README and CONTRIBUTING for new folder structure and .tsd/.tss/.tsp formats
This commit is contained in:
+43
-61
@@ -1,33 +1,24 @@
|
||||
# 贡献指南
|
||||
|
||||
感谢你对 TurboSu 的关注!本指南将帮助你参与项目开发。
|
||||
|
||||
## 贡献方式
|
||||
|
||||
### 提交游戏插件
|
||||
### 提交游戏插件 (`.tsp`)
|
||||
|
||||
如果你想让 TurboSu 支持一款新的赛车游戏,只需创建一个游戏插件:
|
||||
|
||||
1. 在 `games/user/` 下新建文件夹 (以游戏 ID 命名)
|
||||
2. 编写 `manifest.json` (元信息) 和 `parser.py` (数据解析)
|
||||
3. 提交 Pull Request 到 `games/user/` 目录,或直接在设置页面通过 "导入插件" 安装
|
||||
|
||||
插件结构:
|
||||
创建一个包含 `manifest.json` 和 `parser.py` 的文件夹,压缩为 zip 改后缀:
|
||||
|
||||
```
|
||||
games/user/<game_id>/
|
||||
├── manifest.json # 游戏元信息
|
||||
└── parser.py # 解析逻辑
|
||||
my_game/
|
||||
├── manifest.json
|
||||
└── parser.py
|
||||
```
|
||||
|
||||
#### manifest.json 格式
|
||||
#### manifest.json
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "unique_game_id",
|
||||
"name": "游戏名称",
|
||||
"parser_type": "forza",
|
||||
"telemetry_format": "fh5",
|
||||
"description": "简短描述",
|
||||
"author": "你的名字",
|
||||
"version": "1.0.0",
|
||||
@@ -37,71 +28,62 @@ games/user/<game_id>/
|
||||
|
||||
#### parser.py 规范
|
||||
|
||||
必须实现 `get_parser()` 函数,返回一个包含以下方法的对象:
|
||||
必须实现 `get_parser()` 函数,返回对象包含:
|
||||
|
||||
```python
|
||||
import time
|
||||
from server.telemetry.data import TelemetryData
|
||||
|
||||
|
||||
def get_parser():
|
||||
return MyParser()
|
||||
|
||||
|
||||
class MyParser:
|
||||
def game_id(self) -> str:
|
||||
"""返回与 manifest.json 一致的 game id"""
|
||||
return "unique_game_id"
|
||||
|
||||
def parse(self, data: bytes, addr: tuple) -> TelemetryData:
|
||||
"""
|
||||
解析 UDP 数据包
|
||||
data: 原始字节数据
|
||||
addr: (host, port) 发送方地址
|
||||
返回: server.telemetry.data.TelemetryData 对象
|
||||
"""
|
||||
td = TelemetryData(game_id="unique_game_id", timestamp=time.time())
|
||||
td.raw = {"raw_hex": data.hex(), "length": len(data)}
|
||||
# 填充遥测字段...
|
||||
return td
|
||||
```
|
||||
|
||||
#### TelemetryData 可用字段
|
||||
安装方式:在 TurboSu 设置页面 → 游戏插件管理 → 导入 `.tsp`
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| speed_kmh | float | 速度 (km/h) |
|
||||
| speed_mph | float | 速度 (mph) |
|
||||
| rpm | float | 发动机转速 |
|
||||
| max_rpm | float | 最大转速 |
|
||||
| gear | int | 当前档位 (0=N, 1-8, -1=R) |
|
||||
| throttle | float | 油门 (0-1) |
|
||||
| brake | float | 刹车 (0-1) |
|
||||
| clutch | float | 离合 (0-1) |
|
||||
| handbrake | float | 手刹 (0-1) |
|
||||
| steering | float | 转向 (-1 to 1) |
|
||||
| lap_time | float | 当前圈速 (秒) |
|
||||
| best_lap | float | 最佳圈速 (秒) |
|
||||
| last_lap | float | 上一圈速 (秒) |
|
||||
| lap_number | int | 圈数 |
|
||||
| fuel | float | 燃油量 |
|
||||
| boost | float | 涡轮增压值 |
|
||||
| horsepower | float | 马力 |
|
||||
| torque | float | 扭矩 |
|
||||
| position_x/y/z | float | 车辆坐标 |
|
||||
| engine_temp | float | 发动机温度 |
|
||||
| oil_temp | float | 油温 |
|
||||
| raw | dict | 原始数据 (自动记录) |
|
||||
### 提交仪表盘主题 (`.tsd`)
|
||||
|
||||
### 提交仪表盘主题
|
||||
创建独立文件夹:
|
||||
|
||||
1. 在 TurboSu 设置页面创建/编辑仪表盘
|
||||
2. 导出为 JSON 文件
|
||||
3. 提交到 `dashboards/` 目录
|
||||
```
|
||||
my_dashboard/
|
||||
├── manifest.json # 元信息 (参考下方格式)
|
||||
└── index.html # 完整独立页面
|
||||
```
|
||||
|
||||
`index.html` 需包含:
|
||||
- WebSocket 连接:`ws://<host>/ws`
|
||||
- 接收 `telemetry` 消息类型的数据
|
||||
- 用 `data-bind="字段名"` 属性绑定数据
|
||||
- 比例约束渲染逻辑
|
||||
|
||||
安装方式:在 TurboSu 仪表盘页面 → 导入 `.tsd`,或右键卡片导出。
|
||||
|
||||
### 报告 Bug
|
||||
|
||||
在 GitHub Issues 中提交,请包含:
|
||||
- 操作系统和 Python 版本
|
||||
- 错误日志 (logs/turbosu.log)
|
||||
请在 Issue 中包含:
|
||||
- 系统信息 (OS, Python 版本)
|
||||
- 错误日志 (`logs/turbosu.log`)
|
||||
- 复现步骤
|
||||
|
||||
### 功能建议
|
||||
|
||||
欢迎提交 Issue 讨论新功能方向。
|
||||
欢迎提交 Issue 讨论。
|
||||
|
||||
## 开发环境
|
||||
|
||||
```bash
|
||||
cd Project/TurboSu
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
@@ -110,10 +92,10 @@ python app.py
|
||||
|
||||
## 代码规范
|
||||
|
||||
- Python 代码遵循 PEP 8
|
||||
- 使用 `utils.logger` 进行日志记录(不要用 print)
|
||||
- 前端 JS 使用模块化结构,文件放在对应目录下
|
||||
- Python: PEP 8
|
||||
- 日志使用 `utils.logger`,不用 `print`
|
||||
- 前端 JS 模块化,文件放对应目录
|
||||
|
||||
## 许可证
|
||||
|
||||
贡献即表示同意你的代码在 Apache 2.0 许可下发布。
|
||||
贡献即表示同意代码在 Apache 2.0 许可下发布。
|
||||
|
||||
Reference in New Issue
Block a user