OSDN Git Service

#31602 描画遅延対策として、判定ラインの表示を上下させる機能を試作した。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 15 Feb 2016 16:07:53 +0000 (16:07 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Mon, 15 Feb 2016 16:07:53 +0000 (16:07 +0000)
 * 取り急ぎ、」¥F5/F6で、探偵ラインの上下操作をする。ギターベースも同様。
 * 判定ラインを過ぎたチップは、表示をフェードアウトする。
 * ドラムのスクロール速度に比例して、ある程度判定ラインを上下させるようにした。ただし今のところは、ギター・ベースの判定ラインも、ドラムのスクロール速度に連動して上下する。
 * 判定ラインをドラムパッドやギターボタンの上に表示するよう、表示の上下関係を変更した。
 * デバッグ表示に、判定ラインの位置を追加。
手抜きのため、ドラムとギターベースの判定ライン機能の内部設計が一部異なっています。ご注意ください。(あくまで設計上の話であリ、実使用への影響はありません)

git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@914 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CStageコンフィグ.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏演奏情報.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/C演奏判定ライン座標共通.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CAct演奏DrumsチップファイアD.cs
DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs
DTXManiaプロジェクト/コード/全体/CConfigIni.cs
DTXManiaプロジェクト/コード/全体/CDTXMania.cs
FDK17プロジェクト/コード/00.共通/C変換.cs

index 9fbef2c..e1f9b82 100644 (file)
@@ -66,6 +66,10 @@ namespace DTXMania
                                }                                                                                                                                                               //\r
                                this.bメニューにフォーカス中 = true;                                                                                 // ここまでOPTIONと共通\r
                                this.eItemPanelモード = EItemPanelモード.パッド一覧;\r
+\r
+                               fDisplayLagTimeBaseMs.Drums = (float) CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums / ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 );\r
+                               fDisplayLagTimeBaseMs.Guitar = (float) CDTXMania.ConfigIni.nJudgeLinePosOffset.Guitar / ( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1 );\r
+                               fDisplayLagTimeBaseMs.Bass = (float) CDTXMania.ConfigIni.nJudgeLinePosOffset.Bass / ( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1 );\r
                        }\r
                        finally\r
                        {\r
@@ -90,6 +94,11 @@ namespace DTXMania
                                {\r
                                        this.ctキー反復用[ i ] = null;\r
                                }\r
+\r
+                               CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums =  (int) ( fDisplayLagTimeBaseMs.Drums  * ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 ) );\r
+                               CDTXMania.ConfigIni.nJudgeLinePosOffset.Guitar = (int) ( fDisplayLagTimeBaseMs.Guitar * ( CDTXMania.ConfigIni.n譜面スクロール速度.Guitar + 1 ) );\r
+                               CDTXMania.ConfigIni.nJudgeLinePosOffset.Bass =   (int) ( fDisplayLagTimeBaseMs.Bass   * ( CDTXMania.ConfigIni.n譜面スクロール速度.Bass + 1 ) );\r
+\r
                                base.On非活性化();\r
                        }\r
                        catch ( UnauthorizedAccessException e )\r
@@ -498,6 +507,7 @@ namespace DTXMania
                private CTexture tx背景;\r
                private CPrivateFastFont prvFont;\r
                private CTexture[ , ] txMenuItemLeft;\r
+               private STDGBVALUE<float> fDisplayLagTimeBaseMs;\r
 \r
                private void tカーソルを下へ移動する()\r
                {\r
index 0a4f5e3..6e34b68 100644 (file)
@@ -41,6 +41,9 @@ namespace DTXMania
                        if ( !base.b活性化してない )\r
                        {\r
                                y += (int)(0x153 * Scale.Y);\r
+                               CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白,\r
+                                       string.Format( "JudgeLine D/G/B Adj: {0} px", CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums, CDTXMania.ConfigIni.nJudgeLinePosOffset.Guitar, CDTXMania.ConfigIni.nJudgeLinePosOffset.Bass ) );\r
+                               y -= 0x10 * 2;\r
                                //CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, string.Format( "BGM/D/G/B Adj: {0:####0}/{1:####0}/{2:####0}/{3:####0} ms", CDTXMania.DTX.nBGMAdjust, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums, CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar, CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass ) );\r
                                CDTXMania.act文字コンソール.tPrint( x, y, C文字コンソール.Eフォント種別.白, string.Format( "BGM/D/G/B Adj: {0}/{1}/{2}/{3} ms", CDTXMania.DTX.nBGMAdjust, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums, CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar, CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass ) );\r
                                y -= 0x10 * 2;\r
index 4d13fbe..27fc407 100644 (file)
@@ -254,7 +254,7 @@ namespace DTXMania
                        }\r
                        this.r現在の空うちギターChip = null;\r
                        this.r現在の空うちベースChip = null;\r
