Repository navigation
feat & enhance: 完善 TrackCamouflage 解锁条件、谱师伪装与封面加载 - #151
Conversation
新增 UnlockScore:将解除伪装的条件改为,只有玩家的达成率达标后才解除伪装(默认为0,即与原来的行为相同,只要有成绩就解除伪装); 优化 NoteDesigner/HideNoteDesigner 的行为; 优化伪装封面文件查找的逻辑,并重写中英配置说明。
审查者指南通过引入可配置的成就解锁阈值、明确音符设计者的隐藏语义,并增强外套文件发现和诊断功能来改进 TrackCamouflage,同时更新英文和中文配置文档。 TrackCamouflage 解锁评估时序图sequenceDiagram
participant TrackCamouflage
participant UserDataManager
participant PlayerData
participant ScoreDic
TrackCamouflage->>UserDataManager: GetUserData(i)
UserDataManager-->>TrackCamouflage: PlayerData
TrackCamouflage->>PlayerData: ScoreDic[j]
PlayerData-->>TrackCamouflage: UserScore
TrackCamouflage->>TrackCamouflage: CamouflageCheck(musicID)
alt Every entered player reaches UnlockScore
TrackCamouflage-->>TrackCamouflage: return false
else Any entered player is below UnlockScore
TrackCamouflage-->>TrackCamouflage: return true
end
伪装外套发现流程图flowchart TD
A[Initialize] --> B[GetFiles for TOML definitions]
B --> C[GetFiles for *_jacket.*]
C --> D[Filter by music ID and AllowedImageExts]
D --> E{Jacket found?}
E -- Yes --> F[LoadJacketTexture]
E -- No --> G[Log missing jacket]
F --> H[Log loaded jacket file]
文件级变更
提示和命令与 Sourcery 交互
自定义你的使用体验访问你的仪表板以:
获取帮助Original review guide in EnglishReviewer's GuideEnhances TrackCamouflage by introducing configurable achievement thresholds for unlocking, clarifying note-designer masking semantics, and making jacket-file discovery and diagnostics more robust, with updated English and Chinese configuration documentation. Sequence diagram for TrackCamouflage unlock evaluationsequenceDiagram
participant TrackCamouflage
participant UserDataManager
participant PlayerData
participant ScoreDic
TrackCamouflage->>UserDataManager: GetUserData(i)
UserDataManager-->>TrackCamouflage: PlayerData
TrackCamouflage->>PlayerData: ScoreDic[j]
PlayerData-->>TrackCamouflage: UserScore
TrackCamouflage->>TrackCamouflage: CamouflageCheck(musicID)
alt Every entered player reaches UnlockScore
TrackCamouflage-->>TrackCamouflage: return false
else Any entered player is below UnlockScore
TrackCamouflage-->>TrackCamouflage: return true
end
Flow diagram for camouflage jacket discoveryflowchart TD
A[Initialize] --> B[GetFiles for TOML definitions]
B --> C[GetFiles for *_jacket.*]
C --> D[Filter by music ID and AllowedImageExts]
D --> E{Jacket found?}
E -- Yes --> F[LoadJacketTexture]
E -- No --> G[Log missing jacket]
F --> H[Log loaded jacket file]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
你好——我发现了 1 个问题
面向 AI 代理的提示
请处理本次代码审查中的评论:
## 个别评论
### 评论 1
<location path="AquaMai.Mods/Fancy/TrackCamouflage.cs" line_range="106-108" />
<code_context>
- var jacketFiles = Directory.GetFiles(resolvedDir, $"{musicID}_jacket.*", SearchOption.TopDirectoryOnly);
+ // 根据当前正在处理的歌曲的ID,从allJacketFiles中筛选出匹配的jacket
+ var jacketFiles = allJacketFiles.Where(
+ s => int.TryParse(s.Split('_')[0], out var res) && res == musicID &&
+ AllowedImageExts.Contains(Path.GetExtension(s).ToLowerInvariant())).ToList();
+
+ if (jacketFiles.Count == 0)
</code_context>
<issue_to_address>
**问题 (bug_risk):** 当解析出的伪装目录或其父路径包含下划线时,有效的 jacket 文件会被拒绝,因为 `s.Split('_')[0]` 应用于完整路径而不是文件名,因此无法解析音乐 ID。该筛选器还会接受 `123_jacket_backup.jpg` 这样的文件名,并可能加载该文件,而不是精确的 `<Music ID>_jacket` 文件。
**触发条件:** 当 `CamouflageDir` 解析为包含 `_` 的路径,或存在多个名称相似的 jacket 文件时。
**建议修复:** 在解析前提取 `Path.GetFileName(s)`,并要求文件名精确匹配 `$"{musicID}_jacket"`,同时使用允许的扩展名。
```suggestion
var jacketFiles = allJacketFiles.Where(
s =>
{
var fileName = Path.GetFileName(s);
return Path.GetFileNameWithoutExtension(fileName) == $"{musicID}_jacket" &&
AllowedImageExts.Contains(Path.GetExtension(fileName).ToLowerInvariant());
}).ToList();
```
</issue_to_address>Sourcery 评估
等待批准。 请先处理 1 个发现的问题。
阻塞性发现:AquaMai.Mods/Fancy/TrackCamouflage.cs:108
Original comment in English
Hey - I've found 1 issue
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="AquaMai.Mods/Fancy/TrackCamouflage.cs" line_range="106-108" />
<code_context>
- var jacketFiles = Directory.GetFiles(resolvedDir, $"{musicID}_jacket.*", SearchOption.TopDirectoryOnly);
+ // 根据当前正在处理的歌曲的ID,从allJacketFiles中筛选出匹配的jacket
+ var jacketFiles = allJacketFiles.Where(
+ s => int.TryParse(s.Split('_')[0], out var res) && res == musicID &&
+ AllowedImageExts.Contains(Path.GetExtension(s).ToLowerInvariant())).ToList();
+
+ if (jacketFiles.Count == 0)
</code_context>
<issue_to_address>
**issue (bug_risk):** Valid jacket files are rejected when the resolved camouflage directory or its parent path contains an underscore, because `s.Split('_')[0]` is applied to the full path rather than the filename and therefore cannot parse the music ID. The filter also accepts names such as `123_jacket_backup.jpg` and can load that file instead of the exact `<Music ID>_jacket` file.
**Triggers:** When `CamouflageDir` resolves to a path containing `_`, or when multiple similarly named jacket files are present.
**Suggested fix:** Extract `Path.GetFileName(s)` before parsing and require an exact filename such as `$"{musicID}_jacket"` plus an allowed extension.
```suggestion
var jacketFiles = allJacketFiles.Where(
s =>
{
var fileName = Path.GetFileName(s);
return Path.GetFileNameWithoutExtension(fileName) == $"{musicID}_jacket" &&
AllowedImageExts.Contains(Path.GetExtension(fileName).ToLowerInvariant());
}).ToList();
```
</issue_to_address>Sourcery assessment
Approval pending. 1 finding to address first.
Blocking findings: AquaMai.Mods/Fancy/TrackCamouflage.cs:108
There was a problem hiding this comment.
All reported issues were addressed across 1 file
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
There was a problem hiding this comment.
All reported issues were addressed
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
There was a problem hiding this comment.
All reported issues were addressed across 1 file (changes from recent commits).
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Sourcery 摘要
增强轨道伪装的配置与加载功能,同时使伪装移除取决于玩家的成就阈值。
新功能:
增强:
Original summary in English
Sourcery 总结
增强轨道伪装的配置与加载功能,同时使伪装移除依赖于可配置的成就阈值。
新功能:
错误修复:
增强功能:
Original summary in English
Sourcery 总结
增强曲目伪装的配置与加载功能,同时使伪装移除取决于可配置的玩家成就阈值。
新功能:
错误修复:
增强功能:
Original summary in English
Summary by Sourcery
Enhance track camouflage configuration and loading while making camouflage removal depend on configurable player achievement thresholds.
New Features:
Bug Fixes:
Enhancements: