void Update() { if (Pause) { return; } SongInfo song = m_musicManager.currentSongInfo; if (m_musicManager.IsPlaying()) { //前帧到现帧之间获得成功的舞台演出 m_previousIndex = m_seekUnit.nextIndex; m_seekUnit.ProceedTime(m_musicManager.DeltaBeatCountFromStart); // 开始在“之前的移动位置”和“更新后的移动位置”之间的活动。 for (int i = m_previousIndex; i < m_seekUnit.nextIndex; i++) { //复制事件数据 StagingDirection clone = song.stagingDirectionSequence[i].GetClone() as StagingDirection; clone.OnBegin(); //添加到“执行中的活动列表” m_activeEvents.AddLast(clone); } } //“执行中的活动列表”的执行,LinkedList<T>类在.NET framework中是一个双向链表,便于删除 for (LinkedListNode <StagingDirection> it = m_activeEvents.First; it != null; it = it.Next) { StagingDirection activeEvent = it.Value; activeEvent.Update(); //执行结束了吗?. if (activeEvent.IsFinished()) { activeEvent.OnEnd(); //从“执行中的事件列表”中删除 m_activeEvents.Remove(it); } } }
void Update() { SongInfo song = m_musicManager.currentSongInfo; // 检测到新的事件 if (m_musicManager.IsPlaying()) { // 保存旧的定位位置 m_previousIndex = m_seekUnit.nextIndex; m_seekUnit.ProceedTime(m_musicManager.beatCount - m_musicManager.previousBeatCount); // 开始执行“上次的定位位置”和“更新后的定位位置”之间存在的事件 for (int i = m_previousIndex; i < m_seekUnit.nextIndex; i++) { // 拷贝事件数据 StagingDirection clone = song.stagingDirectionSequence[i].GetClone() as StagingDirection; clone.OnBegin(); // 添加到“执行中的事件列表” m_activeEvents.AddLast(clone); } } // 执行“执行中的事件” for (LinkedListNode <StagingDirection> it = m_activeEvents.First; it != null; it = it.Next) { StagingDirection activeEvent = it.Value; activeEvent.Update(); // 执行已经完成? if (activeEvent.IsFinished()) { activeEvent.OnEnd(); // 从“执行中事件列表”中删除 m_activeEvents.Remove(it); } } }
void Update() { SongInfo song = m_musicManager.currentSongInfo; if (m_musicManager.IsPlaying()) { //前フレームから現フレームへの間にヒットしたステージ演出の取得 m_previousIndex = m_seekUnit.nextIndex; m_seekUnit.ProceedTime(m_musicManager.beatCount - m_musicManager.previousBeatCount); // 「直前のシーク位置」と「更新後のシーク位置」の間にあるイベントを実行開始. for (int i = m_previousIndex; i < m_seekUnit.nextIndex; i++) { // イベントデータをコピーする. StagingDirection clone = song.stagingDirectionSequence[i].GetClone() as StagingDirection; clone.OnBegin(); // 「実行中のイベントリスト」に追加. m_activeEvents.AddLast(clone); } } // 「実行中のイベント」の実行. for (LinkedListNode <StagingDirection> it = m_activeEvents.First; it != null; it = it.Next) { StagingDirection activeEvent = it.Value; activeEvent.Update(); // 実行が終了した?. if (activeEvent.IsFinished()) { activeEvent.OnEnd(); // 「実行中のイベントリスト」から削除する. m_activeEvents.Remove(it); } } }