-                       cInvisibleChip = new CInvisibleChip( CDTXMania.ConfigIni.nDisplayTimesMs, CDTXMania.ConfigIni.nFadeoutTimeMs );\r
+                       cInvisibleChip = new CInvisibleChip( CDTXMania.ConfigIni.nChipDisplayTimeMs, CDTXMania.ConfigIni.nChipFadeoutTimeMs );\r
                        this.演奏判定ライン座標 = new C演奏判定ライン座標共通();\r
             this.n最大コンボ数_TargetGhost = new STDGBVALUE<int>(); // #35411 2015.08.21 chnmr0 add\r
                        for ( int k = 0; k < 3; k++ )\r
@@ -1729,6 +1729,28 @@ namespace DTXMania
                                {\r
                                        ChangeInputAdjustTimeInPlaying( keyboard, +1 );\r
                                }\r
+                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.F5 ) )\r
+                               {\r
+                                       int n描画遅延ms = CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums;\r
+                                       n描画遅延ms = Math.Max( n描画遅延ms - 1, -99);\r
+                                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums =\r
+                                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Guitar =\r
+                                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Bass = n描画遅延ms;\r
+                                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums =\r
+                                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Guitar =\r
+                                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Bass = n描画遅延ms;\r
+                               }\r
+                               else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.F6 ) )\r
+                               {\r
+                                       int n描画遅延ms = CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums;\r
+                                       n描画遅延ms = Math.Min( n描画遅延ms + 1, 99 );\r
+                                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums =\r
+                                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Guitar =\r
+                                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Bass = n描画遅延ms;\r
+                                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums =\r
+                                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Guitar =\r
+                                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Bass = n描画遅延ms;\r
+                               }\r
                                else if ( ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) && ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) )\r
                                {       // escape (exit)\r
                                        this.actFO.tフェードアウト開始();\r
@@ -1914,9 +1936,20 @@ namespace DTXMania
 \r
                                int instIndex = (int) pChip.e楽器パート;\r
                                if ( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&\r
-                                   ( ( pChip.nバーからの距離dot[ instIndex ] < -40 * Scale.Y ) && ( this.e指定時刻からChipのJUDGEを返す( CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime ) == E判定.Miss ) ) )\r
+                                   ( ( pChip.nバーからの距離dot[ instIndex ] < -40 * Scale.Y ) &&\r
+                                       ( this.e指定時刻からChipのJUDGEを返す( CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime ) == E判定.Miss ) ) )\r
+                               {\r
+                                   this.tチップのヒット処理( CSound管理.rc演奏用タイマ.n現在時刻, pChip );        //チップ消失(Hitせずスルーした場合)\r
+                               }\r
+                               if ( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&\r
+                                       ( ( pChip.nバーからの距離dot[ instIndex ] + this.演奏判定ライン座標.nJudgeLinePosY_delta[instIndex] < 0 ) ) )\r
                                {\r
-                                   this.tチップのヒット処理( CSound管理.rc演奏用タイマ.n現在時刻, pChip );\r
+                                       //Debug.WriteLine( "透明度=" + pChip.n透明度 );\r
+                                       pChip.n透明度 -= 12;         // チップが判定バーを越えたら、徐々に透明にする。VSyncWaitの有無で加減が変わるが・・\r
+                                       if ( pChip.n透明度 < 0 )\r
+                                       {\r
+                                               pChip.n透明度 = 0;\r
+                                       }\r
                                }\r
 \r
                 // #35411 chnmr0 add (ターゲットゴースト)\r
