Ejemplo n.º 1
0
        /// <summary>
        /// IMotionProviderメンバーの実装
        /// </summary>
        public void モーションを1フレーム進める(int fps, float elapsedTime, モーフ管理 morphManager)
        {
            // 行列の更新
            foreach (var boneMotion in boneMotions)
            {
                boneMotion.ReviseBone((ulong)現在のフレーム);
            }
            foreach (var morphMotion in morphMotions)
            {
                morphManager.進捗率を設定する(morphMotion.指定したフレームにおけるモーフ値を取得する((ulong)現在のフレーム), morphMotion.モーフ名);
            }

            // 停止中はフレームを進めない
            if (!isPlaying)
            {
                return;
            }

            // フレームを進める
            現在のフレーム += elapsedTime * fps;
            FrameTicked?.Invoke(this, new EventArgs());

            // 最終フレームに達した時の処理
            if (現在のフレーム >= このモーションにおける最終フレーム)
            {
                現在のフレーム = (actionAfterMotion == モーション再生終了後の挙動.Replay) ? 1.0e-3f : このモーションにおける最終フレーム;
                モーションが終了した?.Invoke(this, actionAfterMotion);
            }
        }
Ejemplo n.º 2
0
        public void モーションを1フレーム進める(int fps, float elapsedTime, モーフ管理 morphManager)
        {
            // 行列の更新
            foreach (var boneMotion in _ボーンモーションのリスト)
            {
                boneMotion.ボーンを指定したフレームの姿勢に更新する(現在のフレーム);
            }

            foreach (var morphMotion in _モーフモーションのリスト)
            {
                morphManager.進捗率を設定する(morphMotion.指定したフレームにおけるモーフ値を取得する((ulong)現在のフレーム), morphMotion.モーフ名);
            }

            if (!_再生中である)
            {
                return;
            }

            現在のフレーム += (float)elapsedTime * fps;

            if (現在のフレーム >= このモーションにおける最終フレーム)
            {
                現在のフレーム = このモーションにおける最終フレーム;
            }

            FrameTicked?.Invoke(this, new EventArgs());

            if (現在のフレーム >= このモーションにおける最終フレーム)
            {
                モーションが終了した?.Invoke(this, _モーション再生終了後の挙動);

                if (_モーション再生終了後の挙動 == モーション再生終了後の挙動.Replay)
                {
                    現在のフレーム = 1.0e-3f;
                }
            }
        }