OSDN Git Service

#35411 ブランチ150818からゴースト機能のマージ(851-856)
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / ドラム画面 / CStage演奏ドラム画面.cs
index de13756..e90097c 100644 (file)
@@ -95,6 +95,16 @@ namespace DTXMania
                        else\r
                        {\r
                                this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ];     // #24074 2011.01.23 add ikanick\r
+\r
+                // #35411 2015.08.21 chnmr0 add\r
+                // ゴースト利用可のなとき、0で初期化\r
+                if (CDTXMania.ConfigIni.eTargetGhost.Drums != ETargetGhostData.NONE)\r
+                {\r
+                    if (CDTXMania.listTargetGhsotLag[(int)E楽器パート.DRUMS] != null)\r
+                    {\r
+                        this.actGraph.dbグラフ値目標_渡 = 0;\r
+                    }\r
+                }\r
                        }\r
                        // MODIFY_END #25398\r
                        dtLastQueueOperation = DateTime.MinValue;\r
@@ -302,6 +312,17 @@ namespace DTXMania
                        E判定 eJudgeResult = tチップのヒット処理( nHitTime, pChip, E楽器パート.DRUMS, bCorrectLane );\r
                        // #24074 2011.01.23 add ikanick\r
                        this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, E楽器パート.DRUMS,  bIsAutoPlay );\r
+                       // #35411 2015.09.07 add chnmr0\r
+                       if( CDTXMania.listTargetGhsotLag.Drums != null &&\r
+                CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.ONLINE &&\r
+                               CDTXMania.DTX.n可視チップ数.Drums > 0 )\r
+                       {\r
+                               // Online Stats の計算式\r
+                               this.actGraph.dbグラフ値現在_渡 = 100 *\r
+                                                               (this.nヒット数_Auto含まない.Drums.Perfect * 17 +\r
+                                                                this.nヒット数_Auto含まない.Drums.Great * 7 +\r
+                                                                this.actCombo.n現在のコンボ数.Drums最高値 * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Drums);\r
+                       }\r
                        return eJudgeResult;\r
                }\r
 \r
@@ -2020,7 +2041,29 @@ namespace DTXMania
                                }\r
 \r
                                int indexSevenLanes = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];\r
-                               if ( ( configIni.bAutoPlay[ indexSevenLanes ] && !pChip.bHit ) && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+                               // #35411 chnmr0 modified\r
+                               bool autoPlayCondition = ( configIni.bAutoPlay[ indexSevenLanes ] && !pChip.bHit );\r
+                bool UsePerfectGhost = true;\r
+                long ghostLag = 0;\r
+\r
+                if( CDTXMania.ConfigIni.eAutoGhost.Drums != EAutoGhostData.PERFECT &&\r
+                    CDTXMania.listAutoGhostLag.Drums != null &&\r
+                    CDTXMania.ConfigIni.bドラムが全部オートプレイである &&\r
+                    0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.listAutoGhostLag.Drums.Count)\r
+\r
+                {\r
+                    // ゴーストデータが有効 : ラグに合わせて判定\r
+                    ghostLag = CDTXMania.listAutoGhostLag.Drums[pChip.n楽器パートでの出現順] - this.nInputAdjustTimeMs.Drums;\r
+                    autoPlayCondition &= !pChip.bHit && (ghostLag + pChip.n発声時刻ms <= CSound管理.rc演奏用タイマ.n現在時刻ms);\r
+                    UsePerfectGhost = false;\r
+                }\r
+                if( UsePerfectGhost )\r
+                {\r
+                    // 従来の AUTO : バー下で判定\r
+                    autoPlayCondition &= ( pChip.nバーからの距離dot.Drums < 0 );\r
+                }\r
+\r
+                               if ( autoPlayCondition )\r
                                {\r
                                        pChip.bHit = true;\r
                                        this.actLaneFlushD.Start( (Eレーン) indexSevenLanes, ( (float) CInput管理.n通常音量 ) / 127f );\r
@@ -2030,10 +2073,44 @@ namespace DTXMania
                                        // #31602 2013.6.24 yyagi 判定ラインの表示位置をずらしたら、チップのヒットエフェクトの表示もずらすために、nJudgeLine..を追加\r
                                        this.actChipFireD.Start( (Eレーン)indexSevenLanes, flag, flag2, flag2, 演奏判定ライン座標.nJudgeLinePosY_delta.Drums );\r
                                        this.actPad.Hit( this.nチャンネル0Atoパッド08[ pChip.nチャンネル番号 - 0x11 ] );\r
-                                       this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
-                                       this.tチップのヒット処理( pChip.n発声時刻ms, pChip );\r
+                                       this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
+                                       this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);\r
                                        cInvisibleChip.StartSemiInvisible( E楽器パート.DRUMS );\r
                                }\r
+                // #35411 modify end\r
+                \r
+                // #35411 2015.08.21 chnmr0 add\r
+                // 目標値グラフにゴーストの達成率を渡す\r
+                if (CDTXMania.ConfigIni.eTargetGhost.Drums != ETargetGhostData.NONE &&\r
+                    CDTXMania.listTargetGhsotLag.Drums != null)\r
+                {\r
+                    double val = 0;\r
+                    if (CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.ONLINE)\r
+                    {\r
+                        if (CDTXMania.DTX.n可視チップ数.Drums > 0)\r
+                        {\r
+                               // Online Stats の計算式\r
+                            val = 100 *\r
+                                (this.nヒット数_TargetGhost.Drums.Perfect * 17 +\r
+                                 this.nヒット数_TargetGhost.Drums.Great * 7 +\r
+                                 this.n最大コンボ数_TargetGhost.Drums * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Drums);\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        val = CScoreIni.t演奏型スキルを計算して返す(\r
+                            CDTXMania.DTX.n可視チップ数.Drums,\r
+                            this.nヒット数_TargetGhost.Drums.Perfect,\r
+                            this.nヒット数_TargetGhost.Drums.Great,\r
+                            this.nヒット数_TargetGhost.Drums.Good,\r
+                            this.nヒット数_TargetGhost.Drums.Poor,\r
+                            this.nヒット数_TargetGhost.Drums.Miss,\r
+                            E楽器パート.DRUMS, new STAUTOPLAY());\r
+                    }\r
+                    if (val < 0) val = 0;\r
+                    if (val > 100) val = 100;\r
+                    this.actGraph.dbグラフ値目標_渡 = val;\r
+                }\r
                                //break;\r
                                return;\r
                        }       // end of "if configIni.bDrums有効"\r