@@ -3155,9 +3188,8 @@ namespace DTXMania
                {\r
                        if ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL )\r
                        {\r
-                               int y = CDTXMania.ConfigIni.bReverse.Drums ?\r
-                                       119 - 演奏判定ライン座標.nJudgeLinePosY_delta.Drums :\r
-                                       942 + 演奏判定ライン座標.nJudgeLinePosY_delta.Drums;\r
+                               int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.DRUMS, false, bReverse[ (int) E楽器パート.DRUMS ], false, true );       // -(int) ( 3 * Scale.Y );\r
+                               // #31602 2016.2.11 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
                                                                                                                                // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
                                if ( this.txヒットバー != null )\r
                                {\r
@@ -3364,11 +3396,21 @@ namespace DTXMania
                        #region [ スクロール速度変更 ]\r
                        if ( CDTXMania.Pad.b押されている( inst, Eパッド.Decide ) && CDTXMania.Pad.b押された( inst, Eパッド.B ) )\r
                        {\r
-                               CDTXMania.ConfigIni.n譜面スクロール速度[indexInst] = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度[indexInst] + 1, 0x7cf );\r
+                               float f = (float) this.演奏判定ライン座標.nJudgeLinePosY_delta[indexInst] / ( CDTXMania.ConfigIni.n譜面スクロール速度[indexInst] + 1 );\r
+                               CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ] = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ] + 1, 1999 );\r
+                               f *= CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ];\r
+                               this.演奏判定ライン座標.nJudgeLinePosY_delta[ indexInst ] = (int) ( f + 0.5 );\r
+                               CDTXMania.ConfigIni.nJudgeLinePosOffset[ indexInst ] = (int) ( f + 0.5 );\r
                        }\r
                        if ( CDTXMania.Pad.b押されている( inst, Eパッド.Decide ) && CDTXMania.Pad.b押された( inst, Eパッド.R ) )\r
                        {\r
                                CDTXMania.ConfigIni.n譜面スクロール速度[indexInst] = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度[indexInst] - 1, 0 );\r
+\r
+                               float f = (float) this.演奏判定ライン座標.nJudgeLinePosY_delta[ indexInst ] / ( CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ] + 1 );\r
+                               CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ] = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ] - 1, 0 );\r
+                               f *= CDTXMania.ConfigIni.n譜面スクロール速度[ indexInst ];\r
+                               this.演奏判定ライン座標.nJudgeLinePosY_delta[ indexInst ] = (int) ( f + 0.5 );\r
+                               CDTXMania.ConfigIni.nJudgeLinePosOffset[ indexInst ] = (int) ( f + 0.5 );\r
                        }\r
                        #endregion\r
 \r
index 7b86679..c32b553 100644 (file)
@@ -36,11 +36,11 @@ namespace DTXMania
                        n判定ラインY座標元データ = new STDGBVALUE<int>[ 2, 2, 2 ];\r
                        #region [ 判定ライン座標の初期化]\r
                        // Normal, Drums画面, 判定ライン\r
-                       n判定ラインY座標元データ[ 0, 0, 0 ].Drums  = 0;              //未使用\r
+                       n判定ラインY座標元データ[ 0, 0, 0 ].Drums  = 942;\r
                        n判定ラインY座標元データ[ 0, 0, 0 ].Guitar = (int)(95 * Scale.Y);\r
                        n判定ラインY座標元データ[ 0, 0, 0 ].Bass   = (int)(95 * Scale.Y);\r
                        // Reverse, Drums画面, 判定ライン\r
-                       n判定ラインY座標元データ[ 1, 0, 0 ].Drums  = 0;              //未使用\r
+                       n判定ラインY座標元データ[ 1, 0, 0 ].Drums  = 119;\r
                        n判定ラインY座標元データ[ 1, 0, 0 ].Guitar = (int)(374 * Scale.Y);\r
                        n判定ラインY座標元データ[ 1, 0, 0 ].Bass   = (int)(374 * Scale.Y);\r
                        // Normal, Drums画面, Wailing枠\r
@@ -121,7 +121,7 @@ namespace DTXMania
 \r
        \r
                /// <summary>\r
-               /// 判定ラインのY座標を返す。とりあえずGuitar/Bassのみ対応。\r
+               /// 判定ラインのY座標を返す。\r
                /// </summary>\r
                /// <param name="eInst">E楽器パート</param>\r
                /// <param name="bGRmode">GRmodeか否か</param>\r
@@ -138,7 +138,7 @@ namespace DTXMania
                }\r
 \r
                /// <summary>\r
-               /// 判定ラインのY座標を返す。とりあえずGuitar/Bassのみ対応。\r
+               /// 判定ラインのY座標を返す。\r
                /// </summary>\r
                /// <param name="eInst">E楽器パート</param>\r
                /// <param name="bGRmode">GRmodeか否か</param>\r
