73 lines
2.1 KiB
C#
73 lines
2.1 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Ichni.RhythmGame
|
|
{
|
|
public abstract class NoteGenerateEffect : NoteEffectBase
|
|
{
|
|
#region [效果参数] Effect Parameters
|
|
public float generateTime;
|
|
#endregion
|
|
|
|
#region [效果逻辑覆盖] Effect Pattern Overrides
|
|
protected override EffectState CheckEffectState(float triggerTime)
|
|
{
|
|
float songTime = CoreServices.TimeProvider.SongTime;
|
|
triggerTime -= generateTime;
|
|
|
|
if (songTime < triggerTime)
|
|
{
|
|
return EffectState.Before;
|
|
}
|
|
|
|
if (songTime >= triggerTime &&
|
|
songTime <= triggerTime + effectTime)
|
|
{
|
|
return EffectState.Middle;
|
|
}
|
|
|
|
if (songTime > triggerTime + effectTime)
|
|
{
|
|
return EffectState.After;
|
|
}
|
|
|
|
return EffectState.Error;
|
|
}
|
|
|
|
public override void UpdateEffect(float judgeTime)
|
|
{
|
|
EffectState state = CheckEffectState(judgeTime);
|
|
float songTime = CoreServices.TimeProvider.SongTime;
|
|
judgeTime -= generateTime;
|
|
|
|
if (state == EffectState.Before && nowEffectState != EffectState.Before)
|
|
{
|
|
nowEffectState = EffectState.Before;
|
|
effectProgressPercent = 0;
|
|
Recover();
|
|
}
|
|
else if (state == EffectState.Middle)
|
|
{
|
|
if (nowEffectState == EffectState.Before)
|
|
{
|
|
PreExecute();
|
|
}
|
|
|
|
nowEffectState = EffectState.Middle;
|
|
effectProgressPercent = (songTime - judgeTime) / effectTime;
|
|
Execute();
|
|
}
|
|
else if (state == EffectState.After && nowEffectState != EffectState.After)
|
|
{
|
|
nowEffectState = EffectState.After;
|
|
effectProgressPercent = 1;
|
|
Adjust();
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
|
|
} |