• R/O
  • HTTP
  • SSH
  • HTTPS

CsWin10Desktop3: Commit

Visual C# 7.0, Windows10 Desktop App


Commit MetaInfo

Revision855a7b393aff84f10156db844358f85b5d5ade95 (tree)
Time2017-06-11 19:42:00
Authorくまかみ工房 <kumakamikoubou@gmai...>
Commiterくまかみ工房

Log Message

演奏画面での、AutoPlayチップのヒット処理と発声処理を分離。

Change Summary

Incremental Difference

--- a/StrokeStyleT/ステージ/演奏/演奏ステージ.cs
+++ b/StrokeStyleT/ステージ/演奏/演奏ステージ.cs
@@ -214,15 +214,16 @@ namespace SST.ステージ.演奏
214214
215215 #region " 自動ヒット処理。"
216216 //----------------
217- this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーとの時間sec, ヒット判定バーとの距離 ) => {
217+ this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーと描画との時間sec, ヒット判定バーと発声との時間sec, ヒット判定バーとの距離 ) => {
218218
219219 var オプション設定 = App.ユーザ管理.選択されているユーザ.オプション設定;
220220 var 対応表 = オプション設定.ドラムとチップと入力の対応表[ chip.チップ種別 ];
221221 var AutoPlay = オプション設定.AutoPlay[ 対応表.AutoPlay種別 ];
222222
223223 bool チップはヒット済みである = chip.ヒット済みである;
224- bool チップはMISSエリアに達している = ( ヒット判定バーとの時間sec > オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] );
225- bool チップはヒット判定バーを通過した = ( 0 <= ヒット判定バーとの距離 );
224+ bool チップはMISSエリアに達している = ( ヒット判定バーと描画との時間sec > オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] );
225+ bool チップは描画についてヒット判定バーを通過した = ( 0 <= ヒット判定バーと描画との時間sec );
226+ bool チップは発声についてヒット判定バーを通過した = ( 0 <= ヒット判定バーと発声との時間sec );
226227
227228 if( チップはヒット済みである )
228229 {
@@ -249,7 +250,17 @@ namespace SST.ステージ.演奏
249250 }
250251 }
251252
252- if( チップはヒット判定バーを通過した )
253+ if( チップは発声についてヒット判定バーを通過した )
254+ {
255+ // 自動ヒット判定。
256+ if( ( AutoPlay && 対応表.AutoPlayON.自動ヒット && 対応表.AutoPlayON.自動ヒット時処理.再生 ) ||
257+ ( AutoPlay && 対応表.AutoPlayON.自動ヒット && 対応表.AutoPlayON.自動ヒット時処理.再生 ) )
258+ {
259+ this._チップの発声を行う( chip );
260+ }
261+ }
262+
263+ if( チップは描画についてヒット判定バーを通過した )
253264 {
254265 // 自動ヒット判定。
255266 if( AutoPlay && 対応表.AutoPlayON.自動ヒット )
@@ -299,7 +310,7 @@ namespace SST.ステージ.演奏
299310
300311 var 処理済み入力 = new List<ドラム入力イベント>(); // ヒット処理が終わった入力は、二重処理しないよう、この中に追加しておく。
301312
302- this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーとの時間sec, ヒット判定バーとの距離 ) => {
313+ this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーと描画との時間sec, ヒット判定バーと発声との時間sec, ヒット判定バーとの距離 ) => {
303314
304315 #region " ヒット判定 "
305316 //----------------
@@ -314,10 +325,10 @@ namespace SST.ステージ.演奏
314325 if( !( チップの対応表.AutoPlayOFF.ユーザヒット ) )
315326 return; // このチップは、AutoPlay OFF 時でもユーザヒットの対象ではない。
316327
317- double ヒット判定バーとの時間の絶対値sec = Math.Abs( ヒット判定バーとの時間sec );
328+ double ヒット判定バーとの時間の絶対値sec = Math.Abs( ヒット判定バーと描画との時間sec );
318329
319- bool チップはMISSエリアに達している = ( ヒット判定バーとの時間sec > オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] );
320- if( !( ヒット判定バーとの時間sec >= -( オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] ) && !チップはMISSエリアに達している ) )
330+ bool チップはMISSエリアに達している = ( ヒット判定バーと描画との時間sec > オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] );
331+ if( !( ヒット判定バーと描画との時間sec >= -( オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] ) && !チップはMISSエリアに達している ) )
321332 return; // チップはヒット可能エリアにある。
322333
323334 var ヒット入力 = App.入力管理.ポーリング結果.FirstOrDefault( ( 入力 ) => {
@@ -775,7 +786,7 @@ namespace SST.ステージ.演奏
775786 double 再生開始時刻sec = ( 時刻sec - 背景動画チップ.発声時刻sec );
776787 this._背景動画?.再生を開始する( 再生開始時刻sec );
777788 this._背景動画開始済み = true;
778- this._BGM?.Play( 再生開始時刻sec );
789+ this._BGM?.Play( 再生開始時刻sec - App.サウンドデバイス.遅延sec );
779790 this._BGM再生開始済み = true;
780791 Log.Info( $"背景動画の再生を開始しました。(再生開始時刻: {再生開始時刻sec} sec)" );
781792 }
@@ -800,7 +811,7 @@ namespace SST.ステージ.演奏
800811
801812 this._チップ画像.加算合成 = false;
802813
803- this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーとの時間sec, ヒット判定バーとの距離 ) => {
814+ this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーと描画との時間sec, ヒット判定バーと発声との時間sec, ヒット判定バーとの距離 ) => {
804815
805816 if( chip.チップ種別 == チップ種別.小節線 )
806817 {
@@ -841,7 +852,7 @@ namespace SST.ステージ.演奏
841852
842853 this._チップ画像.加算合成 = false;
843854
844- this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーとの時間sec, ヒット判定バーとの距離 ) => {
855+ this._描画範囲のチップに処理を適用する( 現在の演奏時刻sec, ( chip, index, ヒット判定バーと描画との時間sec, ヒット判定バーと発声との時間sec, ヒット判定バーとの距離 ) => {
845856
846857 float 縦中央位置 = (float)( ヒット判定バーの中央Y座標 + ヒット判定バーとの距離 );
847858
@@ -1039,7 +1050,7 @@ namespace SST.ステージ.演奏
10391050 /// <see cref="_描画開始チップ番号"/> から画面上端にはみ出すまでの間の各チップに対して、指定された処理を適用する。
10401051 /// </summary>
10411052 /// <param name="適用する処理">引数は、順に、対象のチップ、チップ番号、ヒット判定バーとの時間sec、ヒット判定バーとの距離</param>
1042- private void _描画範囲のチップに処理を適用する( double 現在の演奏時刻sec, Action<チップ, int, double, double> 適用する処理 )
1053+ private void _描画範囲のチップに処理を適用する( double 現在の演奏時刻sec, Action<チップ, int, double, double, double> 適用する処理 )
10431054 {
10441055 var スコア = App.演奏スコア;
10451056 if( null == スコア )
@@ -1050,8 +1061,9 @@ namespace SST.ステージ.演奏
10501061 var チップ = スコア.チップリスト[ i ];
10511062
10521063 // ヒット判定バーとチップの間の、時間 と 距離 を算出。→ いずれも、負数ならバー未達、0でバー直上、正数でバー通過。
1053- double ヒット判定バーとの時間sec = 現在の演奏時刻sec - チップ.描画時刻sec;
1054- double ヒット判定バーとの距離 = スコア.指定された時間secに対応する符号付きピクセル数を返す( this._現在進行描画中の譜面スクロール速度の倍率, ヒット判定バーとの時間sec );
1064+ double ヒット判定バーと描画との時間sec = 現在の演奏時刻sec - チップ.描画時刻sec;
1065+ double ヒット判定バーと発声との時間sec = 現在の演奏時刻sec - チップ.発声時刻sec;
1066+ double ヒット判定バーとの距離 = スコア.指定された時間secに対応する符号付きピクセル数を返す( this._現在進行描画中の譜面スクロール速度の倍率, ヒット判定バーと描画との時間sec );
10551067
10561068 // 終了判定。
10571069 bool チップは画面上端より上に出ている = ( ( ヒット判定バーの中央Y座標 + ヒット判定バーとの距離 ) < -40.0 ); // -40 はチップが隠れるであろう適当なマージン。
@@ -1059,7 +1071,7 @@ namespace SST.ステージ.演奏
10591071 break;
10601072
10611073 // 処理実行。開始判定(描画開始チップ番号の更新)もこの中で。
1062- 適用する処理( チップ, i, ヒット判定バーとの時間sec, ヒット判定バーとの距離 );
1074+ 適用する処理( チップ, i, ヒット判定バーと描画との時間sec, ヒット判定バーと発声との時間sec, ヒット判定バーとの距離 );
10631075 }
10641076 }
10651077
@@ -1069,27 +1081,10 @@ namespace SST.ステージ.演奏
10691081
10701082 if( ヒット処理表.再生 )
10711083 {
1072- #region " チップを再生する。"
1084+ #region " チップの発声を行う。"
10731085 //----------------
1074- if( chip.チップ種別 == チップ種別.背景動画 )
1075- {
1076- App.サウンドタイマ.一時停止する();
1077-
1078- // 背景動画の再生を開始する。
1079- this._背景動画?.再生を開始する();
1080- this._背景動画開始済み = true;
1081-
1082- // BGMの再生を開始する。
1083- this._BGM?.Play();
1084- this._BGM再生開始済み = true;
1085-
1086- App.サウンドタイマ.再開する();
1087- }
1088- else
1089- {
1090- if( App.システム設定.Autoチップのドラム音を再生する )
1091- this._ドラムサウンド.発声する( chip.チップ種別, ( chip.音量 / (float) チップ.最大音量 ) );
1092- }
1086+ if( chip.発声されていない )
1087+ this._チップの発声を行う( chip );
10931088 //----------------
10941089 #endregion
10951090 }
@@ -1144,5 +1139,33 @@ namespace SST.ステージ.演奏
11441139 #endregion
11451140 }
11461141 }
1142+
1143+ private void _チップの発声を行う( チップ chip )
1144+ {
1145+ if( chip.発声済みである )
1146+ return;
1147+
1148+ chip.発声済みである = true;
1149+
1150+ if( chip.チップ種別 == チップ種別.背景動画 )
1151+ {
1152+ App.サウンドタイマ.一時停止する();
1153+
1154+ // 背景動画の再生を開始する。
1155+ this._背景動画?.再生を開始する();
1156+ this._背景動画開始済み = true;
1157+
1158+ // BGMの再生を開始する。
1159+ this._BGM?.Play();
1160+ this._BGM再生開始済み = true;
1161+
1162+ App.サウンドタイマ.再開する();
1163+ }
1164+ else
1165+ {
1166+ if( App.システム設定.Autoチップのドラム音を再生する )
1167+ this._ドラムサウンド.発声する( chip.チップ種別, ( chip.音量 / (float) チップ.最大音量 ) );
1168+ }
1169+ }
11471170 }
11481171 }
Show on old repository browser