@@ -148,11 +148,7 @@ namespace DTXMania
                /// <returns></returns>\r
                public int n判定ラインY座標( E楽器パート eInst, bool bGRmode, bool bReverse, bool bWailingFrame, bool b補正あり )\r
                {\r
-                       if ( eInst == E楽器パート.DRUMS )\r
-                       {\r
-                               throw new NotImplementedException();\r
-                       }\r
-                       else if ( eInst == E楽器パート.UNKNOWN )\r
+                       if ( eInst == E楽器パート.UNKNOWN )\r
                        {\r
                                throw new ArgumentOutOfRangeException();\r
                        }\r
@@ -165,13 +161,38 @@ namespace DTXMania
                                int ret = this.n判定ラインY座標元データ[ nReverse, nGRmode, nWailing ][ nInst ];             // 補正無しの値\r
                                if ( bReverse )\r
                                {\r
-                                       if ( n判定位置[ nInst ] == E判定位置.Lower ) ret += (int)(13 * Scale.Y);\r
-                                       if ( b補正あり )            ret += nJudgeLinePosY_delta[ nInst ];\r
+                                       if ( eInst != E楽器パート.DRUMS && n判定位置[ nInst ] == E判定位置.Lower )\r
+                                               ret += (int) ( 13 * Scale.Y );\r
+                                       if ( b補正あり )\r
+                                       { \r
+                                               if (eInst == E楽器パート.DRUMS)\r
+                                               {\r
+                                                       ret += nJudgeLinePosY_delta[ nInst ];\r
+\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       ret -= nJudgeLinePosY_delta[ nInst ];\r
+                                               }\r
+                                       }\r
+\r
                                }\r
                                else\r
                                {\r
-                                       if ( n判定位置[ nInst ] == E判定位置.Lower ) ret += (int) ( 52 * Scale.Y );\r
-                                       if ( b補正あり )            ret -= nJudgeLinePosY_delta[ nInst ];\r
+                                       if ( eInst != E楽器パート.DRUMS &&  n判定位置[ nInst ] == E判定位置.Lower )\r
+                                               ret += (int) ( 52 * Scale.Y );\r
+                                       if ( b補正あり )\r
+                                       {\r
+                                               if ( eInst == E楽器パート.DRUMS )\r
+                                               {\r
+                                                       ret += nJudgeLinePosY_delta[ nInst ];\r
+\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       ret -= nJudgeLinePosY_delta[ nInst ];\r
+                                               }\r
+                                       }\r
                                }\r
                                return ret;\r
                        }\r
index fb9172a..24ab5a0 100644 (file)
@@ -245,8 +245,8 @@ namespace DTXMania
 \r
                protected override void t進行描画_Wailing枠()\r
                {\r
-                       int yG = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, bReverse[ (int) E楽器パート.GUITAR ], true );\r
-                       int yB = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS,   true, bReverse[ (int) E楽器パート.BASS   ], true );\r
+                       int yG = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, bReverse[ (int) E楽器パート.GUITAR ], true, true );\r
+                       int yB = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS,   true, bReverse[ (int) E楽器パート.BASS   ], true, true );\r
                        base.t進行描画_Wailing枠(\r
                                (int) ( 139 * Scale.X ),\r
                                (int) ( 593 * Scale.X ),\r
@@ -262,7 +262,7 @@ namespace DTXMania
                        {\r
                                if ( CDTXMania.DTX.bチップがある.Guitar )\r
                                {\r
-                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, bReverse[ (int) E楽器パート.GUITAR ] )\r
+                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, bReverse[ (int) E楽器パート.GUITAR ], false, true )\r
                                                        - (int) ( 3 * Scale.Y );\r
                                                                                                                        // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
                                        if ( this.txヒットバー != null )\r
@@ -284,7 +284,7 @@ namespace DTXMania
                                }\r
                                if ( CDTXMania.DTX.bチップがある.Bass )\r
                                {\r
-                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, true, bReverse[ (int) E楽器パート.BASS   ] )\r
+                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, true, bReverse[ (int) E楽器パート.BASS ], false, true )\r
                                                        - (int) ( 3 * Scale.Y );\r
                                                                                                                        // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
                                        if ( this.txヒットバー != null )\r
index 64da5dd..a9df672 100644 (file)
@@ -83,7 +83,8 @@ namespace DTXMania
                                                        this.st青い星[ j ].fX =\r
                                                                (int) ( this.nレーンの中央X座標[ (int) lane ] * ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ? 1.0 : 0.75 ) ) +\r
                                                                                        ( ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ? (float) ( 54 * 3 ) : (float) ( 619 + 12 + 40 ) );\r
-                                                       this.st青い星[ j ].fY = CDTXMania.ConfigIni.bReverse.Drums ? ( (float) 55 - nJudgeLinePosY_delta_Drums ) : ( (float) 425 + nJudgeLinePosY_delta_Drums );\r
+                                                       this.st青い星[ j ].fY = CDTXMania.ConfigIni.bReverse.Drums ?\r
+                                                               (float) (119 + 4) - nJudgeLinePosY_delta_Drums : (float) (942 + 14) + nJudgeLinePosY_delta_Drums;\r
                                                        this.st青い星[ j ].f加速度X = (float) ( num7 * Math.Cos( ( Math.PI * 2 * n回転初期値 ) / 360.0 ) );\r
                                                        this.st青い星[ j ].f加速度Y = (float) ( num7 * ( Math.Sin( ( Math.PI * 2 * n回転初期値 ) / 360.0 ) - 0.2 ) );\r
                                                        this.st青い星[ j ].f加速度の加速度X = 0.995f;\r
