谱面替换
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user