Ejemplo n.º 1
0
    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);
            }
        }
    }
Ejemplo n.º 3
0
    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);
            }
        }
    }