@@ -254,7 +255,9 @@ namespace DTXMania
                                                        +\r
                                                                ( (CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left)? (float)(54 * 3) : (float)(619 + 12 + 40) ) +\r
                                                                ( ( (float) Math.Cos( (double) num3 ) ) * num5 ) ) - SampleFramework.GameWindowSize.Width / 2,\r
-                                                       -( ( ( CDTXMania.ConfigIni.bReverse.Drums ? 55f * Scale.Y - nJudgeLinePosY_delta_Drums : 425f * Scale.Y + nJudgeLinePosY_delta_Drums ) + ( ( (float) Math.Sin( (double) num3 ) ) * num5 ) ) - SampleFramework.GameWindowSize.Height / 2 ),\r
+                                                       -( ( ( CDTXMania.ConfigIni.bReverse.Drums ?\r
+                                                               ( 119 + 4 ) - nJudgeLinePosY_delta_Drums : ( 942 + 14 ) + nJudgeLinePosY_delta_Drums )\r
+                                                       + ( ( (float) Math.Sin( (double) num3 ) ) * num5 ) ) - SampleFramework.GameWindowSize.Height / 2 ),\r
                                                        0f\r
                                                );\r
                                                if( this.tx火花 != null )\r
@@ -341,7 +344,9 @@ namespace DTXMania
                                                                (int)(this.nレーンの中央X座標[ this.st大波[ i ].nLane ] * ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left? 1.0 : 0.75)) +\r
                                                                        ( ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ? (float) ( 54 * 3 ) : (float) ( 619 + 12 + 40 ) )\r
                                                                        - SampleFramework.GameWindowSize.Width / 2,\r
-                                                               -( ( CDTXMania.ConfigIni.bReverse.Drums ? 55f * Scale.Y - nJudgeLinePosY_delta_Drums : 425f * Scale.Y + nJudgeLinePosY_delta_Drums ) - SampleFramework.GameWindowSize.Height / 2 ),\r
+                                                               -( ( CDTXMania.ConfigIni.bReverse.Drums ?\r
+                                                               (119 + 4) - nJudgeLinePosY_delta_Drums : (942 + 14) + nJudgeLinePosY_delta_Drums )\r
+                                                               - SampleFramework.GameWindowSize.Height / 2 ),\r
                                                                0f );\r
                                                        if( this.tx大波 != null )\r
                                                        {\r
@@ -378,7 +383,9 @@ namespace DTXMania
                                                                (int)( this.nレーンの中央X座標[ this.st細波[ i ].nLane ] * (CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left? 1.0 : 0.75 ) ) +\r
                                                                ( ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ? (float) ( 54 * 3 ) : (float) ( 619 + 12 + 40 ) )\r
                                                                        -SampleFramework.GameWindowSize.Width / 2,\r
-                                                               -( ( CDTXMania.ConfigIni.bReverse.Drums ? 55f * Scale.Y - nJudgeLinePosY_delta_Drums : 425f * Scale.Y + nJudgeLinePosY_delta_Drums ) - SampleFramework.GameWindowSize.Height / 2 ),\r
+                                                               -( ( CDTXMania.ConfigIni.bReverse.Drums ?\r
+                                                               (119 + 4) - nJudgeLinePosY_delta_Drums : (942 + 14) + nJudgeLinePosY_delta_Drums )\r
+                                                               - SampleFramework.GameWindowSize.Height / 2 ),\r
                                                                0f\r
                                                        );\r
                                                        if (this.tx細波 != null)\r
index 4f25b90..dc63fc7 100644 (file)
@@ -197,12 +197,10 @@ namespace DTXMania
                                this.t進行描画_ステータスパネル();\r
                                this.t進行描画_ギターベースフレーム();\r
                                this.t進行描画_レーンフラッシュGB();\r
-                this.t進行描画_ギターベース判定ライン();\r
                 this.t進行描画_ゲージ();\r
                 this.t進行描画_グラフ();   // #24074 2011.01.23 add ikanick\r
                                this.t進行描画_レーンフラッシュD();\r
                                this.t進行描画_DANGER();\r
-                               this.t進行描画_判定ライン();\r
                                if ( this.e判定表示優先度 == E判定表示優先度.Chipより下 )\r
                                {\r
                                        this.t進行描画_RGBボタン();\r
@@ -211,10 +209,12 @@ namespace DTXMania
                                }\r
                                this.t進行描画_WailingBonus();\r
                                this.t進行描画_譜面スクロール速度();\r
