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