谱面替换

This commit is contained in:
SoulliesOfficial
2026-07-30 09:28:43 -04:00
parent 58afd6acc1
commit 96619b1bb5
50 changed files with 1453 additions and 807 deletions

View File

@@ -58,9 +58,18 @@ namespace Ichni.RhythmGame
#region [] Main Update Logic
public virtual void UpdateEffect(float judgeTime)
{
EffectState state = CheckEffectState(judgeTime);
float songTime = CoreServices.TimeProvider.SongTime;
// 零时长特效必须在到达触发时间的当帧执行。
// 若继续进入 Middle 分支,不仅会把 Adjust() 延迟到下一帧,还会产生 0 / 0 的 NaN 进度。
if (isInstantEffect)
{
UpdateInstantEffect(judgeTime, songTime);
return;
}
EffectState state = CheckEffectState(judgeTime);
if (state == EffectState.Before && nowEffectState != EffectState.Before)
{
nowEffectState = EffectState.Before;
@@ -86,6 +95,27 @@ namespace Ichni.RhythmGame
}
}
private void UpdateInstantEffect(float triggerTime, float songTime)
{
if (songTime < triggerTime)
{
if (nowEffectState != EffectState.Before)
{
nowEffectState = EffectState.Before;
effectProgressPercent = 0;
Recover();
}
return;
}
if (nowEffectState == EffectState.After) return;
nowEffectState = EffectState.After;
effectProgressPercent = 1;
Adjust();
}
protected virtual EffectState CheckEffectState(float triggerTime)
{
float songTime = CoreServices.TimeProvider.SongTime;