+                               this.t進行描画_ドラムパッド();\r
+                               this.t進行描画_ギターベース判定ライン();\r
+                               this.t進行描画_判定ライン();\r
                                this.t進行描画_チップアニメ();\r
                                bIsFinishedPlaying = this.t進行描画_チップ(E楽器パート.DRUMS);\r
                                this.t進行描画_演奏情報();\r
-                               this.t進行描画_ドラムパッド();\r
                                if ( this.e判定表示優先度 == E判定表示優先度.Chipより上 )\r
                                {\r
                                        this.t進行描画_RGBボタン();\r
@@ -435,11 +435,21 @@ namespace DTXMania
 \r
                protected override void ドラムスクロール速度アップ()\r
                {\r
+                       float f = (float) this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums / (CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1);\r
+Debug.WriteLine( "scr=" + CDTXMania.ConfigIni.n譜面スクロール速度.Drums + ", f1=" + f );\r
                        CDTXMania.ConfigIni.n譜面スクロール速度.Drums = Math.Min( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1, 1999 );\r
+                       f *= ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 );\r
+Debug.WriteLine( "scr=" + CDTXMania.ConfigIni.n譜面スクロール速度.Drums + ", f2=" + f );\r
+                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums = (int) ( f + 0.5 );\r
+                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums = (int) ( f + 0.5 );\r
                }\r
                protected override void ドラムスクロール速度ダウン()\r
                {\r
+                       float f = (float) this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums / (CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1);\r
                        CDTXMania.ConfigIni.n譜面スクロール速度.Drums = Math.Max( CDTXMania.ConfigIni.n譜面スクロール速度.Drums - 1, 0 );\r
+                       f *= ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 );\r
+                       this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums = (int) ( f + 0.5 );\r
+                       CDTXMania.ConfigIni.nJudgeLinePosOffset.Drums = (int) ( f + 0.5 );\r
                }\r
 \r
        \r
@@ -473,8 +483,8 @@ namespace DTXMania
 \r
                protected override void t進行描画_Wailing枠()\r
                {\r
-                       int yG = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, bReverse[ (int) E楽器パート.GUITAR ], true );\r
-                       int yB = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS,   false, bReverse[ (int) E楽器パート.BASS   ], true );\r
+                       int yG = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, bReverse[ (int) E楽器パート.GUITAR ], true, true );\r
+                       int yB = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS,   false, bReverse[ (int) E楽器パート.BASS   ], true, true );\r
                        base.t進行描画_Wailing枠(\r
                                ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ?  1761 : 1690,\r
                                ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ?  1434 : 440,\r
@@ -538,7 +548,7 @@ namespace DTXMania
                                if ( CDTXMania.DTX.bチップがある.Guitar )\r
                                {\r
                                        int x = ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ? 1527 : 1456;\r
-                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, bReverse[ (int) E楽器パート.GUITAR ] ) - (int) ( 3 * Scale.Y );\r
+                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, bReverse[ (int) E楽器パート.GUITAR ], false, true ) - (int) ( 3 * Scale.Y );\r
                                                                                                                                // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
                                        Rectangle rc = new Rectangle( 0, 0, 30, 36 );\r
                                        if ( this.txヒットバーGB != null )\r
@@ -560,7 +570,7 @@ namespace DTXMania
                                if ( CDTXMania.DTX.bチップがある.Bass )\r
                                {\r
                                        int x = ( CDTXMania.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ) ? 1200 : 206;\r
-                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, bReverse[ (int) E楽器パート.BASS ] ) - (int) ( 3 * Scale.Y );\r
+                                       int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, bReverse[ (int) E楽器パート.BASS ], false, true ) - (int) ( 3 * Scale.Y );\r
                                                                                                                                // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
                                        Rectangle rc = new Rectangle( 0, 0, 30, 36 );\r
                                        if ( this.txヒットバーGB != null )\r
index 4c8153c..2a3616c 100644 (file)
@@ -496,6 +496,7 @@ namespace DTXMania
 //             public int n切り捨て下限Velocity;                 // #23857 2010.12.12 yyagi VelocityMin\r
                public STDGBVALUE<int> nInputAdjustTimeMs;      // #23580 2011.1.3 yyagi タイミングアジャスト機能\r
                public STDGBVALUE<int> nJudgeLinePosOffset;     // #31602 2013.6.23 yyagi 判定ライン表示位置のオフセット\r
+               public STDGBVALUE<float> fJudgeLinePosOffsetBase;\r
                public int      nShowLagType;                                   // #25370 2011.6.5 yyagi ズレ時間表示機能\r
                public bool bIsAutoResultCapture;                       // #25399 2011.6.9 yyagi リザルト画像自動保存機能のON/OFF制御\r
                public int nPoliphonicSounds;                           // #28228 2012.5.1 yyagi レーン毎の最大同時発音数\r
