chore: move default character package

This commit is contained in:
2026-05-31 13:48:02 +08:00
parent 636b0ff872
commit 49fd9b3130
193 changed files with 159 additions and 60 deletions
+2
View File
@@ -32,6 +32,8 @@ qt_add_executable(QtDesktopPet
src/character/CharacterPackage.cpp src/character/CharacterPackage.cpp
src/character/CharacterPackageLoader.h src/character/CharacterPackageLoader.h
src/character/CharacterPackageLoader.cpp src/character/CharacterPackageLoader.cpp
src/character/CharacterPackageRepository.h
src/character/CharacterPackageRepository.cpp
src/character/FrameAnimator.h src/character/FrameAnimator.h
src/character/FrameAnimator.cpp src/character/FrameAnimator.cpp
src/config/AIConfig.h src/config/AIConfig.h
+4 -10
View File
@@ -10,7 +10,7 @@ QtDesktopPet 是一个基于 Qt Widgets / C++17 的 Windows 桌面宠物原型
- 鼠标拖动 - 鼠标拖动
- 右键菜单退出和状态测试 - 右键菜单退出和状态测试
- 置顶切换 - 置顶切换
- `shiroko` 角色包读取 - `resources/characters/shiroko` 默认角色包读取
- PNG 序列帧动画播放 - PNG 序列帧动画播放
- `idle` / `talk` / `think` / `sleep` / `happy` / `drag` / `error` 状态 - `idle` / `talk` / `think` / `sleep` / `happy` / `drag` / `error` 状态
- 托盘显示、隐藏、退出 - 托盘显示、隐藏、退出
@@ -74,13 +74,13 @@ cmake --build build/mingw-debug
当前默认角色包位于: 当前默认角色包位于:
```text ```text
shiroko/ resources/characters/shiroko/
``` ```
基本结构: 角色包按 `resources/characters/<characterId>/` 组织,后续新增角色包时放在同级子目录。基本结构:
```text ```text
shiroko/ resources/characters/shiroko/
character.json character.json
preview.png preview.png
idle/ idle/
@@ -94,12 +94,6 @@ shiroko/
当前素材版本为 `2.1.0-stable`,所有帧使用 512x512 透明画布。当前实现会加载当前角色包的各状态帧并按 `character.json` 中的 FPS 播放。 当前素材版本为 `2.1.0-stable`,所有帧使用 512x512 透明画布。当前实现会加载当前角色包的各状态帧并按 `character.json` 中的 FPS 播放。
后续计划将默认角色包位置整理为:
```text
resources/characters/shiroko/
```
## 配置和日志 ## 配置和日志
应用配置保存到 Qt 标准配置目录: 应用配置保存到 Qt 标准配置目录:
+8 -9
View File
@@ -203,7 +203,7 @@ DesktopPet/
├── resources/ ├── resources/
│ ├── icons/ │ ├── icons/
│ └── characters/ │ └── characters/
│ └── default_pet/ │ └── <character_id>/
│ ├── character.json │ ├── character.json
│ ├── preview.png │ ├── preview.png
│ ├── idle/ │ ├── idle/
@@ -566,8 +566,8 @@ PNG 图片序列 + character.json
示例: 示例:
```text ```text
characters/ resources/characters/
└── default_pet/ └── <character_id>/
├── character.json ├── character.json
├── preview.png ├── preview.png
├── idle/ ├── idle/
@@ -600,7 +600,7 @@ characters/
```json ```json
{ {
"schemaVersion": 1, "schemaVersion": 1,
"id": "default_pet", "id": "shiroko",
"displayName": "默认桌宠", "displayName": "默认桌宠",
"author": "DesktopPet", "author": "DesktopPet",
"version": "1.0.0", "version": "1.0.0",
@@ -1207,7 +1207,7 @@ conversation_history.json
"locked": false "locked": false
}, },
"character": { "character": {
"current": "default_pet" "current": "shiroko"
}, },
"performance": { "performance": {
"mode": "standard", "mode": "standard",
@@ -1471,7 +1471,7 @@ void Example::run()
```text ```text
1. 创建 CharacterPackage 1. 创建 CharacterPackage
2. 创建 CharacterPackageLoader 2. 创建 CharacterPackageLoader
3. 读取 resources/characters/default_pet/character.json 3. 读取 resources/characters/shiroko/character.json
4. 解析 states 4. 解析 states
5. 加载 idle 状态帧 5. 加载 idle 状态帧
6. 校验资源包 6. 校验资源包
@@ -1684,7 +1684,6 @@ MIT License 开源
```text ```text
1. 设置页内 AI 连通性测试 1. 设置页内 AI 连通性测试
2. 对话历史内存上限和可选持久化 2. 对话历史内存上限和可选持久化
3. character.json 中 base、anchor、bubble offset 的解析与应用 3. 角色包导入和角色切换
4. 角色包位置整理和角色切换 4. 发布前素材授权确认与打包验证
5. 发布前素材授权确认与打包验证
``` ```
+15 -20
View File
@@ -84,12 +84,12 @@ cmake -S . -B build/mingw-debug -G Ninja `
## 3. 角色包约定 ## 3. 角色包约定
`shiroko` 目录作为当前默认角色包 `resources/characters/shiroko` 目录作为当前默认角色包。角色包按 `resources/characters/<characterId>/` 组织,后续新增角色包时放在同级子目录
已检查到的结构: 已检查到的结构:
```text ```text
shiroko/ resources/characters/shiroko/
├── character.json ├── character.json
├── preview.png ├── preview.png
├── README.md ├── README.md
@@ -150,7 +150,7 @@ error 20 帧
2. 创建 CMakeLists.txt 2. 创建 CMakeLists.txt
3. 创建 main.cpp 3. 创建 main.cpp
4. 创建 src/、resources/ 等基础目录 4. 创建 src/、resources/ 等基础目录
5. 决定 shiroko 是否移动到 resources/characters/shiroko 5. 建立 resources/characters/<characterId> 角色包目录约定
6. 创建最小 README.md 6. 创建最小 README.md
7. 确认 LICENSE 是否采用 MIT 7. 确认 LICENSE 是否采用 MIT
``` ```
@@ -169,7 +169,7 @@ error 20 帧
```text ```text
1. 是否创建 .gitignore 1. 是否创建 .gitignore
2. 是否创建 MIT LICENSE 2. 是否创建 MIT LICENSE
3. 是否将 shiroko 移动到 resources/characters/shiroko 3. 是否将默认角色包作为文件型内置资源保留在 resources/characters/shiroko
4. 是否立即创建最小 Qt 工程 4. 是否立即创建最小 Qt 工程
``` ```
@@ -236,7 +236,7 @@ error 20 帧
```text ```text
1. CharacterPackage 1. CharacterPackage
2. CharacterPackageLoader 2. CharacterPackageLoader
3. 读取 shiroko/character.json 3. 读取 resources/characters/shiroko/character.json
4. 校验 schemaVersion 4. 校验 schemaVersion
5. 校验 defaultState 5. 校验 defaultState
6. 校验 states 6. 校验 states
@@ -261,7 +261,7 @@ error 20 帧
验收标准: 验收标准:
```text ```text
1. 能读取 shiroko/character.json 1. 能读取 resources/characters/shiroko/character.json
2. 能获取 idle 状态帧路径列表 2. 能获取 idle 状态帧路径列表
3. 能显示 idle 第一帧 3. 能显示 idle 第一帧
4. 不在 paintEvent 中加载图片 4. 不在 paintEvent 中加载图片
@@ -531,7 +531,7 @@ error 20 帧
3. 阶段 2A 角色包最小读取: 3. 阶段 2A 角色包最小读取:
已有 CharacterPackage / CharacterPackageLoader 已有 CharacterPackage / CharacterPackageLoader
能读取 shiroko/character.json 并收集状态帧路径 能读取 resources/characters/shiroko/character.json 并收集状态帧路径
4. 阶段 2B idle 帧动画: 4. 阶段 2B idle 帧动画:
已新增 AnimationClip / FrameAnimator 已新增 AnimationClip / FrameAnimator
@@ -574,11 +574,9 @@ error 20 帧
当前实现与计划仍存在差异: 当前实现与计划仍存在差异:
```text ```text
1. shiroko 角色包仍位于项目根目录 shiroko/,尚未移动到 resources/characters/shiroko 1. SettingsDialog 仍是最小设置界面,尚未包含完整角色切换流程和更完整的分区布局
2. SettingsDialog 仍是最小设置界面,尚未包含 AI 测试按钮、角色选择和更完整的分区布局 2. ConversationManager 请求上下文会截取最近 12 条历史,但内存中的 m_history 尚未做最大长度裁剪
3. CharacterPackage 尚未解析并应用 character.json 中的 base、anchor、bubble offset 3. README 和开发文档已开始同步当前进度,但仍需随功能继续维护
4. ConversationManager 请求上下文会截取最近 12 条历史,但内存中的 m_history 尚未做最大长度裁剪
5. README 和开发文档已开始同步当前进度,但仍需随功能继续维护
``` ```
--- ---
@@ -612,10 +610,8 @@ error 20 帧
```text ```text
1. 完善设置界面: 1. 完善设置界面:
- AI 配置和测试 - AI 配置和测试
- 角色包路径和角色切换 - 角色包导入和角色切换
2. 解析并应用角色包 base / anchor / bubble 配置 2. 补一轮可重复的稳定性与性能测试记录
3. 评估是否移动 shiroko 到 resources/characters/shiroko
4. 补一轮可重复的稳定性与性能测试记录
``` ```
--- ---
@@ -625,8 +621,7 @@ error 20 帧
后续开始写代码前,需要逐项确认: 后续开始写代码前,需要逐项确认:
```text ```text
1. 是否把 shiroko 移动到 resources/characters/shiroko 1. shiroko 素材是否允许作为正式开源发布素材继续保留在仓库中
2. shiroko 素材是否允许作为正式开源发布素材继续保留在仓库中 2. 设置页下一步先做 AI 测试入口,还是先做角色包配置
3. 设置页下一步先做 AI 测试入口,还是先做角色包配置 3. 是否需要把对话历史持久化保存,还是第一版只保留内存会话
4. 是否需要把对话历史持久化保存,还是第一版只保留内存会话
``` ```
-1
View File
@@ -1 +0,0 @@
@@ -2,6 +2,6 @@
按动画素材规范重新整理:所有帧均为 512x512 透明画布,未裁切角色本体;帧编号连续。 按动画素材规范重新整理:所有帧均为 512x512 透明画布,未裁切角色本体;帧编号连续。
帧数:idle 30talk 30think 30sleep 30drag 30happy 20error 20。 帧数:idle 30talk 20think 30sleep 30drag 30happy 20error 20。
说明:本版采用稳定坐标系与关键帧扩展方式生成,用于动画调试和桌宠加载器测试。 说明:本版采用稳定坐标系与关键帧扩展方式生成,用于动画调试和桌宠加载器测试。

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 153 KiB

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 133 KiB

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 146 KiB

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Some files were not shown because too many files have changed in this diff Show More