@@ -683,7 +684,7 @@ namespace DTXMania
                public bool bDynamicBassMixerManagement;        // #24820\r
                public bool bTimeStretch;                                       // #23664 2013.2.24 yyagi ピッチ変更無しで再生速度を変更するかどうか\r
                public STDGBVALUE<EInvisible> eInvisible;       // #32072 2013.9.20 yyagi チップを非表示にする\r
-               public int nDisplayTimesMs, nFadeoutTimeMs;\r
+               public int nChipDisplayTimeMs, nChipFadeoutTimeMs;      // Invisible対応\r
 \r
                public STDGBVALUE<int> nViewerScrollSpeed;\r
                public bool bViewerVSyncWait;\r
@@ -1147,11 +1148,13 @@ namespace DTXMania
                                this.n譜面スクロール速度[ i ] = 1;\r
                                this.nInputAdjustTimeMs[ i ] = 0;\r
                                this.nJudgeLinePosOffset[ i ] = 0;\r
+                               this.fJudgeLinePosOffsetBase[ i ] = 0.0f;\r
                                this.eInvisible[ i ] = EInvisible.OFF;\r
                                this.nViewerScrollSpeed[ i ] = 1;\r
                                this.e判定位置[ i ] = E判定位置.標準;\r
                                //this.e判定表示優先度[ i ] = E判定表示優先度.Chipより下;\r
                        }\r
+\r
                        this.n演奏速度 = 20;\r
                        #region [ AutoPlay ]\r
                        this.bAutoPlay = new STAUTOPLAY();\r
@@ -1221,8 +1224,8 @@ namespace DTXMania
                        this.bUseOSTimer = false;;                                      // #33689 2014.6.6 yyagi 初期値はfalse (FDKのタイマー。FROM氏考案の独自タイマー)\r
                        this.bDynamicBassMixerManagement = true;        //\r
                        this.bTimeStretch = false;                                      // #23664 2013.2.24 yyagi 初期値はfalse (再生速度変更を、ピッチ変更にて行う)\r
-                       this.nDisplayTimesMs = 3000;                            // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップ再表示期間\r
-                       this.nFadeoutTimeMs = 2000;                                     // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップフェードアウト時間\r
+                       this.nChipDisplayTimeMs = 3000;                         // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップ再表示期間\r
+                       this.nChipFadeoutTimeMs = 2000;                                 // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップフェードアウト時間\r
 \r
                        this.bViewerVSyncWait = true;\r
                        this.bViewerShowDebugStatus = true;\r
@@ -1633,18 +1636,18 @@ namespace DTXMania
                        sw.WriteLine("InputAdjustTimeBass={0}", this.nInputAdjustTimeMs.Bass);                  //\r
                        sw.WriteLine();\r
 \r
-                       sw.WriteLine( "; 判定ラインの表示位置調整(ドラム, ギター, ベース)(-99~99)[px]" );        // #31602 2013.6.23 yyagi 判定ラインの表示位置オフセット\r
+                       sw.WriteLine( "; 判定ラインの表示位置調整(x0.5相当;ドラム, ギター, ベース)[px]" );       // #31602 2013.6.23 yyagi 判定ラインの表示位置オフセット\r
                        sw.WriteLine( "; Offset value to adjust displaying judgement line for the drums, guitar and bass." );   //\r
-                       sw.WriteLine( "JudgeLinePosOffsetDrums={0}",  this.nJudgeLinePosOffset.Drums );         //\r
-                       sw.WriteLine( "JudgeLinePosOffsetGuitar={0}", this.nJudgeLinePosOffset.Guitar );        //\r
-                       sw.WriteLine( "JudgeLinePosOffsetBass={0}",   this.nJudgeLinePosOffset.Bass );          //\r
+                       sw.WriteLine( "JudgeLinePosOffsetDrums={0}",  (float) (this.nJudgeLinePosOffset.Drums  / ( this.n譜面スクロール速度.Drums  + 1 ) ) );  //\r
+                       sw.WriteLine( "JudgeLinePosOffsetGuitar={0}", (float) (this.nJudgeLinePosOffset.Guitar / ( this.n譜面スクロール速度.Guitar + 1 ) ) );  //\r
+                       sw.WriteLine( "JudgeLinePosOffsetBass={0}",   (float) (this.nJudgeLinePosOffset.Bass   / ( this.n譜面スクロール速度.Bass   + 1 ) ) );  //\r
 \r
                        sw.WriteLine( "; 判定ラインの表示位置(ギター, ベース)" );       // #33891 2014.6.26 yyagi\r
                        sw.WriteLine( "; 0=Normal, 1=Lower" );\r
                        sw.WriteLine( "; Position of the Judgement line and RGB button; Vseries compatible(1) or not(0)." );    //\r
                        sw.WriteLine( "JudgeLinePosModeGuitar={0}", (int) this.e判定位置.Guitar );  //\r
                        sw.WriteLine( "JudgeLinePosModeBass={0}  ", (int) this.e判定位置.Bass );    //\r
-                       \r
+\r
                        sw.WriteLine();\r
                        #endregion\r
                        #region [ VelocityMin ]\r
@@ -2552,15 +2555,15 @@ namespace DTXMania
                                                                                        }\r
                                                                                        else if ( str3.Equals( "JudgeLinePosOffsetDrums" ) )            // #31602 2013.6.23 yyagi\r
                                                                                        {\r
-                                                                                               this.nJudgeLinePosOffset.Drums = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, -99, 99, this.nJudgeLinePosOffset.Drums );\r
+                                                                                               this.fJudgeLinePosOffsetBase.Drums = C変換.n値を文字列から取得して範囲内にちゃんと丸めて返す( str4, -99, 99, this.nJudgeLinePosOffset.Drums );\r
                                                                                        }\r
                                                                                        else if ( str3.Equals( "JudgeLinePosOffsetGuitar" ) )           // #31602 2013.6.23 yyagi\r
                                                                                        {\r
-                                                                                               this.nJudgeLinePosOffset.Guitar = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, -99, 99, this.nJudgeLinePosOffset.Guitar );\r
+                                                                                               this.fJudgeLinePosOffsetBase.Guitar = C変換.n値を文字列から取得して範囲内にちゃんと丸めて返す( str4, -99, 99, this.nJudgeLinePosOffset.Guitar );\r
                                                                                        }\r
                                                                                        else if ( str3.Equals( "JudgeLinePosOffsetBass" ) )                     // #31602 2013.6.23 yyagi\r
                                                                                        {\r
-                                                                                               this.nJudgeLinePosOffset.Bass = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, -99, 99, this.nJudgeLinePosOffset.Bass );\r
+                                                                                               this.fJudgeLinePosOffsetBase.Bass = C変換.n値を文字列から取得して範囲内にちゃんと丸めて返す( str4, -99, 99, this.nJudgeLinePosOffset.Bass );\r
                                                                                        }\r
                                                                                        else if ( str3.Equals( "JudgeLinePosModeGuitar" ) )     // #33891 2014.6.26 yyagi\r
                                                                                        {\r
@@ -3174,6 +3177,11 @@ namespace DTXMania
                                        }\r
                                }\r
                        }\r
+\r
+                       for (int i = 0; i < 3; i++ )\r
+                       {\r
+                               nJudgeLinePosOffset[ i ] = (int) ( fJudgeLinePosOffsetBase[ i ] * ( this.n譜面スクロール速度[ i ] + 1 ) );\r
+                       }\r
                }\r
 \r
                /// <summary>\r
index 8ea966d..891d0d1 100644 (file)
@@ -20,7 +20,7 @@ namespace DTXMania
        {\r
                // プロパティ\r
                #region [ properties ]\r
-               public static readonly string VERSION = "104(151212)";\r
+               public static readonly string VERSION = "105(160214)";\r
                public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
                public static readonly string D3DXDLL = "d3dx9_43.dll";         // June 2010\r
         //public static readonly string D3DXDLL = "d3dx9_42.dll";      // February 2010\r
index 609d7bf..cae949b 100644 (file)
@@ -71,6 +71,22 @@ namespace FDK
             return n取得失敗時のデフォルト値;\r
         }\r
         // --------------------ここまで-------------------------/\r
+               public static float n値を文字列から取得して範囲内にちゃんと丸めて返す( string str数値文字列, float n最小値, float n最大値, float n取得失敗時のデフォルト値 )\r
+               {\r
+                       // 1 と違って範囲外の場合ちゃんと丸めて返します。\r
+                       float num;\r
+                       if ( float.TryParse( str数値文字列, out num ) )\r
+                       {\r
+                               if ( ( num >= n最小値 ) && ( num <= n最大値 ) )\r
+                                       return num;\r
+                               if ( num < n最小値 )\r
+                                       return n最小値;\r
+                               if ( num > n最大値 )\r
+                                       return n最大値;\r
+                       }\r
+\r
+                       return n取得失敗時のデフォルト値;\r
+               }\r
                public static int n値を文字列から取得して返す( string str数値文字列, int n取得失敗時のデフォルト値 )\r
                {\r
                        int num;\r