• R/O
  • SSH
  • HTTPS

dtxmaniaxg-verk: Commit


Commit MetaInfo

Revision542 (tree)
Time2016-06-01 20:49:00
Authorkairera0467

Log Message

#35742 ドラム譜面はランダム処理をしてからレーン数変更を行うようにした。
#35905 (XG風版のみ)演奏画面、リザルト画面でもスクリプトを使えるようにした。
#35943 Rebuild版(4.00RC)から、スキルメーターのコードを移植を行った。ただし、ギターでの動作の確認が足りない。
#35943 GITADORA風表示にスキルメーターを実装。一部機能は未実装、またギター画面での仕様が定まっていない。
#35943 ゴーストファイルから達成率等を計算する機能を実装。(使用できるのは演奏画面のみです。)
#36335 GITADORA風表示にゴースト機能を移植。
#xxxxx PrivateFontのコードを本家rev929を一部移植。
#xxxxx ターゲットフレームワークを.NET 3.5に変更。
#xxxxx StageEffectの画像仕様を、以前の仕様に戻した。
#xxxxx SongsDB生成時にdtxファイルを2回(ヘッダ無し1回、全体1回)読み込んでいたので、1回(全体1回)で読み込むよう修正。
#xxxxx Config画面の「InputAdjust」の項目を、アクセスしやすい位置に移動。

Change Summary

Incremental Difference

--- trunk/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs (revision 542)
@@ -840,8 +840,8 @@
840840 {
841841 try
842842 {
843- CDTX cdtx = new CDTX( c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス, true ); //2013.06.04 kairera0467 ここの「ヘッダのみ読み込む」をfalseにすると、選曲画面のBPM表示が狂う場合があるので注意。
844- CDTX cdtx2 = new CDTX( c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス, false );
843+ CDTX cdtx = new CDTX( c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス, false ); //2013.06.04 kairera0467 ここの「ヘッダのみ読み込む」をfalseにすると、選曲画面のBPM表示が狂う場合があるので注意。
844+ //CDTX cdtx2 = new CDTX( c曲リストノード.arスコア[ i ].ファイル情報.ファイルの絶対パス, false );
845845 c曲リストノード.arスコア[ i ].譜面情報.タイトル = cdtx.TITLE;
846846 c曲リストノード.arスコア[ i ].譜面情報.アーティスト名 = cdtx.ARTIST;
847847 c曲リストノード.arスコア[ i ].譜面情報.コメント = cdtx.COMMENT;
@@ -857,12 +857,12 @@
857857 c曲リストノード.arスコア[ i ].譜面情報.レベルDec.Guitar = cdtx.LEVELDEC.Guitar;
858858 c曲リストノード.arスコア[ i ].譜面情報.レベルDec.Bass = cdtx.LEVELDEC.Bass;
859859 c曲リストノード.arスコア[ i ].譜面情報.レベルを非表示にする = cdtx.HIDDENLEVEL;
860- c曲リストノード.arスコア[ i ].譜面情報.b完全にCLASSIC譜面である.Drums = (cdtx2.bチップがある.LeftCymbal == false && cdtx2.bチップがある.LP == false && cdtx2.bチップがある.LBD == false && cdtx2.bチップがある.FT == false && cdtx2.bチップがある.Ride == false) ? true : false;
861- c曲リストノード.arスコア[ i ].譜面情報.b完全にCLASSIC譜面である.Guitar = !cdtx2.bチップがある.YPGuitar ? true : false;
862- c曲リストノード.arスコア[ i ].譜面情報.b完全にCLASSIC譜面である.Bass = !cdtx2.bチップがある.YPBass ? true : false;
863- c曲リストノード.arスコア[ i ].譜面情報.b譜面がある.Drums = cdtx2.bチップがある.Drums;
864- c曲リストノード.arスコア[ i ].譜面情報.b譜面がある.Guitar = cdtx2.bチップがある.Guitar;
865- c曲リストノード.arスコア[ i ].譜面情報.b譜面がある.Bass = cdtx2.bチップがある.Bass;
860+ c曲リストノード.arスコア[ i ].譜面情報.b完全にCLASSIC譜面である.Drums = (cdtx.bチップがある.LeftCymbal == false && cdtx.bチップがある.LP == false && cdtx.bチップがある.LBD == false && cdtx.bチップがある.FT == false && cdtx.bチップがある.Ride == false) ? true : false;
861+ c曲リストノード.arスコア[ i ].譜面情報.b完全にCLASSIC譜面である.Guitar = !cdtx.bチップがある.YPGuitar ? true : false;
862+ c曲リストノード.arスコア[ i ].譜面情報.b完全にCLASSIC譜面である.Bass = !cdtx.bチップがある.YPBass ? true : false;
863+ c曲リストノード.arスコア[ i ].譜面情報.b譜面がある.Drums = cdtx.bチップがある.Drums;
864+ c曲リストノード.arスコア[ i ].譜面情報.b譜面がある.Guitar = cdtx.bチップがある.Guitar;
865+ c曲リストノード.arスコア[ i ].譜面情報.b譜面がある.Bass = cdtx.bチップがある.Bass;
866866 c曲リストノード.arスコア[ i ].譜面情報.曲種別 = cdtx.e種別;
867867 c曲リストノード.arスコア[ i ].譜面情報.Bpm = cdtx.BPM;
868868 c曲リストノード.arスコア[ i ].譜面情報.Duration = 0; // (cdtx.listChip == null)? 0 : cdtx.listChip[ cdtx.listChip.Count - 1 ].n発声時刻ms;
--- trunk/DTXManiaプロジェクト/コード/全体/CConfigIni.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/全体/CConfigIni.cs (revision 542)
@@ -481,7 +481,7 @@
481481 public bool bSTAGEFAILED有効;
482482 public STDGBVALUE<bool> bSudden;
483483 public bool bTight;
484- public bool bGraph有効; // #24074 2011.01.23 add ikanick
484+ public STDGBVALUE<bool> bGraph有効; // #24074 2011.01.23 add ikanick
485485 public bool bWave再生位置自動調整機能有効;
486486 public bool bシンバルフリー;
487487 public bool bストイックモード;
@@ -1808,7 +1808,9 @@
18081808
18091809 // #24074 2011.01.23 add ikanick
18101810 sw.WriteLine( "; グラフ表示(0:OFF, 1:ON)" );
1811- sw.WriteLine( "SkillMater={0}", this.bGraph有効 ? 1 : 0 );
1811+ sw.WriteLine( "DrumGraph={0}", this.bGraph有効.Drums ? 1 : 0 );
1812+ sw.WriteLine( "GuitarGraph={0}", this.bGraph有効.Guitar ? 1 : 0 );
1813+ sw.WriteLine( "BassGraph={0}", this.bGraph有効.Bass ? 1 : 0 );
18121814 sw.WriteLine();
18131815
18141816 sw.WriteLine("; ドラムコンボの表示(0:OFF, 1:ON)"); // #29500 2012.9.11 kairera0467
@@ -2859,10 +2861,18 @@
28592861 //-----------------------------
28602862 case Eセクション種別.PlayOption:
28612863 {
2862- if( str3.Equals( "SkillMater" ) ) // #24074 2011.01.23 addikanick
2864+ if( str3.Equals( "DrumSkillMater" ) ) // #24074 2011.01.23 addikanick
28632865 {
2864- this.bGraph有効 = C変換.bONorOFF( str4[ 0 ] );
2866+ this.bGraph有効.Drums = C変換.bONorOFF( str4[ 0 ] );
28652867 }
2868+ else if( str3.Equals( "GuitarSkillMater" ) ) // #24074 2011.01.23 addikanick
2869+ {
2870+ this.bGraph有効.Guitar = C変換.bONorOFF( str4[ 0 ] );
2871+ }
2872+ else if( str3.Equals( "BassSkillMater" ) ) // #24074 2011.01.23 addikanick
2873+ {
2874+ this.bGraph有効.Bass = C変換.bONorOFF( str4[ 0 ] );
2875+ }
28662876 else if( str3.Equals( "DrumsReverse" ) )
28672877 {
28682878 this.bReverse.Drums = C変換.bONorOFF( str4[ 0 ] );
--- trunk/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 542)
@@ -23,7 +23,7 @@
2323 {
2424 // プロパティ
2525
26- public static readonly string VERSION = "Ver3.51(160110)";
26+ public static readonly string VERSION = "Ver3.60(16----)";
2727 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";
2828 public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010
2929 //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010
--- trunk/DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs (revision 542)
@@ -450,15 +450,6 @@
450450 this.list項目リスト.Add(this.iSystemNamePlateType);
451451 #endregion
452452
453- // #24074 2011.01.23 add ikanick
454- this.iSystemGraph = new CItemToggle( "SkillMater", CDTXMania.ConfigIni.bGraph有効,
455- "最高スキルと比較できるグラフを表示します。\n" +
456- "(※現状ドラムパートのみ)\n" +
457- "オートプレイだと表示されません。",
458- "To draw Graph or not.\n"+
459- "(drums only)");
460- this.list項目リスト.Add( this.iSystemGraph );
461-
462453 this.iSystemSkinSubfolder = new CItemList( "Skin (General)", CItemBase.Eパネル種別.通常, nSkinIndex,
463454 "スキン切替:スキンを切り替えます。\n" +
464455 "\n",
@@ -885,16 +876,6 @@
885876 "You can specify from 1 to 99999." );
886877 this.list項目リスト.Add( this.iSystemMinComboDrums );
887878
888- // #23580 2011.1.3 yyagi
889- this.iDrumsInputAdjustTimeMs = new CItemInteger( "InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums,
890- "ドラムの入力タイミングの微調整を行います。\n" +
891- "-99 ~ 99ms まで指定可能です。\n" +
892- "値を指定してください。\n",
893- "To adjust the drums input timing.\n" +
894- "You can set from -99 to 0ms.\n" +
895- "To decrease input lag, set minus value." );
896- this.list項目リスト.Add( this.iDrumsInputAdjustTimeMs );
897-
898879 this.iDrumsHHOGraphics = new CItemList("HHOGraphics", CItemBase.Eパネル種別.通常, (int)CDTXMania.ConfigIni.eHHOGraphics.Drums,
899880 "オープンハイハットの表示画像を変更します。\n" +
900881 "A: DTXMania元仕様\n" +
@@ -1021,6 +1002,22 @@
10211002 new string[] { "OFF", "Mirror", "Part", "Super", "Hyper", "Master", "Another" });
10221003 this.list項目リスト.Add(this.iDrumsRandomPedal);
10231004
1005+ this.iDrumsGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph有効.Drums,
1006+ "最高スキルと比較できるグラフを表示します。\n" +
1007+ "オートプレイだと表示されません。",
1008+ "To draw Graph or not." );
1009+ this.list項目リスト.Add( this.iDrumsGraph );
1010+
1011+ // #23580 2011.1.3 yyagi
1012+ this.iDrumsInputAdjustTimeMs = new CItemInteger( "InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums,
1013+ "ドラムの入力タイミングの微調整を行います。\n" +
1014+ "-99 ~ 99ms まで指定可能です。\n" +
1015+ "値を指定してください。\n",
1016+ "To adjust the drums input timing.\n" +
1017+ "You can set from -99 to 0ms.\n" +
1018+ "To decrease input lag, set minus value." );
1019+ this.list項目リスト.Add( this.iDrumsInputAdjustTimeMs );
1020+
10241021 this.iDrumsGoToKeyAssign = new CItemBase( "Drums Keys", CItemBase.Eパネル種別.通常,
10251022 "ドラムのキー入力に関する項目を設定します。",
10261023 "Settings for the drums key/pad inputs." );
@@ -1217,6 +1214,14 @@
12171214 "Initial number to show the combo\n for the guitar.\nYou can specify from 1 to 99999." );
12181215 this.list項目リスト.Add( this.iSystemMinComboGuitar );
12191216
1217+ this.iGuitarGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph有効.Guitar,
1218+ "最高スキルと比較できるグラフを表示します。\n" +
1219+ "オートプレイだと表示されません。\n" +
1220+ "この項目を有効にすると、ベースパートのグラフは\n" +
1221+ "無効になります。",
1222+ "To draw Graph or not." );
1223+ this.list項目リスト.Add( this.iGuitarGraph );
1224+
12201225 // #23580 2011.1.3 yyagi
12211226 this.iGuitarInputAdjustTimeMs = new CItemInteger( "InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar,
12221227 "ギターの入力タイミングの微調整を行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、\n負の値を指定してください。",
@@ -1410,6 +1415,14 @@
14101415 "");
14111416 this.list項目リスト.Add( this.iBassShutterOutPos );
14121417
1418+ this.iBassGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph有効.Bass,
1419+ "最高スキルと比較できるグラフを表示します。\n" +
1420+ "オートプレイだと表示されません。\n" +
1421+ "この項目を有効にすると、ギターパートのグラフは\n" +
1422+ "無効になります。",
1423+ "To draw Graph or not." );
1424+ this.list項目リスト.Add( this.iBassGraph );
1425+
14131426 // #23580 2011.1.3 yyagi
14141427 this.iBassInputAdjustTimeMs = new CItemInteger( "InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass,
14151428 "ベースの入力タイミングの微調整を行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、\n負の値を指定してください。",
@@ -2578,7 +2591,7 @@
25782591 private CItemList iSystemSkillMode;
25792592 private CItemToggle iMutingLP;
25802593 private CItemToggle iSystemClassicNotes;
2581- private CItemToggle iSystemGraph; // #24074 2011.01.23 add ikanick
2594+ //private CItemToggle iSystemGraph; // #24074 2011.01.23 add ikanick
25822595
25832596 #region [ GDオプション ]
25842597 /*
@@ -2657,6 +2670,7 @@
26572670 private CItemInteger iBassShutterInPos;
26582671 private CItemInteger iBassShutterOutPos;
26592672 private CItemToggle iBassLaneFlush;
2673+ private CItemToggle iBassGraph;
26602674
26612675 private CItemInteger iCommonPlaySpeed;
26622676 // private CItemBase iCommonReturnToMenu;
@@ -2698,6 +2712,7 @@
26982712 private CItemInteger iDrumsShutterInPos;
26992713 private CItemInteger iDrumsShutterOutPos;
27002714 private CItemToggle iDrumsComboDisp;
2715+ private CItemToggle iDrumsGraph;
27012716
27022717 //private CItemToggle iGuitarAutoPlay;
27032718 private CItemThreeState iGuitarAutoPlayAll; // #23886 2012.5.8 yyagi
@@ -2725,6 +2740,7 @@
27252740 private CItemInteger iGuitarShutterInPos;
27262741 private CItemInteger iGuitarShutterOutPos;
27272742 private CItemToggle iGuitarLaneFlush;
2743+ private CItemToggle iGuitarGraph;
27282744
27292745 private CItemInteger iDrumsInputAdjustTimeMs; // #23580 2011.1.3 yyagi
27302746 private CItemInteger iGuitarInputAdjustTimeMs; //
@@ -2818,7 +2834,6 @@
28182834 CDTXMania.ConfigIni.bAVI有効 = this.iSystemAVI.bON;
28192835 CDTXMania.ConfigIni.bBGA有効 = this.iSystemBGA.bON;
28202836 CDTXMania.ConfigIni.bDirectShowMode = this.iSystemDirectShowMode.bON;
2821- CDTXMania.ConfigIni.bGraph有効 = this.iSystemGraph.bON;
28222837 CDTXMania.ConfigIni.n曲が選択されてからプレビュー音が鳴るまでのウェイトms = this.iSystemPreviewSoundWait.n現在の値;
28232838 CDTXMania.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms = this.iSystemPreviewImageWait.n現在の値;
28242839 CDTXMania.ConfigIni.b演奏情報を表示する = this.iSystemDebugInfo.bON;
@@ -2907,6 +2922,7 @@
29072922
29082923 CDTXMania.ConfigIni.b演奏音を強調する.Bass = this.iSystemSoundMonitorBass.bON;
29092924 CDTXMania.ConfigIni.n表示可能な最小コンボ数.Bass = this.iSystemMinComboBass.n現在の値;
2925+ CDTXMania.ConfigIni.bGraph有効.Bass = this.iBassGraph.bON;
29102926 }
29112927 private void tConfigIniへ記録する・Drums()
29122928 {
@@ -2964,6 +2980,7 @@
29642980 CDTXMania.ConfigIni.nShutterOutSide.Drums = this.iDrumsShutterOutPos.n現在の値;
29652981 CDTXMania.ConfigIni.bドラムコンボ文字の表示 = this.iDrumsComboDisp.bON;
29662982
2983+ CDTXMania.ConfigIni.bGraph有効.Drums = this.iDrumsGraph.bON;
29672984 //CDTXMania.ConfigIni.eDark = (Eダークモード) this.iCommonDark.n現在選択されている項目番号; // ダークはプリセット切り替えとして使うため、保存はしない。
29682985 }
29692986 private void tConfigIniへ記録する・Guitar()
@@ -2995,6 +3012,7 @@
29953012
29963013 CDTXMania.ConfigIni.n表示可能な最小コンボ数.Guitar = this.iSystemMinComboGuitar.n現在の値;
29973014 CDTXMania.ConfigIni.b演奏音を強調する.Guitar = this.iSystemSoundMonitorGuitar.bON;
3015+ CDTXMania.ConfigIni.bGraph有効.Guitar = this.iGuitarGraph.bON;
29983016 }
29993017 //-----------------
30003018 #endregion
--- trunk/DTXManiaプロジェクト/コード/ステージ/08.結果/CActResultParameterPanel.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/08.結果/CActResultParameterPanel.cs (revision 542)
@@ -339,8 +339,9 @@
339339 if (this.txリザルトパネル != null)
340340 this.txリザルトパネル.t2D描画(CDTXMania.app.Device, this.n本体X[i], this.n本体Y[i]);
341341
342- if (this.txDifficulty != null)
343- this.txDifficulty.t2D描画(CDTXMania.app.Device, this.n本体X[i] + 510, this.n本体Y[i] + 8, new Rectangle(0, CDTXMania.nSongDifficulty * 20, 120, 20));
342+ //if (this.txDifficulty != null)
343+ // this.txDifficulty.t2D描画(CDTXMania.app.Device, this.n本体X[i] + 510, this.n本体Y[i] + 8, new Rectangle(0, CDTXMania.nSongDifficulty * 20, 120, 20));
344+ this.t難易度パネルを描画する( CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ], 941, 19 );
344345
345346 if (this.txPart != null)
346347 this.txPart.t2D描画(CDTXMania.app.Device, this.n本体X[i] + 388, this.n本体Y[i] + 8, new Rectangle(0, 0 + (20 * i), 120, 20));
@@ -499,9 +500,7 @@
499500 private CTexture txRisky;
500501 private CTexture txリザルトパネル;
501502 private CTexture[] tx文字;
502- protected Rectangle rectDiffPanelPoint;
503503
504-
505504 private void t小文字表示(int x, int y, string str)
506505 {
507506 this.t小文字表示(x, y, str, false);
@@ -613,10 +612,12 @@
613612 }
614613 }
615614 }
616- private void tスクリプトから難易度ラベルを取得する( string strラベル名 )
615+ private void t難易度パネルを描画する( string strラベル名, int nX, int nY )
617616 {
618617 string strRawScriptFile;
619618
619+ Rectangle rect = new Rectangle( 0, 0, 120, 20 );
620+
620621 //ファイルの存在チェック
621622 if( File.Exists( CSkin.Path( @"Script\difficult.dtxs" ) ) )
622623 {
@@ -660,13 +661,15 @@
660661 continue; //ラベル名が違うなら無視。大文字小文字区別しない
661662 }
662663 }
663- this.rectDiffPanelPoint.X = Convert.ToInt32( arScriptLine[ 2 ] );
664- this.rectDiffPanelPoint.Y = Convert.ToInt32( arScriptLine[ 3 ] );
664+ rect.X = Convert.ToInt32( arScriptLine[ 2 ] );
665+ rect.Y = Convert.ToInt32( arScriptLine[ 3 ] );
665666
666- reader.Close();
667667 break;
668668 }
669669 }
670+
671+ if( this.txDifficulty != null )
672+ this.txDifficulty.t2D描画( CDTXMania.app.Device, nX, nY, rect );
670673 }
671674 //-----------------
672675 #endregion
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏スキルメーター.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏スキルメーター.cs (revision 542)
@@ -12,19 +12,28 @@
1212 {
1313 internal class CAct演奏スキルメーター : CActivity
1414 {
15- // #24074 2011.01.23 ikanick グラフの描画
16- // 実装内容
17- // ・左を現在、右を目標
18- // ・基準線(60,70,80,90,100%)を超えると線が黄色くなる(元は白)
19- // ・目標を超えると現在が光る
20- // ・オート時には描画しない
21- // 要望・実装予定
22- // ・グラフを波打たせるなどの視覚の向上→実装済
23- // 修正等
24- // ・画像がないと落ちる→修正済
15+ // グラフ仕様
16+ // ・ギターとベースで同時にグラフを出すことはない。
17+ //
18+ // ・目標のメーター画像
19+ // →ゴーストがあった
20+ //   ・ゴーストに基づいたグラフ(リアルタイム比較)
21+ //  →なかった
22+ //   ・ScoreIniの自己ベストのグラフ
23+ //
2524
26- // プロパティ
25+ private STDGBVALUE<int> nGraphBG_XPos = new STDGBVALUE<int>(); //ドラムにも座標指定があるためDGBVALUEとして扱う。
26+ private int nGraphBG_YPos = 200;
27+ private int DispHeight = 400;
28+ private int DispWidth = 60;
29+ private CCounter counterYposInImg = null;
30+ private readonly int slices = 10;
31+ private int nGraphUsePart = 0;
32+ private int[] nGraphGauge_XPos = new int[ 2 ];
33+ private int nPart = 0;
2734
35+ // プロパティ
36+
2837 public double dbグラフ値現在_渡
2938 {
3039 get
@@ -36,73 +45,60 @@
3645 this.dbグラフ値現在 = value;
3746 }
3847 }
39- public double dbグラフ値ゴースト_渡 //2015.12.31 kairera0467 XG2を見る限り、ゴースト数値はゲージ画像と比較数値にしか使用されていないので、ゴースト数値と目標値は別に扱うことにした。
48+ public double dbグラフ値目標_渡
4049 {
4150 get
4251 {
43- return this.dbグラフ値ゴースト;
52+ return this.dbグラフ値目標;
4453 }
4554 set
4655 {
47- this.dbグラフ値ゴースト = value;
56+ this.dbグラフ値目標 = value;
4857 }
4958 }
50- public double dbグラフ値目標_渡
59+ public int[] n現在のAutoを含まない判定数_渡
5160 {
5261 get
5362 {
54- return this.dbグラフ値目標;
63+ return this.n現在のAutoを含まない判定数;
5564 }
5665 set
5766 {
58- this.dbグラフ値目標 = value;
67+ this.n現在のAutoを含まない判定数 = value;
5968 }
6069 }
70+
71+ // コンストラクタ
6172
62- // コンストラクタ
73+ public CAct演奏スキルメーター()
74+ {
75+ base.b活性化してない = true;
76+ }
6377
64- public CAct演奏スキルメーター()
65- {
66- //スクリプト化の都合で、ここに置いていたコードは移動。活性化のタイミングで実行するようにした。
67- base.b活性化してない = true;
68- }
6978
79+ // CActivity 実装
7080
71- // CActivity 実装
72-
73- public override void On活性化()
81+ public override void On活性化()
7482 {
75- this.n本体X = 966;
76- this.list文字位置 = new List<ST文字位置>();
77- this.t座標スクリプトを読み込む();
78-
79- this.dbグラフ値目標 = 80f;
83+ this.dbグラフ値目標 = 0f;
8084 this.dbグラフ値現在 = 0f;
81- this.dbグラフ値比較 = 0f;
82- this.dbグラフ値ゴースト = 0f;
83- this.db現在の判定数合計 = 0f;
8485
85- this.dbグラフ値現在_表示 = 0f;
86- this.dbグラフ値目標_表示 = 0f;
87- this.dbグラフ値ゴースト_表示 = 0f;
88- this.bUseGhost = false;
89- base.On活性化();
90- }
91- public override void On非活性化()
92- {
93- base.On非活性化();
94- }
95- public override void OnManagedリソースの作成()
96- {
97- if (!base.b活性化してない)
98- {
86+ this.n現在のAutoを含まない判定数 = new int[ 6 ];
87+
88+ base.On活性化();
89+ }
90+ public override void On非活性化()
91+ {
92+ base.On非活性化();
93+ }
94+ public override void OnManagedリソースの作成()
95+ {
96+ if( !base.b活性化してない )
97+ {
9998 this.pfNameFont = new CPrivateFastFont( new FontFamily( "Arial" ), 16, FontStyle.Bold );
99+ this.txグラフ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_Main.png" ) );
100+ this.txグラフ_ゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_Gauge.png" ) );
100101
101- this.txグラフ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_main.png" ) );
102- this.tx比較 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_main.png" ) );
103- this.txグラフバックパネル = CDTXMania.tテクスチャの生成( CSkin.Path(@"Graphics\7_Graph_main.png" ) );
104- this.txグラフゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_Gauge.png" ) );
105-
106102 if( this.pfNameFont != null )
107103 {
108104 if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.PERFECT )
@@ -114,421 +110,376 @@
114110 this.txPlayerName = this.t指定された文字テクスチャを生成する( "LAST PLAY" );
115111 }
116112 }
117- base.OnManagedリソースの作成();
118- }
119- }
120- public override void OnManagedリソースの解放()
121- {
122- if (!base.b活性化してない)
123- {
124- CDTXMania.tテクスチャの解放( ref this.txグラフ );
125- CDTXMania.tテクスチャの解放( ref this.tx比較 );
126- CDTXMania.tテクスチャの解放( ref this.txグラフバックパネル );
127- CDTXMania.tテクスチャの解放( ref this.txPlayerName );
128- base.OnManagedリソースの解放();
129- }
130- }
131- public override int On進行描画()
132- {
133- if( !base.b活性化してない )
134- {
135- if( base.b初めての進行描画 )
136- {
113+ base.OnManagedリソースの作成();
114+ }
115+ }
116+ public override void OnManagedリソースの解放()
117+ {
118+ if( !base.b活性化してない )
119+ {
120+ CDTXMania.tテクスチャの解放( ref this.txグラフ );
121+ CDTXMania.tテクスチャの解放( ref this.txグラフ_ゲージ );
122+ CDTXMania.tテクスチャの解放( ref this.txグラフ値自己ベストライン );
123+ base.OnManagedリソースの解放();
124+ }
125+ }
126+ public override int On進行描画()
127+ {
128+ if( !base.b活性化してない )
129+ {
130+ if( base.b初めての進行描画 )
131+ {
132+ //座標などの定義は初回だけにする。
133+ //2016.03.29 kairera0467 非セッション譜面で、譜面が無いパートでグラフを有効にしている場合、譜面があるパートに一時的にグラフを切り替える。
134+ // 時間がなくて雑なコードになったため、後日最適化を行う。
137135 if( CDTXMania.ConfigIni.bDrums有効 )
138136 {
139- this.eGraphUsePart = E楽器パート.DRUMS;
137+ this.nPart = 0;
138+ this.nGraphUsePart = 0;
140139 }
141140 else if( CDTXMania.ConfigIni.bGuitar有効 )
142141 {
142+ this.nGraphUsePart = ( CDTXMania.ConfigIni.bGraph有効.Guitar == true ) ? 1 : 2;
143+ if( CDTXMania.DTX.bチップがある.Guitar )
144+ this.nPart = CDTXMania.ConfigIni.bGraph有効.Guitar ? 0 : 1;
145+ else if( !CDTXMania.DTX.bチップがある.Guitar && CDTXMania.ConfigIni.bGraph有効.Guitar )
146+ {
147+ this.nPart = 1;
148+ this.nGraphUsePart = 2;
149+ }
143150
151+ if( !CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bGraph有効.Bass )
152+ this.nPart = 0;
144153 }
145- this.ct爆発エフェクト = new CCounter(0, 13, 20, CDTXMania.Timer);
146- base.b初めての進行描画 = false;
147- }
148- #region[ 事前に各種数値を定義しておく ]
149- double db1ノーツごとの達成率 = (double)this.dbグラフ値目標 / CDTXMania.DTX.n可視チップ数.Drums;
150- this.n現在演奏されたノーツ数 =
151- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む.Drums.Perfect +
152- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む.Drums.Great +
153- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む.Drums.Good +
154- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む.Drums.Poor +
155- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む.Drums.Miss;
156- CScoreIni.C演奏記録 drums = new CScoreIni.C演奏記録();
157- double rate = (double)n現在演奏されたノーツ数 / (double)CDTXMania.DTX.n可視チップ数.Drums;
158154
159- //ゴースト判別
160- if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.PERFECT )
161- {
162- bUseGhost = true; //AUTOの場合は無条件で使用可能。
163- this.dbグラフ値目標 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ];
164- }
165- else if( CDTXMania.ConfigIni.eTargetGhost.Drums != ETargetGhostData.NONE )
166- {
167- bUseGhost = true;
168- //ゴーストデータはあるけどゴーストスコアデータが無い場合はScoreIni側から持ってくる。
169- if( CDTXMania.listTargetGhsotLag.Drums != null && CDTXMania.listTargetGhostScoreData.Drums != null )
155+ this.nGraphBG_XPos.Drums = 966;
156+ this.nGraphBG_XPos.Guitar = 356;
157+ this.nGraphBG_XPos.Bass = 647;
158+ this.nGraphBG_YPos = 50;
159+
160+ if( CDTXMania.ConfigIni.eTargetGhost[ this.nGraphUsePart ] != ETargetGhostData.NONE )
170161 {
171- if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.PERFECT || CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.LAST_PLAY )
172- this.dbグラフ値目標 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ];
173- else
174- this.dbグラフ値目標 = CDTXMania.listTargetGhostScoreData.Drums.db演奏型スキル値;
162+ if( CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ] != null )
163+ {
164+ //this.dbグラフ値目標 = CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ].db演奏型スキル値;
165+ this.dbグラフ値目標_表示 = CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ].db演奏型スキル値;
166+ }
175167 }
176- else
177- {
178- if( CDTXMania.ConfigIni.eTargetGhost.Drums != ETargetGhostData.LAST_PLAY )
179- this.dbグラフ値目標 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ];
180- }
181- }
182- #endregion
183168
184- Rectangle rectangle = new Rectangle( 2, 2, 280, 720 );
185- //グラフの背景
186- if( this.txグラフバックパネル != null )
187- {
188- this.txグラフバックパネル.t2D描画( CDTXMania.app.Device, this.stグラフ背景.nX, this.stグラフ背景.nY, this.stグラフ背景.rect );
169+ this.nGraphGauge_XPos = new int[] { 3, 205 };
170+
171+ base.b初めての進行描画 = false;
189172 }
190173
191- //比較対象
174+ int stYposInImg = 0;
175+
176+
177+
192178 if( this.txグラフ != null )
193179 {
194- int nTarget = 0;
180+ //背景
181+ this.txグラフ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
182+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos, new Rectangle( 2, 2, 280, 640 ) );
183+
184+ //ターゲット名
185+ #region[ ターゲット名画像座標 ]
186+ int nTargetNameRectY = 0;
195187 switch( CDTXMania.ConfigIni.eTargetGhost.Drums )
196188 {
197189 case ETargetGhostData.NONE:
190+ nTargetNameRectY = 556;
198191 break;
192+ case ETargetGhostData.HI_SKILL:
193+ nTargetNameRectY = 588;
194+ break;
199195 case ETargetGhostData.PERFECT:
200- nTarget = 1;
196+ nTargetNameRectY = 572;
201197 break;
202- case ETargetGhostData.HI_SKILL:
203- nTarget = 2;
198+ case ETargetGhostData.LAST_PLAY:
199+ nTargetNameRectY = 636;
204200 break;
205201 case ETargetGhostData.HI_SCORE:
206- nTarget = 3;
202+ nTargetNameRectY = 604;
207203 break;
208- case ETargetGhostData.LAST_PLAY:
209- nTarget = 5;
204+ case ETargetGhostData.ONLINE:
205+ nTargetNameRectY = 620;
210206 break;
211207 }
212- if( !bUseGhost ) nTarget = 0;
208+ #endregion
209+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + ( nPart == 1 ? 189 : 2), nGraphBG_YPos + 611, new Rectangle( 288, 652, 48, 16 ) );
210+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + ( nPart == 1 ? 218 : 30 ), nGraphBG_YPos + 611, new Rectangle( 288, nTargetNameRectY, 48, 16 ) );
213211
214- this.txグラフ.n透明度 = 255;
215- this.txグラフ.t2D描画( CDTXMania.app.Device, 32 + this.n本体X, 662, new Rectangle( 288, 556 + ( nTarget * 16 ), 48, 16 ) );
216- }
212+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + ( this.nPart == 1 ? 172 : 90 ), nGraphBG_YPos + 600, new Rectangle( ( this.nPart == 1 ? 452 : 434), 556, 18, 28 ) );
213+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + ( this.nPart == 1 ? 6 : 115 ), nGraphBG_YPos + 600, new Rectangle( 342, 556, 86, 28 ) );
217214
218- this.dbグラフ値現在_表示 = this.dbグラフ値現在;
219- if( this.txグラフゲージ != null )
220- {
221- //複雑な計算が必要になったよコンチキショウ!
222- //グラフ(100%時)のY座標にグラフ全体の高さを足す。これで0%時のY座標が算出できる。
223- int gaugeY = this.stゲージ現在.nY + this.stゲージ現在.rect.Height;
224- this.txグラフゲージ.n透明度 = 255;
225- this.txグラフゲージ.t2D描画( CDTXMania.app.Device, this.stゲージ現在.nX, gaugeY - (int)( (float)this.stゲージ現在.rect.Height * this.dbグラフ値現在_表示 / 100.0f ), new Rectangle( this.stゲージ現在.rect.X, this.stゲージ現在.rect.Y, this.stゲージ現在.rect.Width, (int)( (float)this.stゲージ現在.rect.Height * this.dbグラフ値現在_表示 / 100.0f ) ) );
226- }
227215
228- //矢印模様
229- if( this.txグラフゲージ != null )
230- {
231- this.txグラフゲージ.n透明度 = 32;
232- this.txグラフゲージ.t2D描画( CDTXMania.app.Device, 9 + this.n本体X, 90, new Rectangle( 550, 2, 60, 560 ) );
233-
234- this.txグラフゲージ.n透明度 = 255;
216+ //現在の達成率
217+ //2Pはおおよその目分量です。
218+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + ( this.nPart == 1 ? 96 : 207 ), nGraphBG_YPos + 606, string.Format( "{0,6:##0.00}", this.dbグラフ値現在 ) );
235219 }
236220
237- // 基準線
238- rectangle = new Rectangle(78, 0, 60, 3);
239- for (int i = 0; i < 6; i++)
221+ //ゲージ現在
222+ if( this.txグラフ_ゲージ != null )
240223 {
241- //560.0 * this.dbグラフ値ゴースト_表示 / 100.0
242- //グラフ下部 649
243- int linepos = 0;
244- double target = 0.0;
245- switch( i )
246- {
247- case 0:{ linepos = 0; target = 100.0; }
248- break;
249- case 1:{ linepos = 28; target = 95.0; }
250- break;
251- case 2:{ linepos = 112; target = 80.0; }
252- break;
253- case 3:{ linepos = 151; target = 73.0; }
254- break;
255- case 4:{ linepos = 207; target = 63.0; }
256- break;
257- case 5:{ linepos = 263; target = 53.0; }
258- break;
259- }
224+ //ゲージ背景
225+ //ドラムとギター1Pでは左端、ギター2Pでは右端。
226+ this.txグラフ_ゲージ.n透明度 = 255;
227+ this.txグラフ_ゲージ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + this.nGraphGauge_XPos[ nPart ], nGraphBG_YPos + 40, new Rectangle( 418, 2, 72, 560 ) );
260228
261- // 基準線を越えたら線が黄色くなる
262- if( this.dbグラフ値現在 >= target )
263- {
264- rectangle = this.stゲージ基準線達成.rect;//黄色
265- }
266- else
267- {
268- rectangle = this.stゲージ基準線.rect;
269- if (this.txグラフ != null)
270- {
271- this.txグラフ.n透明度 = 160;
272- }
273- }
229+ //ゲージ本体
230+ int nGaugeSize = (int)( 560.0f * (float)this.dbグラフ値現在 / 100.0f );
231+ int nPosY = 650 - nGaugeSize;
232+ this.txグラフ_ゲージ.n透明度 = 255;
233+ this.txグラフ_ゲージ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + this.nGraphGauge_XPos[ nPart ] + 7, nPosY, new Rectangle( 628, 2, 60, nGaugeSize ) );
274234
275- if( this.txグラフ != null && CDTXMania.ConfigIni.nSkillMode == 1 )
276- {
277- this.txグラフ.t2D描画( CDTXMania.app.Device, this.stゲージ基準線.nX, this.stゲージ基準線.nY + linepos, rectangle );
278- }
279- }
235+ //ゲージ矢印
236+ this.txグラフ_ゲージ.n透明度 = 32;
237+ this.txグラフ_ゲージ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + this.nGraphGauge_XPos[ nPart ] + 3, nGraphBG_YPos + 40, new Rectangle( 562, 2, 60, 560 ) );
280238
281- this.dbグラフ値直前 = this.dbグラフ値現在;
239+ //ゲージ比較
240+ int nTargetGaugeSize = (int)( 560.0f * ( (float)this.dbグラフ値目標 / 100.0f ) );
241+ int nTargetGaugePosY = 650 - nTargetGaugeSize;
242+ int nTargetGaugeRectX = this.dbグラフ値現在 > this.dbグラフ値目標 ? 2 : 210;
243+ this.txグラフ_ゲージ.n透明度 = 255;
244+ this.txグラフ_ゲージ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + ( nPart == 1 ? 3 : 75 ), nTargetGaugePosY, new Rectangle( nTargetGaugeRectX, 2, 201, nTargetGaugeSize ) );
282245
283- // --目標値
284- this.dbグラフ値目標_表示 = this.dbグラフ値目標;
285-
286- db現在の判定数合計 = 0;
287-
288- this.dbグラフ値ゴースト_表示 = this.dbグラフ値ゴースト;
289- if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.NONE || CDTXMania.listTargetGhsotLag.Drums == null )
290- {
291- //ゴーストを使用しない、またはゴーストのラグデータが無い場合は大きさを固定する。
292- this.dbグラフ値ゴースト_表示 = this.dbグラフ値目標_表示;
246+ string strPlus = this.dbグラフ値現在 >= this.dbグラフ値目標 ? "+" : "-";
247+ this.t比較文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + this.nGraphGauge_XPos[ nPart ] + 7, nPosY, string.Format( strPlus + "{0,5:#0.00}", Math.Abs( this.dbグラフ値現在 - this.dbグラフ値目標 ) ) );
293248 }
294- rectangle = new Rectangle(138, 0, 72, (int)(556.0 * this.dbグラフ値ゴースト_表示 / 100.0));
295- if( this.txグラフゲージ != null )
296- {
297- int gaugeTargetYF = this.stゲージ比較_敗.nY + this.stゲージ比較_敗.rect.Height;
298- int gaugeTargetYC = this.stゲージ比較_勝.nY + this.stゲージ比較_勝.rect.Height;
299- if( this.bUseGhost == false )
300- {
301- this.txグラフゲージ.t2D描画( CDTXMania.app.Device, this.stゲージ比較_敗.nX, gaugeTargetYF - (int)(this.stゲージ比較_敗.rect.Height * this.dbグラフ値ゴースト_表示 / 100.0), new Rectangle( this.stゲージ比較_敗.rect.X, this.stゲージ比較_敗.rect.Y, this.stゲージ比較_敗.rect.Width, (int)( (float)this.stゲージ比較_敗.rect.Height * this.dbグラフ値ゴースト_表示 / 100.0 ) ) );
302- }
303- else
304- {
305- if( this.dbグラフ値ゴースト_表示 < this.dbグラフ値現在 )
306- {
307- this.txグラフゲージ.t2D描画( CDTXMania.app.Device, this.stゲージ比較_敗.nX, gaugeTargetYF - (int)(this.stゲージ比較_敗.rect.Height * this.dbグラフ値ゴースト_表示 / 100.0), new Rectangle( this.stゲージ比較_敗.rect.X, this.stゲージ比較_敗.rect.Y, this.stゲージ比較_敗.rect.Width, (int)( (float)this.stゲージ比較_敗.rect.Height * this.dbグラフ値ゴースト_表示 / 100.0 ) ) );
308- }
309- else
310- {
311- this.txグラフゲージ.t2D描画( CDTXMania.app.Device, this.stゲージ比較_勝.nX, gaugeTargetYC - (int)(this.stゲージ比較_勝.rect.Height * this.dbグラフ値ゴースト_表示 / 100.0), new Rectangle( this.stゲージ比較_勝.rect.X, this.stゲージ比較_勝.rect.Y, this.stゲージ比較_勝.rect.Width, (int)( (float)this.stゲージ比較_勝.rect.Height * this.dbグラフ値ゴースト_表示 / 100.0 ) ) );
312- }
313- }
314249
315- }
316-
317-
318- this.t小文字表示(204 + this.n本体X, 658, string.Format("{0,6:##0.00}%", this.dbグラフ値現在));
319- if( CDTXMania.ConfigIni.nInfoType == 0 ) //達成率表示
250+ if( this.txグラフ != null )
320251 {
321- if( bUseGhost == true )
252+ if( CDTXMania.ConfigIni.nInfoType == 0 )
322253 {
323- double dbTargetSkill = 0.0;
324- if( CDTXMania.listTargetGhostScoreData.Drums != null )
325- {
326- dbTargetSkill = CDTXMania.listTargetGhostScoreData.Drums.db演奏型スキル値;
327- }
254+ int nBoardPos = 180;
255+ int[] nBoardX = new int[] { 102, 16 };
256+ int[,] nBoardY = new int[,] { { 180, 265 }, { 240, 180 } };
257+ int nBoard = 0;
258+
259+ if( this.dbグラフ値自己ベスト > this.dbグラフ値目標_表示 )
260+ nBoard = 1;
328261 else
329- {
330- //dbTargetSkill = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ];
331- }
332- if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.PERFECT )
333- dbTargetSkill = 100.0;
262+ nBoard = 0;
334263
335- switch( CDTXMania.ConfigIni.eTargetGhost.Drums )
264+ //ゴーストが存在するか
265+ if( CDTXMania.listTargetGhsotLag[ this.nGraphUsePart ] != null )
336266 {
337- case ETargetGhostData.PERFECT:
338- case ETargetGhostData.LAST_PLAY:
267+ if( CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ] != null )
268+ {
269+ switch( CDTXMania.ConfigIni.eTargetGhost[ this.nGraphUsePart ] )
339270 {
340- //LASTまたはAUTOの場合は自己ベストも表示させる。
341- int ntargetPos = 200;
342- int nbestskillPos = 290;
343- if( dbTargetSkill <= this.dbグラフ値目標 )
344- {
345- ntargetPos = 260;
346- nbestskillPos = 200;
347- }
271+ case ETargetGhostData.PERFECT:
272+ {
273+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + nBoardY[ nBoard, 0 ], new Rectangle( 288, 2, 162, 85 ) );
274+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ] + 90, nGraphBG_YPos + nBoardY[ nBoard, 0 ] + 50, string.Format( "{0,6:##0.00}%", this.dbグラフ値目標_表示 ) );
275+ if( this.txPlayerName != null )
276+ {
277+ this.txPlayerName.t2D描画( CDTXMania.app.Device, 96 + nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos + nBoardY[ nBoard, 0 ] + 14 );
278+ }
279+ }
280+ break;
281+ case ETargetGhostData.LAST_PLAY:
282+ case ETargetGhostData.HI_SCORE:
283+ case ETargetGhostData.HI_SKILL:
284+ {
285+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + nBoardY[ nBoard, 0 ], new Rectangle( 288, 2, 162, 85 ) );
286+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ] + 90, nGraphBG_YPos + nBoardY[ nBoard, 0 ] + 50, string.Format( "{0,6:##0.00}%", this.dbグラフ値目標_表示 ) );
287+ if( CDTXMania.ConfigIni.eTargetGhost[ this.nGraphUsePart ] == ETargetGhostData.LAST_PLAY )
288+ {
289+ if( this.txPlayerName != null )
290+ {
291+ this.txPlayerName.t2D描画( CDTXMania.app.Device, 96 + nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos + nBoardY[ nBoard, 0 ] + 14 );
292+ }
293+ }
294+ }
295+ break;
296+ }
297+ }
298+ }
348299
300+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + nBoardY[ nBoard, 1 ], new Rectangle( 288, 160, 162, 60 ) );
301+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ] + 90, nGraphBG_YPos + nBoardY[ nBoard, 1 ] + 24, string.Format( "{0,6:##0.00}%", this.dbグラフ値自己ベスト ) );
349302
350- if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.LAST_PLAY )
351- {
352- if( this.dbグラフ値現在 > dbTargetSkill )
353- this.tx比較.n透明度 = 128;
354- this.tx比較.t2D描画( CDTXMania.app.Device, 102 + this.n本体X, ntargetPos, new Rectangle( 288, 2, 162, 85 ) );
303+ if( this.dbグラフ値自己ベスト > this.dbグラフ値目標_表示 )
304+ this.t折れ線を描画する( nBoardY[ 0, 0 ], nBoardY[ 1, 0 ] );
305+ else
306+ this.t折れ線を描画する( nBoardY[ 0, 1 ], nBoardY[ 1, 1 ] );
307+ }
308+ else if( CDTXMania.ConfigIni.nInfoType == 1 )
309+ {
310+ int nBoardPos = 50;
311+ int[] nBoardX = new int[] { 102, 16 };
312+ int[] arBoardPos = new int[ 2 ];
313+ if( this.dbグラフ値自己ベスト < this.dbグラフ値目標_表示 ) nBoardPos += 54;
355314
356- this.t小文字表示( 192 + this.n本体X, ntargetPos + 50, string.Format( "{0,6:##0.00}%", dbTargetSkill ) );
357- }
358- else
359- {
360- if( this.dbグラフ値現在 >= 100.0 )
361- this.tx比較.n透明度 = 128;
362- this.tx比較.t2D描画( CDTXMania.app.Device, 102 + this.n本体X, ntargetPos, new Rectangle( 288, 2, 162, 85 ) );
315+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 102, 240, new Rectangle( 288, 226, 162, 60 ) );
316+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 102, 320, new Rectangle( 288, 292, 162, 60 ) );
317+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 102, 400, new Rectangle( 288, 358, 162, 60 ) );
318+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 102, 480, new Rectangle( 288, 424, 162, 60 ) );
319+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 102, 560, new Rectangle( 288, 490, 162, 60 ) );
363320
364- this.t小文字表示( 192 + this.n本体X, ntargetPos + 50, string.Format( "{0,6:##0.00}%", dbTargetSkill ) );
365- }
321+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 186, 264, string.Format("{0,6:###0}", this.n現在のAutoを含まない判定数[ 0 ]));
322+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 186, 344, string.Format("{0,6:###0}", this.n現在のAutoを含まない判定数[ 1 ]));
323+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 186, 424, string.Format("{0,6:###0}", this.n現在のAutoを含まない判定数[ 2 ]));
324+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 186, 504, string.Format("{0,6:###0}", this.n現在のAutoを含まない判定数[ 3 ]));
325+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 186, 584, string.Format("{0,6:###0}", this.n現在のAutoを含まない判定数[ 4 ]));
366326
367- if( this.dbグラフ値現在 > this.dbグラフ値目標_表示 )
368- this.tx比較.n透明度 = 128;
369- else
370- this.tx比較.n透明度 = 255;
371- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, nbestskillPos, new Rectangle(288, 160, 162, 60));
372- this.t小文字表示( 192 + this.n本体X, nbestskillPos + 24, string.Format( "{0,6:##0.00}%", this.dbグラフ値目標_表示 ) );
373-
374-
375- if( this.txPlayerName != null )
376- {
377- this.txPlayerName.t2D描画( CDTXMania.app.Device, 96 + this.n本体X, ntargetPos + 14 );
378- }
379- }
380- break;
381- case ETargetGhostData.HI_SCORE:
382- case ETargetGhostData.HI_SKILL:
327+ //ゴーストが存在するか
328+ if( CDTXMania.listTargetGhsotLag[ this.nGraphUsePart ] != null )
329+ {
330+ if( CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ] != null )
331+ {
332+ switch( CDTXMania.ConfigIni.eTargetGhost[ this.nGraphUsePart ] )
383333 {
384- this.tx比較.n透明度 = 255;
385- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 200, new Rectangle(288, 160, 162, 60));
386- this.t小文字表示(186 + this.n本体X, 224, string.Format("{0,6:##0.00}%", dbTargetSkill ));
387- if( this.dbグラフ値現在 > dbTargetSkill )
388- this.tx比較.n透明度 = 128;
334+ case ETargetGhostData.PERFECT:
335+ {
336+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + nBoardPos, new Rectangle( 288, 2, 162, 85 ) );
337+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ] + 90, nGraphBG_YPos + nBoardPos + 50, string.Format( "{0,6:##0.00}%", this.dbグラフ値目標_表示 ) );
338+ if( this.txPlayerName != null )
339+ {
340+ this.txPlayerName.t2D描画( CDTXMania.app.Device, 96 + nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos + nBoardPos + 14 );
341+ }
342+ }
343+ break;
344+ case ETargetGhostData.LAST_PLAY:
345+ case ETargetGhostData.HI_SCORE:
346+ case ETargetGhostData.HI_SKILL:
347+ {
348+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + nBoardPos, new Rectangle( 288, 2, 162, 85 ) );
349+ //this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + 50, new Rectangle( 288, 2, 162, 85 ) );
350+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ] + 90, nGraphBG_YPos + nBoardPos + 50, string.Format( "{0,6:##0.00}%", this.dbグラフ値目標_表示 ) );
351+ if( CDTXMania.ConfigIni.eTargetGhost[ this.nGraphUsePart ] == ETargetGhostData.LAST_PLAY )
352+ {
353+ if( this.txPlayerName != null )
354+ {
355+ this.txPlayerName.t2D描画( CDTXMania.app.Device, 96 + nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos + nBoardPos + 14 );
356+ }
357+ }
358+ }
359+ break;
389360 }
390- break;
361+ arBoardPos[ 1 ] = nBoardPos;
362+ }
391363 }
364+ if( this.dbグラフ値自己ベスト < this.dbグラフ値目標_表示 ) nBoardPos -= 54;
365+ else nBoardPos += 85;
366+ arBoardPos[ 0 ] = nBoardPos;
392367
393- string strPlus = "";
394- if ( this.dbグラフ値現在 >= this.dbグラフ値ゴースト )
395- strPlus = "+";
396- else
397- strPlus = "-";
398- this.t比較数字表示( 10 + this.n本体X, 668 - (int)(560.0 * this.dbグラフ値現在 / 100.0) - 18, string.Format( strPlus + "{0,5:#0.00}", Math.Abs(this.dbグラフ値現在 - this.dbグラフ値ゴースト) ) );
399- //this.t比較数字表示( 100 + this.n本体X, 668 - (int)(560.0 * this.dbグラフ値ゴースト / 100.0) - 18, string.Format( strPlus + "{0,5:#0.00}", this.dbグラフ値ゴースト ));
400- //CDTXMania.act文字コンソール.tPrint( 75 + this.n本体X[j], 652 - (int)(556.0 * this.dbグラフ値ゴースト_表示 / 100.0) - 18, C文字コンソール.Eフォント種別.白, string.Format( "{0,6:##0.00}%", this.dbグラフ値ゴースト ) );
368+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ], nGraphBG_YPos + nBoardPos, new Rectangle( 288, 160, 162, 60 ) );
369+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + nBoardX[ nPart ] + 90, nGraphBG_YPos + nBoardPos + 24, string.Format( "{0,6:##0.00}%", this.dbグラフ値自己ベスト ) );
401370
371+ this.t折れ線を描画する( arBoardPos[ 0 ], arBoardPos[ 1 ] );
402372 }
403-
404- if( bUseGhost == false )
405- {
406- //比較対象のゴーストデータが無い
407- //ゴーストを使わない
408- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 200, new Rectangle(288, 160, 162, 60));
409- this.t小文字表示(186 + this.n本体X, 224, string.Format("{0,6:##0.00}%", this.dbグラフ値目標_表示));
410- if (this.dbグラフ値現在 > this.dbグラフ値目標)
411- {
412- this.tx比較.n透明度 = 128;
413- }
414- }
415373 }
416- else if( CDTXMania.ConfigIni.nInfoType == 1 ) //判定数表示
417- {
418- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 200, new Rectangle(288, 226, 162, 60));
419- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 280, new Rectangle(288, 292, 162, 60));
420- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 360, new Rectangle(288, 358, 162, 60));
421- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 440, new Rectangle(288, 424, 162, 60));
422- this.tx比較.t2D描画(CDTXMania.app.Device, 102 + this.n本体X, 520, new Rectangle(288, 490, 162, 60));
374+ }
375+ return 0;
376+ }
423377
424- this.t小文字表示(186 + this.n本体X, 224, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない.Drums.Perfect));
425- this.t小文字表示(186 + this.n本体X, 304, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない.Drums.Great));
426- this.t小文字表示(186 + this.n本体X, 384, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない.Drums.Good));
427- this.t小文字表示(186 + this.n本体X, 464, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない.Drums.Poor));
428- this.t小文字表示(186 + this.n本体X, 544, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない.Drums.Miss));
429378
379+ // その他
430380
431- }
432- }
433- return 0;
434- }
435-
436-
437- // その他
438-
439- #region [ private ]
440- //----------------
441- [StructLayout(LayoutKind.Sequential)]
442- private struct STキラキラ
443- {
444- public int x;
445- public int y;
446- public float fScale;
447- public int Trans;
448- public CCounter ct進行;
449- }
450- [StructLayout(LayoutKind.Sequential)]
451- private struct ST文字位置
452- {
453- public string strMode;
454- public char ch;
455- public Point pt;
456- public Rectangle rect;
457- }
458- private List<ST文字位置> list文字位置;
459- private STキラキラ[] stキラキラ = new STキラキラ[64];
460- private STキラキラ[] stフラッシュ = new STキラキラ[16];
461-
462- private bool bUseGhost;
463- private CCounter ct爆発エフェクト;
464- public double db現在の判定数合計;
381+ #region [ private ]
382+ //----------------
465383 private double dbグラフ値目標;
466- private double dbグラフ値ゴースト;
467- private double dbグラフ値ゴースト_表示;
468- public double dbグラフ値比較;
469384 private double dbグラフ値目標_表示;
470385 private double dbグラフ値現在;
471386 private double dbグラフ値現在_表示;
472- private double dbグラフ値直前;
473- private int nグラフフラッシュct;
474- private int n現在演奏されたノーツ数;
475- private int n本体X;
476- private CTexture tx比較;
477- private CTexture txグラフ;
478- private CTexture txグラフバックパネル;
479- private CTexture txグラフゲージ;
387+ public double dbグラフ値自己ベスト;
388+ private int[] n現在のAutoを含まない判定数;
389+
480390 private CTexture txPlayerName;
391+ private CTexture txグラフ;
392+ private CTexture txグラフ_ゲージ;
393+ private CTexture txグラフ値自己ベストライン;
481394
482- private Bitmap bmpGraph;
483- private Graphics gGraph;
484395 private CPrivateFastFont pfNameFont;
485- private E楽器パート eGraphUsePart;
486396
487397 [StructLayout(LayoutKind.Sequential)]
488- private struct STスクリプト座標
398+ private struct ST文字位置
489399 {
490- public string strParam;
491- public int nX;
492- public int nY;
493- public Rectangle rect;
494- public bool b本体座標を加算する;
495- public string str;
400+ public char ch;
401+ public Point pt;
402+ public ST文字位置( char ch, Point pt )
403+ {
404+ this.ch = ch;
405+ this.pt = pt;
406+ }
496407 }
497- #region[ スクリプトから取得した座標を格納する変数 ]
498- private STスクリプト座標 stグラフ背景;
499- private STスクリプト座標 stゲージ現在;
500- private STスクリプト座標 stゲージ比較_敗;
501- private STスクリプト座標 stゲージ比較_勝;
502- private STスクリプト座標 stゲージ矢印;
503- private STスクリプト座標 stゲージ基準線;
504- private STスクリプト座標 stゲージ基準線達成;
505408
506- private STスクリプト座標 stパネル筐体トップ;
507- private STスクリプト座標 stパネル自己ベスト;
508- private STスクリプト座標 stパネルPERFECT;
509- private STスクリプト座標 stパネルGREAT;
510- private STスクリプト座標 stパネルGOOD;
511- private STスクリプト座標 stパネルPOOR;
512- private STスクリプト座標 stパネルMISS;
409+ private ST文字位置[] st比較数字位置 = new ST文字位置[]{
410+ new ST文字位置( '0', new Point( 0, 0 ) ),
411+ new ST文字位置( '1', new Point( 10, 0 ) ),
412+ new ST文字位置( '2', new Point( 20, 0 ) ),
413+ new ST文字位置( '3', new Point( 30, 0 ) ),
414+ new ST文字位置( '4', new Point( 40, 0 ) ),
415+ new ST文字位置( '5', new Point( 50, 0 ) ),
416+ new ST文字位置( '6', new Point( 60, 0 ) ),
417+ new ST文字位置( '7', new Point( 70, 0 ) ),
418+ new ST文字位置( '8', new Point( 80, 0 ) ),
419+ new ST文字位置( '9', new Point( 90, 0 ) ),
420+ new ST文字位置( '.', new Point( 100, 0 ) ),
421+ new ST文字位置( '-', new Point( 110, 0 ) ),
422+ new ST文字位置( '+', new Point( 120, 0 ) )
423+ };
424+ private ST文字位置[] st達成率数字位置 = new ST文字位置[]{
425+ new ST文字位置( '0', new Point( 0, 0 ) ),
426+ new ST文字位置( '1', new Point( 12, 0 ) ),
427+ new ST文字位置( '2', new Point( 24, 0 ) ),
428+ new ST文字位置( '3', new Point( 36, 0 ) ),
429+ new ST文字位置( '4', new Point( 48, 0 ) ),
430+ new ST文字位置( '5', new Point( 60, 0 ) ),
431+ new ST文字位置( '6', new Point( 72, 0 ) ),
432+ new ST文字位置( '7', new Point( 84, 0 ) ),
433+ new ST文字位置( '8', new Point( 96, 0 ) ),
434+ new ST文字位置( '9', new Point( 108, 0 ) ),
435+ new ST文字位置( '.', new Point( 120, 0 ) ),
436+ };
513437
514- private STスクリプト座標 stパネル数字座標;
515- private STスクリプト座標 st比較用数字座標;
516438
517- private STスクリプト座標 st比較対象名_自己ベスト;
518- private STスクリプト座標 st比較対象名_オート;
519- private STスクリプト座標 st比較対象名_ハイスキル;
520- private STスクリプト座標 st比較対象名_ハイスコア;
521- private STスクリプト座標 st比較対象名_オンライン;
522- #endregion
523-
524- //-----------------
525-
439+ private void t比較文字表示( int x, int y, string str )
440+ {
441+ foreach( char ch in str )
442+ {
443+ for( int i = 0; i < this.st比較数字位置.Length; i++ )
444+ {
445+ if( this.st比較数字位置[ i ].ch == ch )
446+ {
447+ Rectangle rectangle = new Rectangle( 342 + this.st比較数字位置[ i ].pt.X, 612, 10, 14 );
448+ if( this.txグラフ != null )
449+ {
450+ this.txグラフ.n透明度 = 255;
451+ this.txグラフ.t2D描画( CDTXMania.app.Device, x, y, rectangle );
452+ }
453+ break;
454+ }
455+ }
456+ x += 10;
457+ }
458+ }
459+ private void t達成率文字表示( int x, int y, string str )
460+ {
461+ foreach( char ch in str )
462+ {
463+ for( int i = 0; i < this.st達成率数字位置.Length; i++ )
464+ {
465+ if( this.st達成率数字位置[ i ].ch == ch )
466+ {
467+ Rectangle rectangle = new Rectangle( 342 + this.st達成率数字位置[ i ].pt.X, 590, 12, 16 );
468+ if( this.txグラフ != null )
469+ {
470+ this.txグラフ.n透明度 = 255;
471+ this.txグラフ.t2D描画( CDTXMania.app.Device, x, y, rectangle );
472+ }
473+ break;
474+ }
475+ }
476+ if( ch == '.' ) x += 6;
477+ else x += 12;
478+ }
479+ }
526480 private CTexture t指定された文字テクスチャを生成する( string str文字 )
527481 {
528- //2015.12.27.kairera0467 こいついつも使いまわししてんな。
529- //まだDJ.AUTO専用なので、文字列の長さとかそういうのは考慮してません。
530482 Bitmap bmp;
531-
532483 bmp = this.pfNameFont.DrawPrivateFont( str文字, Color.White, Color.Transparent );
533484
534485 CTexture tx文字テクスチャ = CDTXMania.tテクスチャの生成( bmp, false );
@@ -540,211 +491,71 @@
540491
541492 return tx文字テクスチャ;
542493 }
543-
544- private void t小文字表示(int x, int y, string str)
494+ private void t折れ線を描画する( int nBoardPosA, int nBoardPosB )
545495 {
546- foreach (char ch in str)
496+ //やる気がまるでない線
497+ //2016.03.28 kairera0467 ギター画面では1Pと2Pで向きが変わるが、そこは残念ながら未対応。
498+ //参考 http://dobon.net/vb/dotnet/graphics/drawline.html
499+ if( this.txグラフ値自己ベストライン == null )
547500 {
548- //for (int i = 0; i < this.st小文字位置.Length; i++)
549- //{
550- // if (this.st小文字位置[i].ch == ch)
551- // {
552- // Rectangle rectangle = new Rectangle( this.st小文字位置[i].pt.X, 556, 12, 16 );
553- // if (ch == '.')
554- // {
555- // rectangle.Width -= 8;
556- // }
557- // if (this.txグラフバックパネル != null)
558- // {
559- // this.txグラフバックパネル.t2D描画(CDTXMania.app.Device, x, y, rectangle);
560- // }
561- // break;
562- // }
563- //}
501+ Bitmap canvas = new Bitmap( 280, 720 );
564502
565- //if( ch == '.' ) x += 6;
566- //else x += 12;
503+ Graphics g = Graphics.FromImage( canvas );
504+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
505+ int nMybestGaugeSize = (int)( 560.0f * (float)this.dbグラフ値自己ベスト / 100.0f );
506+ int nMybestGaugePosY = 600 - nMybestGaugeSize;
567507
568- //2016.01.30 kairera0467 ちょっと変更。
569- for( int i = 0; i < this.list文字位置.Count; i++ )
570- {
571- if( this.list文字位置[ i ].ch == ch && this.list文字位置[ i ].strMode == "recpanel_number" )
572- {
573- Rectangle rectangle = new Rectangle( this.list文字位置[ i ].rect.X, this.list文字位置[ i ].rect.Y, this.list文字位置[ i ].rect.Width, this.list文字位置[ i ].rect.Height );
574- if( this.txグラフバックパネル != null )
575- {
576- this.txグラフバックパネル.t2D描画( CDTXMania.app.Device, x, y, rectangle );
577- }
578- break;
579- }
580- }
508+ int nTargetGaugeSize = (int)( 560.0f * (float)this.dbグラフ値目標_表示 / 100.0f );
509+ int nTargetGaugePosY = 600 - nTargetGaugeSize;
581510
582- if( ch == '.' ) x += 6;
583- else x += 12;
584- }
585- }
586- private void t比較数字表示(int x, int y, string str)
587- {
588- foreach (char ch in str)
589- {
590- //for (int i = 0; i < this.st比較数字位置.Length; i++)
591- //{
592- // if (this.st比較数字位置[i].ch == ch)
593- // {
594- // Rectangle rectangle = new Rectangle( 342 + this.st比較数字位置[i].pt.X, 578, 10, 14 );
595- // if (this.txグラフバックパネル != null)
596- // {
597- // this.txグラフバックパネル.t2D描画(CDTXMania.app.Device, x, y, rectangle);
598- // }
599- // break;
600- // }
601- //}
511+ Point[] posMybest = {
512+ new Point( 3, nMybestGaugePosY ),
513+ new Point( 75, nMybestGaugePosY ),
514+ new Point( 94, nBoardPosA + 31 ),
515+ new Point( 102, nBoardPosA + 31 )
516+ };
602517
603- //2016.01.30 kairera0467 ちょっと変更。
604- for( int i = 0; i < this.list文字位置.Count; i++ )
518+ Point[] posTarget = {
519+ new Point( 3, nTargetGaugePosY ),
520+ new Point( 75, nTargetGaugePosY ),
521+ new Point( 94, nBoardPosB + 59 ),
522+ new Point( 102, nBoardPosB + 59 )
523+ };
524+
525+ if( this.nGraphUsePart == 2 )
605526 {
606- if( this.list文字位置[ i ].ch == ch && this.list文字位置[ i ].strMode == "target_number" )
607- {
608- Rectangle rectangle = new Rectangle( this.list文字位置[ i ].rect.X, this.list文字位置[ i ].rect.Y, this.list文字位置[ i ].rect.Width, this.list文字位置[ i ].rect.Height );
609- if( this.txグラフバックパネル != null )
610- {
611- this.txグラフバックパネル.t2D描画( CDTXMania.app.Device, x, y, rectangle );
612- }
613- break;
614- }
527+ posMybest = new Point[]{
528+ new Point( 271, nMybestGaugePosY ),
529+ new Point( 206, nMybestGaugePosY ),
530+ new Point( 187, nBoardPosA + 31 ),
531+ new Point( 178, nBoardPosA + 31 )
532+ };
533+
534+ posTarget = new Point[]{
535+ new Point( 271, nTargetGaugePosY ),
536+ new Point( 206, nTargetGaugePosY ),
537+ new Point( 187, nBoardPosB + 59 ),
538+ new Point( 178, nBoardPosB + 59 )
539+ };
615540 }
616541
617- x += 9;
542+ Pen penMybest = new Pen( Color.Pink, 2 );
543+ g.DrawLines( penMybest, posMybest );
618544
619- }
620- }
621- private void t座標スクリプトを読み込む()
622- {
623- string strRawScriptFile;
624-
625- //ファイルの存在チェック
626- if( File.Exists( CSkin.Path( @"Script\SkillMater.dtxs" ) ) )
627- {
628- //スクリプトを開く
629- StreamReader reader = new StreamReader( CSkin.Path( @"Script\SkillMater.dtxs" ), Encoding.GetEncoding( "Shift_JIS" ) );
630- strRawScriptFile = reader.ReadToEnd();
631-
632- strRawScriptFile = strRawScriptFile.Replace( Environment.NewLine, "\n" );
633- string[] delimiter = { "\n" };
634- string[] strSingleLine = strRawScriptFile.Split( delimiter, StringSplitOptions.RemoveEmptyEntries );
635-
636- for( int i = 0; i < strSingleLine.Length; i++ )
545+ if( CDTXMania.listTargetGhsotLag[ this.nGraphUsePart ] != null && CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ] != null )
637546 {
638- if( strSingleLine[ i ].StartsWith( "//" ) )
639- continue; //コメント行の場合は無視
547+ Pen penTarget = new Pen( Color.Orange, 2 );
548+ g.DrawLines( penTarget, posTarget );
549+ }
640550
641- //まずSplit
642- string[] arScriptLine = strSingleLine[ i ].Split( ',' );
551+ g.Dispose();
643552
644- if( ( arScriptLine.Length >= 7 && arScriptLine.Length <= 9 ) == false )
645- continue; //引数が7~9でなければ無視。
646- var st = new STスクリプト座標();
647-
648- if( arScriptLine.Length >= 7 )
649- {
650- st.strParam = arScriptLine[ 0 ];
651- st.nX = Convert.ToInt32( arScriptLine[ 1 ] );
652- st.nY = Convert.ToInt32( arScriptLine[ 2 ] );
653- st.rect.X = Convert.ToInt32( arScriptLine[ 3 ] );
654- st.rect.Y = Convert.ToInt32( arScriptLine[ 4 ] );
655- st.rect.Width = Convert.ToInt32( arScriptLine[ 5 ] );
656- st.rect.Height = Convert.ToInt32( arScriptLine[ 6 ] );
657- }
658- if( arScriptLine.Length == 8 )
659- {
660- st.b本体座標を加算する = Convert.ToBoolean( arScriptLine[ 7 ] == "0" ? false : true );
661- }
662- if( arScriptLine.Length == 9 )
663- {
664- st.str = arScriptLine[ 8 ];
665- }
666-
667- //本体座標を加算する場合はここで加算する。
668- if( st.b本体座標を加算する )
669- {
670- st.nX += this.n本体X;
671- }
672-
673- this.tパラメーターから座標の格納先を決定する( st.strParam, st );
674- }
553+ this.txグラフ値自己ベストライン = new CTexture( CDTXMania.app.Device, canvas, CDTXMania.TextureFormat, false );
675554 }
555+ if( this.txグラフ値自己ベストライン != null )
556+ this.txグラフ値自己ベストライン.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos );
676557 }
677- private void tパラメーターから座標の格納先を決定する( string strParam, STスクリプト座標 stScriptPosSet )
678- {
679- switch( strParam )
680- {
681- case "backpanel":
682- this.stグラフ背景 = stScriptPosSet;
683- break;
684- case "recpanel_cabtop":
685- break;
686- case "recpanel_mybest":
687- break;
688- case "recpanel_perfect":
689- break;
690- case "recpanel_great":
691- break;
692- case "recpanel_good":
693- break;
694- case "recpanel_poor":
695- break;
696- case "recpanel_miss":
697- break;
698- case "recpanel_number_pos":
699- break;
700- case "target_number_pos":
701- break;
702- case "targetname_mybest":
703- break;
704- case "targetname_auto":
705- break;
706- case "targetname_hiskill":
707- break;
708- case "targetname_hiscore":
709- break;
710- case "targetname_online":
711- break;
712- case "recpanel_number":
713- case "target_number":
714- this.t文字位置リストに追加する( stScriptPosSet );
715- break;
716- case "gauge_red":
717- this.stゲージ現在 = stScriptPosSet;
718- break;
719- case "gauge_mark":
720- this.stゲージ矢印 = stScriptPosSet;
721- break;
722- case "gauge_target_failed":
723- this.stゲージ比較_敗 = stScriptPosSet;
724- break;
725- case "gauge_target_clear":
726- this.stゲージ比較_勝 = stScriptPosSet;
727- break;
728- case "gaugeline_failed":
729- this.stゲージ基準線 = stScriptPosSet;
730- break;
731- case "gaugeline_clear":
732- this.stゲージ基準線達成 = stScriptPosSet;
733- break;
734-
735- }
736- }
737- private void t文字位置リストに追加する( STスクリプト座標 stScriptPosSet )
738- {
739- ST文字位置 stCharPos = new ST文字位置();
740- stCharPos.strMode = stScriptPosSet.strParam;
741- stCharPos.ch = stScriptPosSet.str[ 0 ];
742- stCharPos.pt.X = stScriptPosSet.rect.X;
743- stCharPos.pt.Y = stScriptPosSet.rect.Y;
744- stCharPos.rect = stScriptPosSet.rect;
745-
746- this.list文字位置.Add( stCharPos );
747- }
748- #endregion
749- }
558+ //-----------------
559+ #endregion
560+ }
750561 }
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏演奏情報.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏演奏情報.cs (revision 542)
@@ -79,7 +79,7 @@
7979
8080
8181 }
82- else if (CDTXMania.ConfigIni.nInfoType == 1 && !CDTXMania.ConfigIni.bGraph有効)
82+ else if (CDTXMania.ConfigIni.nInfoType == 1 && ( !CDTXMania.ConfigIni.bGraph有効.Drums && !CDTXMania.ConfigIni.bGraph有効.Guitar && !CDTXMania.ConfigIni.bGraph有効.Bass ) )
8383 {
8484
8585 y += 0x123;
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs (revision 542)
@@ -29,7 +29,7 @@
2929 base.list子Activities.Add( this.actDANGER = new CAct演奏DrumsDanger() );
3030 base.list子Activities.Add( this.actChipFireD = new CAct演奏DrumsチップファイアD() );
3131 base.list子Activities.Add( this.actGauge = new CAct演奏Drumsゲージ() );
32- base.list子Activities.Add( this.actGraph = new CAct演奏Drumsスキルメーター() ); // #24074 2011.01.23 add ikanick
32+ base.list子Activities.Add( this.actGraph = new CAct演奏スキルメーター() ); // #24074 2011.01.23 add ikanick
3333 base.list子Activities.Add( this.actJudgeString = new CAct演奏Drums判定文字列() );
3434 base.list子Activities.Add( this.actLaneFlushD = new CAct演奏DrumsレーンフラッシュD() );
3535 base.list子Activities.Add( this.actScore = new CAct演奏Drumsスコア() );
@@ -317,7 +317,7 @@
317317
318318 this.t進行描画・ステータスパネル();
319319
320- if (CDTXMania.ConfigIni.eNamePlate != Eタイプ.A || CDTXMania.ConfigIni.bGraph有効 || CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 != Eドラムコンボ文字の表示位置.RIGHT)
320+ if (CDTXMania.ConfigIni.eNamePlate != Eタイプ.A || CDTXMania.ConfigIni.bGraph有効.Drums || CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 != Eドラムコンボ文字の表示位置.RIGHT)
321321 this.t進行描画・コンボ();
322322
323323 this.t進行描画・ゲージ();
@@ -427,7 +427,6 @@
427427 public int nミス数;
428428 public int nパフェ数;
429429 private CAct演奏DrumsチップファイアD actChipFireD;
430- public CAct演奏Drumsスキルメーター actGraph; // #24074 2011.01.23 add ikanick
431430 public CAct演奏Drumsパッド actPad;
432431 public CAct演奏Drumsドラムセット actDrumSet;
433432 public bool bフィルイン中;
@@ -526,7 +525,13 @@
526525 this.nヒット数・Auto含まない.Drums.Great * 7 +
527526 this.actCombo.n現在のコンボ数.最高値.Drums * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Drums);
528527 }
529- //2016.01.03 kairera0467
528+ //2016.01.03 kairera0467
529+
530+ this.actGraph.n現在のAutoを含まない判定数_渡[ 0 ] = this.nヒット数・Auto含まない.Drums.Perfect;
531+ this.actGraph.n現在のAutoを含まない判定数_渡[ 1 ] = this.nヒット数・Auto含まない.Drums.Great;
532+ this.actGraph.n現在のAutoを含まない判定数_渡[ 2 ] = this.nヒット数・Auto含まない.Drums.Good;
533+ this.actGraph.n現在のAutoを含まない判定数_渡[ 3 ] = this.nヒット数・Auto含まない.Drums.Poor;
534+ this.actGraph.n現在のAutoを含まない判定数_渡[ 4 ] = this.nヒット数・Auto含まない.Drums.Miss;
530535 return eJudgeResult;
531536 }
532537
@@ -737,12 +742,11 @@
737742 }
738743 */
739744
740- private void t進行描画・グラフ()
745+ private void t進行描画・グラフ()
741746 {
742- if (CDTXMania.ConfigIni.bGraph有効)
747+ if( CDTXMania.ConfigIni.bGraph有効.Drums )
743748 {
744749 this.actGraph.On進行描画();
745- this.actGraph.db現在の判定数合計 = this.nヒット数・Auto含む.Drums.Perfect + this.nヒット数・Auto含む.Drums.Great + this.nヒット数・Auto含む.Drums.Good + this.nヒット数・Auto含む.Drums.Miss + this.nヒット数・Auto含む.Drums.Poor;
746750 }
747751 }
748752
@@ -3502,7 +3506,7 @@
35023506 }
35033507 if (val < 0) val = 0;
35043508 if (val > 100) val = 100;
3505- this.actGraph.dbグラフ値ゴースト_渡 = val;
3509+ this.actGraph.dbグラフ値目標_渡 = val;
35063510 }
35073511 return;
35083512 } // end of "if configIni.bDrums有効"
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs (revision 542)
@@ -656,6 +656,7 @@
656656 public CAct演奏スクロール速度 act譜面スクロール速度;
657657 public CAct演奏LivePoint共通 actLivePoint;
658658 public CAct演奏BPMバー共通 actBPMBar;
659+ protected CAct演奏スキルメーター actGraph;
659660 protected bool bPAUSE;
660661 protected STDGBVALUE<bool> b演奏にMIDI入力を使った;
661662 protected STDGBVALUE<bool> b演奏にキーボードを使った;
@@ -3300,7 +3301,7 @@
33003301 CDTXMania.ConfigIni.bBGA有効 = true;
33013302 for ( int i = 0; i < 3; i++ )
33023303 {
3303- CDTXMania.ConfigIni.bGraph有効 = false;
3304+ CDTXMania.ConfigIni.bGraph有効[ i ] = false;
33043305 CDTXMania.ConfigIni.bLeft[ i ] = false;
33053306 CDTXMania.ConfigIni.bLight[ i ] = false;
33063307 CDTXMania.ConfigIni.bReverse[ i ] = false;
@@ -3575,22 +3576,63 @@
35753576 }
35763577 #endregion
35773578 //if ( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )
3578- if ( ( !pChip.bHit ) && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )
3579- {
3580- int lo = ( inst == E楽器パート.GUITAR ) ? 0 : 5; // lane offset
3581- bool autoR = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtR : bIsAutoPlay.BsR;
3582- bool autoG = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtG : bIsAutoPlay.BsG;
3583- bool autoB = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtB : bIsAutoPlay.BsB;
3584- bool autoY = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtY : bIsAutoPlay.BsY;
3585- bool autoP = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtP : bIsAutoPlay.BsP;
3586- bool autoPick = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtPick : bIsAutoPlay.BsPick;
3587- bool pushingR = CDTXMania.Pad.b押されている( inst, Eパッド.R );
3588- bool pushingG = CDTXMania.Pad.b押されている( inst, Eパッド.G );
3589- bool pushingB = CDTXMania.Pad.b押されている( inst, Eパッド.B );
3590- bool pushingY = CDTXMania.Pad.b押されている( inst, Eパッド.Y );
3591- bool pushingP = CDTXMania.Pad.b押されている( inst, Eパッド.P );
3579+ //if ( ( !pChip.bHit ) && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )
3580+
3581+ // #35411 2015.08.20 chnmr0 modified
3582+ // 従来のAUTO処理に加えてプレーヤーゴーストの再生機能を追加
3583+ bool autoPlayCondition = (!pChip.bHit) && (pChip.nバーからの距離dot[instIndex] < 0);
3584+ if ( autoPlayCondition )
3585+ {
3586+ //cInvisibleChip.StartSemiInvisible( inst );
3587+ }
35923588
3593- #region [ Chip Fire effects ]
3589+ bool autoPick = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtPick : bIsAutoPlay.BsPick;
3590+ autoPlayCondition = !pChip.bHit && autoPick;
3591+ long ghostLag = 0;
3592+ bool bUsePerfectGhost = true;
3593+
3594+ if ( (pChip.e楽器パート == E楽器パート.GUITAR || pChip.e楽器パート == E楽器パート.BASS ) &&
3595+ CDTXMania.ConfigIni.eAutoGhost[(int)(pChip.e楽器パート)] != EAutoGhostData.PERFECT &&
3596+ CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート] != null &&
3597+ 0 <= pChip.n楽器パートでの出現順 &&
3598+ pChip.n楽器パートでの出現順 < CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート].Count)
3599+ {
3600+ // #35411 (mod) Ghost data が有効なので 従来のAUTOではなくゴーストのラグを利用
3601+ // 発生時刻と現在時刻からこのタイミングで演奏するかどうかを決定
3602+ ghostLag = CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート][pChip.n楽器パートでの出現順];
3603+ bool resetCombo = ghostLag > 255;
3604+ ghostLag = (ghostLag & 255) - 128;
3605+ ghostLag -= (pChip.e楽器パート == E楽器パート.GUITAR ? nInputAdjustTimeMs.Guitar : nInputAdjustTimeMs.Bass);
3606+ autoPlayCondition &= (pChip.n発声時刻ms + ghostLag <= CSound管理.rc演奏用タイマ.n現在時刻ms);
3607+ if (resetCombo && autoPlayCondition )
3608+ {
3609+ this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート] = 0;
3610+ }
3611+ bUsePerfectGhost = false;
3612+ }
3613+
3614+ if( bUsePerfectGhost )
3615+ {
3616+ // 従来のAUTOを使用する場合
3617+ autoPlayCondition &= ( pChip.nバーからの距離dot[ instIndex ] < 0 );
3618+ }
3619+
3620+ if ( autoPlayCondition )
3621+ {
3622+ int lo = (inst == E楽器パート.GUITAR) ? 0 : 5; // lane offset
3623+ bool autoR = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtR : bIsAutoPlay.BsR;
3624+ bool autoG = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtG : bIsAutoPlay.BsG;
3625+ bool autoB = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtB : bIsAutoPlay.BsB;
3626+ bool autoY = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtY : bIsAutoPlay.BsY;
3627+ bool autoP = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtP : bIsAutoPlay.BsP;
3628+ bool pushingR = CDTXMania.Pad.b押されている(inst, Eパッド.R);
3629+ bool pushingG = CDTXMania.Pad.b押されている(inst, Eパッド.G);
3630+ bool pushingB = CDTXMania.Pad.b押されている(inst, Eパッド.B);
3631+ bool pushingY = CDTXMania.Pad.b押されている(inst, Eパッド.Y);
3632+ bool pushingP = CDTXMania.Pad.b押されている(inst, Eパッド.P);
3633+
3634+ #region [ Chip Fire effects (auto時用) ]
3635+ // autoPickでない時の処理は、 t入力処理・ギターベース(E楽器パート) で行う
35943636 bool bSuccessOPEN = bChipIsO && ( autoR || !pushingR ) && ( autoG || !pushingG ) && ( autoB || !pushingB ) && ( autoY || !pushingY ) && ( autoP || !pushingP );
35953637 if ( ( bChipHasR && ( autoR || pushingR ) && autoPick ) || bSuccessOPEN && autoPick )
35963638 {
@@ -3613,6 +3655,42 @@
36133655 this.actChipFireGB.Start( 4 + lo );
36143656 }
36153657 #endregion
3658+ #region [ autopick ]
3659+ {
3660+ bool bMiss = true;
3661+ if ( bChipHasR == autoR && bChipHasG == autoG && bChipHasB == autoB ) // autoレーンとチップレーン一致時はOK
3662+ { // この条件を加えないと、同時に非autoレーンを押下している時にNGとなってしまう。
3663+ bMiss = false;
3664+ }
3665+ else if ( ( autoR || ( bChipHasR == pushingR ) ) && ( autoG || ( bChipHasG == pushingG ) ) && ( autoB || ( bChipHasB == pushingB ) ) )
3666+ // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
3667+ {
3668+ bMiss = false;
3669+ }
3670+ else if ( ( ( bChipIsO == true ) && ( !pushingR | autoR ) && ( !pushingG | autoG ) && ( !pushingB | autoB ) ) ) // OPEN時
3671+ {
3672+ bMiss = false;
3673+ }
3674+ pChip.bHit = true;
3675+ this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, inst, dTX.nモニタを考慮した音量( inst ), false, bMiss );
3676+ this.r次にくるギターChip = null;
3677+ if ( !bMiss )
3678+ {
3679+ this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);
3680+ }
3681+ else
3682+ {
3683+ pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入
3684+ this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip, false);
3685+ }
3686+ int chWailingChip = ( inst == E楽器パート.GUITAR ) ? 0x28 : 0xA8;
3687+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip(pChip.n発声時刻ms + ghostLag, chWailingChip, this.nInputAdjustTimeMs[instIndex], 140);
3688+ if ( item != null && !bMiss )
3689+ {
3690+ this.queWailing[ instIndex ].Enqueue( item );
3691+ }
3692+ }
3693+ #endregion
36163694 if ( autoPick )
36173695 {
36183696 bool bMiss = true;
@@ -3630,25 +3708,130 @@
36303708 bMiss = false;
36313709 }
36323710 pChip.bHit = true;
3633- this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量( inst ), false, bMiss );
3711+ this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, inst, dTX.nモニタを考慮した音量( inst ), false, bMiss );
36343712 this.r次にくるギターChip = null;
36353713 if ( !bMiss )
36363714 {
3637- this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
3715+ this.tチップのヒット処理( pChip.n発声時刻ms + ghostLag, pChip );
36383716 }
36393717 else
36403718 {
36413719 pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入
3642- this.tチップのヒット処理( pChip.n発声時刻ms, pChip, false );
3720+ this.tチップのヒット処理( pChip.n発声時刻ms + ghostLag, pChip, false );
36433721 }
36443722 int chWailingChip = ( inst == E楽器パート.GUITAR ) ? 0x28 : 0xA8;
3645- CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( pChip.n発声時刻ms, chWailingChip, this.nInputAdjustTimeMs[ instIndex ], 140 );
3723+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( pChip.n発声時刻ms + ghostLag, chWailingChip, this.nInputAdjustTimeMs[ instIndex ], 140 );
36463724 if ( item != null && !bMiss )
36473725 {
36483726 this.queWailing[ instIndex ].Enqueue( item );
36493727 }
36503728 }
3729+ // #35411 modify end
36513730 }
3731+
3732+ if( pChip.e楽器パート == E楽器パート.GUITAR && CDTXMania.ConfigIni.bGraph有効.Guitar )
3733+ {
3734+ #region[ ギターゴースト ]
3735+ if (CDTXMania.ConfigIni.eTargetGhost.Guitar != ETargetGhostData.NONE &&
3736+ CDTXMania.listTargetGhsotLag.Guitar != null)
3737+ {
3738+ double val = 0;
3739+ if (CDTXMania.ConfigIni.eTargetGhost.Guitar == ETargetGhostData.ONLINE)
3740+ {
3741+ if (CDTXMania.DTX.n可視チップ数.Guitar > 0)
3742+ {
3743+ // Online Stats の計算式
3744+ val = 100 *
3745+ (this.nヒット数_TargetGhost.Guitar.Perfect * 17 +
3746+ this.nヒット数_TargetGhost.Guitar.Great * 7 +
3747+ this.n最大コンボ数_TargetGhost.Guitar * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Guitar);
3748+ }
3749+ }
3750+ else
3751+ {
3752+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
3753+ {
3754+ val = CScoreIni.t旧演奏型スキルを計算して返す(
3755+ CDTXMania.DTX.n可視チップ数.Guitar,
3756+ this.nヒット数_TargetGhost.Guitar.Perfect,
3757+ this.nヒット数_TargetGhost.Guitar.Great,
3758+ this.nヒット数_TargetGhost.Guitar.Good,
3759+ this.nヒット数_TargetGhost.Guitar.Poor,
3760+ this.nヒット数_TargetGhost.Guitar.Miss,
3761+ E楽器パート.GUITAR, new STAUTOPLAY());
3762+ }
3763+ else
3764+ {
3765+ val = CScoreIni.t演奏型スキルを計算して返す(
3766+ CDTXMania.DTX.n可視チップ数.Guitar,
3767+ this.nヒット数_TargetGhost.Guitar.Perfect,
3768+ this.nヒット数_TargetGhost.Guitar.Great,
3769+ this.nヒット数_TargetGhost.Guitar.Good,
3770+ this.nヒット数_TargetGhost.Guitar.Poor,
3771+ this.nヒット数_TargetGhost.Guitar.Miss,
3772+ this.n最大コンボ数_TargetGhost.Guitar,
3773+ E楽器パート.GUITAR, new STAUTOPLAY());
3774+ }
3775+
3776+ }
3777+ if (val < 0) val = 0;
3778+ if (val > 100) val = 100;
3779+ this.actGraph.dbグラフ値目標_渡 = val;
3780+ }
3781+ #endregion
3782+ }
3783+ else if( pChip.e楽器パート == E楽器パート.BASS && CDTXMania.ConfigIni.bGraph有効.Bass )
3784+ {
3785+ #region[ ベースゴースト ]
3786+ if (CDTXMania.ConfigIni.eTargetGhost.Bass != ETargetGhostData.NONE &&
3787+ CDTXMania.listTargetGhsotLag.Bass != null)
3788+ {
3789+ double val = 0;
3790+ if (CDTXMania.ConfigIni.eTargetGhost.Bass == ETargetGhostData.ONLINE)
3791+ {
3792+ if (CDTXMania.DTX.n可視チップ数.Bass > 0)
3793+ {
3794+ // Online Stats の計算式
3795+ val = 100 *
3796+ (this.nヒット数_TargetGhost.Bass.Perfect * 17 +
3797+ this.nヒット数_TargetGhost.Bass.Great * 7 +
3798+ this.n最大コンボ数_TargetGhost.Bass * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Bass);
3799+ }
3800+ }
3801+ else
3802+ {
3803+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
3804+ {
3805+ val = CScoreIni.t旧演奏型スキルを計算して返す(
3806+ CDTXMania.DTX.n可視チップ数.Bass,
3807+ this.nヒット数_TargetGhost.Bass.Perfect,
3808+ this.nヒット数_TargetGhost.Bass.Great,
3809+ this.nヒット数_TargetGhost.Bass.Good,
3810+ this.nヒット数_TargetGhost.Bass.Poor,
3811+ this.nヒット数_TargetGhost.Bass.Miss,
3812+ E楽器パート.BASS, new STAUTOPLAY());
3813+ }
3814+ else
3815+ {
3816+ val = CScoreIni.t演奏型スキルを計算して返す(
3817+ CDTXMania.DTX.n可視チップ数.Bass,
3818+ this.nヒット数_TargetGhost.Bass.Perfect,
3819+ this.nヒット数_TargetGhost.Bass.Great,
3820+ this.nヒット数_TargetGhost.Bass.Good,
3821+ this.nヒット数_TargetGhost.Bass.Poor,
3822+ this.nヒット数_TargetGhost.Bass.Miss,
3823+ this.n最大コンボ数_TargetGhost.Bass,
3824+ E楽器パート.BASS, new STAUTOPLAY());
3825+ }
3826+
3827+ }
3828+ if (val < 0) val = 0;
3829+ if (val > 100) val = 100;
3830+ this.actGraph.dbグラフ値目標_渡 = val;
3831+ }
3832+ #endregion
3833+ }
3834+
36523835 return;
36533836 } // end of "if configIni.bGuitar有効"
36543837 if ( !pChip.bHit && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) ) // Guitar/Bass無効の場合は、自動演奏する
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏AVI.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏AVI.cs (revision 542)
@@ -419,21 +419,21 @@
419419 #region[ 演奏パートやスキルメーターの有無に応じて、読み込むクリップパネル画像を変更する ]
420420 if( CDTXMania.ConfigIni.bGuitar有効 )
421421 this.txクリップパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_ClipPanelC.png" ) );
422- else if( CDTXMania.ConfigIni.bGraph有効 && CDTXMania.ConfigIni.bDrums有効 )
422+ else if( CDTXMania.ConfigIni.bGraph有効.Drums && CDTXMania.ConfigIni.bDrums有効 )
423423 this.txクリップパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_ClipPanelB.png" ) );
424424 else
425425 this.txクリップパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_ClipPanel.png" ) );
426426 #endregion
427- this.txArフィルインエフェクト = new CTexture[ 31 ];
428- for( int ar = 0; ar < 31; ar++ )
429- {
430- this.txArフィルインエフェクト[ ar ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\StageEffect\7_StageEffect_" + ar.ToString() + ".png" ) );
431- if( this.txArフィルインエフェクト[ ar ] == null )
432- continue; //テクスチャが欠けていた場合は、事故防止のためにループを1つスキップする。
427+ //this.txArフィルインエフェクト = new CTexture[ 31 ];
428+ //for( int ar = 0; ar < 31; ar++ )
429+ //{
430+ // this.txArフィルインエフェクト[ ar ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\StageEffect\7_StageEffect_" + ar.ToString() + ".png" ) );
431+ // if( this.txArフィルインエフェクト[ ar ] == null )
432+ // continue; //テクスチャが欠けていた場合は、事故防止のためにループを1つスキップする。
433433
434- this.txArフィルインエフェクト[ ar ].b加算合成 = true;
435- this.txArフィルインエフェクト[ ar ].vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
436- }
434+ // this.txArフィルインエフェクト[ ar ].b加算合成 = true;
435+ // this.txArフィルインエフェクト[ ar ].vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
436+ //}
437437 for( int i = 0; i < 1; i++ )
438438 {
439439 this.stフィルイン[ i ] = new STフィルイン();
@@ -469,10 +469,10 @@
469469 CDTXMania.tテクスチャの解放( ref this.txクリップパネル );
470470 CDTXMania.tテクスチャの解放( ref this.tx黒幕 );
471471
472- for( int ar = 0; ar < 31; ar++ )
473- {
474- CDTXMania.tテクスチャの解放( ref this.txArフィルインエフェクト[ ar ] );
475- }
472+ //for( int ar = 0; ar < 31; ar++ )
473+ //{
474+ // CDTXMania.tテクスチャの解放( ref this.txArフィルインエフェクト[ ar ] );
475+ //}
476476 base.OnManagedリソースの解放();
477477 }
478478 }
@@ -733,20 +733,41 @@
733733 {
734734 for( int i = 0; i < 1; i++ )
735735 {
736- if( this.stフィルイン[i].b使用中 )
736+ if (this.stフィルイン[ i ].b使用中)
737737 {
738- int numf = this.stフィルイン[i].ct進行.n現在の値;
739- this.stフィルイン[i].ct進行.t進行();
740- if ( this.stフィルイン[i].ct進行.b終了値に達した )
738+ int numf = this.stフィルイン[ i ].ct進行.n現在の値;
739+ this.stフィルイン[ i ].ct進行.t進行();
740+ if( this.stフィルイン[ i ].ct進行.b終了値に達した )
741741 {
742- this.stフィルイン[i].ct進行.t停止();
743- this.stフィルイン[i].b使用中 = false;
742+ this.stフィルイン[ i ].ct進行.t停止();
743+ this.stフィルイン[ i ].b使用中 = false;
744744 }
745- if( CDTXMania.ConfigIni.bDrums有効 )
745+ //if ( this.txフィルインエフェクト != null )
746+ CStage演奏ドラム画面 stageDrum = CDTXMania.stage演奏ドラム画面;
747+ //CStage演奏ギター画面 stageGuitar = CDTXMania.stage演奏ギター画面;
748+
749+ //if( ( CDTXMania.ConfigIni.bDrums有効 ? stageDrum.txボーナスエフェクト : stageGuitar.txボーナスエフェクト ) != null )
746750 {
747- if( this.txArフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ] != null )
748- this.txArフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ].t2D描画( CDTXMania.app.Device, 0, 0 );
751+ //this.txフィルインエフェクト.vc拡大縮小倍率.X = 2.0f;
752+ //this.txフィルインエフェクト.vc拡大縮小倍率.Y = 2.0f;
753+ //this.txフィルインエフェクト.b加算合成 = true;
754+ //this.txフィルインエフェクト.t2D描画(CDTXMania.app.Device, 0, -2, new Rectangle(0, 0 + (360 * numf), 640, 360));
755+ if( CDTXMania.ConfigIni.bDrums有効 )
756+ {
757+ stageDrum.txボーナスエフェクト.vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
758+ stageDrum.txボーナスエフェクト.b加算合成 = true;
759+ stageDrum.txボーナスエフェクト.t2D描画( CDTXMania.app.Device, 0, -2, new Rectangle(0, 0 + ( 360 * numf ), 640, 360 )) ;
760+ try
761+ {
762+ //if( this.txフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ] != null )
763+ // this.txフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ].t2D描画( CDTXMania.app.Device, 0, 0 );
764+ }
765+ catch( Exception ex )
766+ {
767+ }
768+ }
749769 }
770+
750771 }
751772 }
752773 }
@@ -857,7 +878,7 @@
857878
858879 //コンボ、ネームプレート
859880 //グラフ無効&ネームプレートA,C
860- if (CDTXMania.ConfigIni.bGraph有効 == false && CDTXMania.ConfigIni.eNamePlate == Eタイプ.A && CDTXMania.ConfigIni.bドラムコンボ文字の表示 == true )
881+ if (CDTXMania.ConfigIni.bGraph有効.Drums == false && CDTXMania.ConfigIni.eNamePlate == Eタイプ.A && CDTXMania.ConfigIni.bドラムコンボ文字の表示 == true )
861882 {
862883 CDTXMania.stage演奏ドラム画面.actCombo.On進行描画();
863884 }
@@ -870,7 +891,7 @@
870891
871892 if( CDTXMania.ConfigIni.bDrums有効 )
872893 {
873- if( CDTXMania.ConfigIni.bGraph有効 )
894+ if( CDTXMania.ConfigIni.bGraph有効.Drums )
874895 {
875896 #region[ スキルメーター有効 ]
876897 this.n本体X = 2;
@@ -966,9 +987,9 @@
966987 this.n本体Y = 50;
967988 int nグラフX = 267;
968989
969- if( CDTXMania.ConfigIni.bGraph有効 && !CDTXMania.DTX.bチップがある.Bass )
990+ if( CDTXMania.ConfigIni.bGraph有効.Bass && !CDTXMania.DTX.bチップがある.Bass )
970991 this.n本体X = this.n本体X + nグラフX;
971- if( CDTXMania.ConfigIni.bGraph有効 && !CDTXMania.DTX.bチップがある.Guitar )
992+ if( CDTXMania.ConfigIni.bGraph有効.Guitar && !CDTXMania.DTX.bチップがある.Guitar )
972993 this.n本体X = this.n本体X - nグラフX;
973994 #endregion
974995
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs (revision 542)
@@ -27,7 +27,7 @@
2727 base.list子Activities.Add( this.actDANGER = new CAct演奏GuitarDanger() );
2828 base.list子Activities.Add( this.actAVI = new CAct演奏AVI() );
2929 base.list子Activities.Add( this.actBGA = new CAct演奏BGA() );
30- base.list子Activities.Add( this.actGraph = new CAct演奏Guitarスキルメーター() );
30+ base.list子Activities.Add( this.actGraph = new CAct演奏スキルメーター() );
3131 base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );
3232 base.list子Activities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() );
3333 base.list子Activities.Add( this.actStatusPanels = new CAct演奏Guitarステータスパネル() );
@@ -74,22 +74,28 @@
7474 public override void On活性化()
7575 {
7676 this.ct登場用 = new CCounter(0, 12, 16, CDTXMania.Timer);
77+ int nGraphUsePart = CDTXMania.ConfigIni.bGraph有効.Guitar ? 1 : 2;
7778 dtLastQueueOperation = DateTime.MinValue;
78- if (CDTXMania.bコンパクトモード)
79+ if( CDTXMania.bコンパクトモード )
7980 {
8081 var score = new Cスコア();
8182 CDTXMania.Songs管理.tScoreIniを読み込んで譜面情報を設定する(CDTXMania.strコンパクトモードファイル + ".score.ini", ref score);
82- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
83- this.actGraph.dbグラフ値目標G_渡 = score.譜面情報.最大スキル[1];
84- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
85- this.actGraph.dbグラフ値目標B_渡 = score.譜面情報.最大スキル[2];
83+ this.actGraph.dbグラフ値目標_渡 = score.譜面情報.最大スキル[ nGraphUsePart ];
8684 }
8785 else
8886 {
89- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
90- this.actGraph.dbグラフ値目標G_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[1]; // #24074 2011.01.23 add ikanick
91- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
92- this.actGraph.dbグラフ値目標B_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[2]; // #24074 2011.01.23 add ikanick
87+ this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ nGraphUsePart ]; // #24074 2011.01.23 add ikanick
88+ //this.actGraph.dbグラフ値自己ベスト = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ nGraphUsePart ];
89+
90+ // #35411 2015.08.21 chnmr0 add
91+ // ゴースト利用可のなとき、0で初期化
92+ if (CDTXMania.ConfigIni.eTargetGhost[ nGraphUsePart ] != ETargetGhostData.NONE)
93+ {
94+ if (CDTXMania.listTargetGhsotLag[ nGraphUsePart ] != null)
95+ {
96+ this.actGraph.dbグラフ値目標_渡 = 0;
97+ }
98+ }
9399 }
94100 base.On活性化();
95101 }
@@ -186,7 +192,7 @@
186192
187193 this.t進行描画・DANGER();
188194
189- //this.t進行描画・グラフ();
195+ this.t進行描画・グラフ();
190196
191197 this.t進行描画・WailingBonus();
192198 this.t進行描画・譜面スクロール速度();
@@ -305,7 +311,7 @@
305311 #region [ private ]
306312 //-----------------
307313 private CTexture txレーン;
308- public CAct演奏Guitarスキルメーター actGraph;
314+ public CAct演奏スキルメーター actGraph;
309315 public bool bサビ区間;
310316 public double UnitTime;
311317 public CAct演奏Guitarスピーカー actSpeaker;
@@ -321,19 +327,53 @@
321327 protected override E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip, bool bCorrectLane )
322328 {
323329 E判定 eJudgeResult = tチップのヒット処理( nHitTime, pChip, E楽器パート.GUITAR, bCorrectLane );
324- if (CDTXMania.ConfigIni.nSkillMode == 0)
330+ if( pChip.e楽器パート == E楽器パート.GUITAR && CDTXMania.ConfigIni.bGraph有効.Guitar )
325331 {
326- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
327- this.actGraph.dbグラフ値現在G_渡 = CScoreIni.t旧演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, E楽器パート.GUITAR, bIsAutoPlay);
328- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
329- this.actGraph.dbグラフ値現在B_渡 = CScoreIni.t旧演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, E楽器パート.BASS, bIsAutoPlay);
332+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
333+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t旧演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, E楽器パート.GUITAR, bIsAutoPlay );
334+ else
335+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, this.actCombo.n現在のコンボ数.最高値.Guitar, E楽器パート.GUITAR, bIsAutoPlay );
336+
337+ if( CDTXMania.listTargetGhsotLag.Guitar != null &&
338+ CDTXMania.ConfigIni.eTargetGhost.Guitar == ETargetGhostData.ONLINE &&
339+ CDTXMania.DTX.n可視チップ数.Guitar > 0 )
340+ {
341+
342+ this.actGraph.dbグラフ値現在_渡 = 100 *
343+ (this.nヒット数・Auto含まない.Guitar.Perfect * 17 +
344+ this.nヒット数・Auto含まない.Guitar.Great * 7 +
345+ this.actCombo.n現在のコンボ数.最高値.Guitar * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Guitar );
346+ }
347+
348+ this.actGraph.n現在のAutoを含まない判定数_渡[ 0 ] = this.nヒット数・Auto含まない.Guitar.Perfect;
349+ this.actGraph.n現在のAutoを含まない判定数_渡[ 1 ] = this.nヒット数・Auto含まない.Guitar.Great;
350+ this.actGraph.n現在のAutoを含まない判定数_渡[ 2 ] = this.nヒット数・Auto含まない.Guitar.Good;
351+ this.actGraph.n現在のAutoを含まない判定数_渡[ 3 ] = this.nヒット数・Auto含まない.Guitar.Poor;
352+ this.actGraph.n現在のAutoを含まない判定数_渡[ 4 ] = this.nヒット数・Auto含まない.Guitar.Miss;
330353 }
331- else if (CDTXMania.ConfigIni.nSkillMode == 1)
354+ else if( pChip.e楽器パート == E楽器パート.BASS && CDTXMania.ConfigIni.bGraph有効.Bass )
332355 {
333- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
334- this.actGraph.dbグラフ値現在G_渡 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, this.actCombo.n現在のコンボ数.最高値.Guitar, E楽器パート.GUITAR, bIsAutoPlay);
335- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
336- this.actGraph.dbグラフ値現在B_渡 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, this.actCombo.n現在のコンボ数.最高値.Bass, E楽器パート.BASS, bIsAutoPlay);
356+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
357+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t旧演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, E楽器パート.BASS, bIsAutoPlay );
358+ else
359+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, this.actCombo.n現在のコンボ数.最高値.Bass, E楽器パート.BASS, bIsAutoPlay );
360+
361+ if( CDTXMania.listTargetGhsotLag.Bass != null &&
362+ CDTXMania.ConfigIni.eTargetGhost.Bass == ETargetGhostData.ONLINE &&
363+ CDTXMania.DTX.n可視チップ数.Bass > 0 )
364+ {
365+
366+ this.actGraph.dbグラフ値現在_渡 = 100 *
367+ (this.nヒット数・Auto含まない.Bass.Perfect * 17 +
368+ this.nヒット数・Auto含まない.Bass.Great * 7 +
369+ this.actCombo.n現在のコンボ数.最高値.Bass * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Bass );
370+ }
371+
372+ this.actGraph.n現在のAutoを含まない判定数_渡[ 0 ] = this.nヒット数・Auto含まない.Bass.Perfect;
373+ this.actGraph.n現在のAutoを含まない判定数_渡[ 1 ] = this.nヒット数・Auto含まない.Bass.Great;
374+ this.actGraph.n現在のAutoを含まない判定数_渡[ 2 ] = this.nヒット数・Auto含まない.Bass.Good;
375+ this.actGraph.n現在のAutoを含まない判定数_渡[ 3 ] = this.nヒット数・Auto含まない.Bass.Poor;
376+ this.actGraph.n現在のAutoを含まない判定数_渡[ 4 ] = this.nヒット数・Auto含まない.Bass.Miss;
337377 }
338378 return eJudgeResult;
339379 }
@@ -363,16 +403,10 @@
363403 }
364404 private void t進行描画・グラフ()
365405 {
366- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
367- {
406+ if ( !CDTXMania.ConfigIni.bストイックモード && ( CDTXMania.ConfigIni.bGraph有効.Guitar || CDTXMania.ConfigIni.bGraph有効.Bass ) )
407+ {
368408 this.actGraph.On進行描画();
369- this.actGraph.db現在の判定数合計 = this.nヒット数・Auto含む.Guitar.Perfect + this.nヒット数・Auto含む.Guitar.Great + this.nヒット数・Auto含む.Guitar.Good + this.nヒット数・Auto含む.Guitar.Miss + this.nヒット数・Auto含む.Guitar.Poor;
370409 }
371- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
372- {
373- this.actGraph.On進行描画();
374- this.actGraph.db現在の判定数合計 = this.nヒット数・Auto含む.Bass.Perfect + this.nヒット数・Auto含む.Bass.Great + this.nヒット数・Auto含む.Bass.Good + this.nヒット数・Auto含む.Bass.Miss + this.nヒット数・Auto含む.Bass.Poor;
375- }
376410 }
377411 protected override void t進行描画・Wailing枠()
378412 {
--- trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CAct演奏Guitarステータスパネル.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CAct演奏Guitarステータスパネル.cs (revision 542)
@@ -17,7 +17,10 @@
1717 this.strPlayerName = new string[2];
1818
1919 #region [ 本体位置 ]
20-
20+ //n本体X[ 0 ] 曲名パネルのX座標
21+ //n本体X[ 1 ] ギター側のY座標
22+ //n本体X[ 2 ] ベース側のX座標
23+ //
2124 if (CDTXMania.ConfigIni.eNamePlate == Eタイプ.A)
2225 {
2326 this.n本体X[0] = 515;
@@ -45,8 +48,8 @@
4548 this.nグラフNX = 267;
4649 }
4750
48- //if (CDTXMania.ConfigIni.bGraph有効)
49- if(false)
51+ if (CDTXMania.ConfigIni.bGraph有効.Guitar || CDTXMania.ConfigIni.bGraph有効.Bass)
52+ //if(false)
5053 {
5154 if (!CDTXMania.DTX.bチップがある.Bass)
5255 {
@@ -551,8 +554,10 @@
551554 {
552555 if( !base.b活性化してない )
553556 {
554- if ( CDTXMania.ConfigIni.bShowMusicInfo )
557+ if( CDTXMania.ConfigIni.bShowMusicInfo )
558+ {
555559 this.tx曲名パネル.t2D描画(CDTXMania.app.Device, this.n本体X[0], this.n本体NY);
560+ }
556561
557562 if (CDTXMania.ConfigIni.eNamePlate == Eタイプ.A)
558563 {
--- trunk/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 541)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 542)
@@ -288,6 +288,7 @@
288288 {
289289 CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();
290290 CDTXMania.listTargetGhostScoreData[ instIndex ] = new CScoreIni.C演奏記録();
291+ this.stGhostLag[instIndex] = new List<STGhostLag>();
291292 ReadGhost(filename, CDTXMania.listTargetGhsotLag[instIndex]);
292293 }
293294 else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )
@@ -782,9 +783,92 @@
782783 if (chip.e楽器パート != E楽器パート.UNKNOWN)
783784 {
784785 chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;
786+ if( CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ] != null )
787+ {
788+ var lag = new STGhostLag();
789+ lag.index = chip.n楽器パートでの出現順;
790+ lag.nJudgeTime = chip.n発声時刻ms + CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
791+ lag.nLagTime = CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
792+
793+ this.stGhostLag[ (int)chip.e楽器パート ].Add( lag );
794+ }
785795 }
786796 }
797+
798+ //演奏記録をゴーストから逆生成
799+ for( int i = 0; i < 3; i++ )
800+ {
801+ int nNowCombo = 0;
802+ int nMaxCombo = 0;
803+ CDTXMania.listTargetGhostScoreData[ i ] = new CScoreIni.C演奏記録();
804+ if( this.stGhostLag[ i ] == null )
805+ continue;
806+ for( int j = 0; j < this.stGhostLag[ i ].Count; j++ )
807+ {
808+ int ghostLag = 128;
809+ ghostLag = this.stGhostLag[ i ][ j ].nLagTime;
810+ // 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)
811+ if (ghostLag > 255)
812+ {
813+ nNowCombo = 0;
814+ }
815+ ghostLag = (ghostLag & 255) - 128;
787816
817+ if( ghostLag <= 127 )
818+ {
819+ E判定 eJudge = this.e指定時刻からChipのJUDGEを返す(ghostLag, 0);
820+
821+ switch( eJudge )
822+ {
823+ case E判定.Perfect:
824+ CDTXMania.listTargetGhostScoreData[ i ].nPerfect数++;
825+ break;
826+ case E判定.Great:
827+ CDTXMania.listTargetGhostScoreData[ i ].nGreat数++;
828+ break;
829+ case E判定.Good:
830+ CDTXMania.listTargetGhostScoreData[ i ].nGood数++;
831+ break;
832+ case E判定.Poor:
833+ CDTXMania.listTargetGhostScoreData[ i ].nPoor数++;
834+ break;
835+ case E判定.Miss:
836+ case E判定.Bad:
837+ CDTXMania.listTargetGhostScoreData[ i ].nMiss数++;
838+ break;
839+ }
840+ switch( eJudge )
841+ {
842+ case E判定.Perfect:
843+ case E判定.Great:
844+ case E判定.Good:
845+ nNowCombo++;
846+ CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = Math.Max( nNowCombo, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 );
847+ break;
848+ case E判定.Poor:
849+ case E判定.Miss:
850+ case E判定.Bad:
851+ CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = Math.Max( nNowCombo, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 );
852+ nNowCombo = 0;
853+ break;
854+ }
855+ //Trace.WriteLine( eJudge.ToString() + " " + nNowCombo.ToString() + "Combo Max:" + nMaxCombo.ToString() + "Combo" );
856+ }
857+ }
858+ //CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = nMaxCombo;
859+ int nTotal = CDTXMania.DTX.n可視チップ数.Drums;
860+ if( i == 1 ) nTotal = CDTXMania.DTX.n可視チップ数.Guitar;
861+ else if( i == 2 ) nTotal = CDTXMania.DTX.n可視チップ数.Bass;
862+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
863+ {
864+ CDTXMania.listTargetGhostScoreData[ i ].db演奏型スキル値 = CScoreIni.t旧演奏型スキルを計算して返す( nTotal, CDTXMania.listTargetGhostScoreData[ i ].nPerfect数, CDTXMania.listTargetGhostScoreData[ i ].nGreat数, CDTXMania.listTargetGhostScoreData[ i ].nGood数, CDTXMania.listTargetGhostScoreData[ i ].nPoor数, CDTXMania.listTargetGhostScoreData[ i ].nMiss数, (E楽器パート)i, CDTXMania.listTargetGhostScoreData[ i ].bAutoPlay );
865+ }
866+ else
867+ {
868+ CDTXMania.listTargetGhostScoreData[ i ].db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( nTotal, CDTXMania.listTargetGhostScoreData[ i ].nPerfect数, CDTXMania.listTargetGhostScoreData[ i ].nGreat数, CDTXMania.listTargetGhostScoreData[ i ].nGood数, CDTXMania.listTargetGhostScoreData[ i ].nPoor数, CDTXMania.listTargetGhostScoreData[ i ].nMiss数, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数, (E楽器パート)i, CDTXMania.listTargetGhostScoreData[ i ].bAutoPlay );
869+ }
870+ }
871+
788872 span = (TimeSpan)(DateTime.Now - timeBeginLoad);
789873 Trace.TraceInformation("DTX読込所要時間: {0}", span.ToString());
790874
@@ -852,8 +936,8 @@
852936 CDTXMania.DTX.t旧仕様のドコドコチップを振り分ける(E楽器パート.DRUMS, CDTXMania.ConfigIni.bAssignToLBD.Drums);
853937 CDTXMania.DTX.tドコドコ仕様変更(E楽器パート.DRUMS, CDTXMania.ConfigIni.eDkdkType.Drums);
854938 CDTXMania.DTX.tドラムのランダム化(E楽器パート.DRUMS, CDTXMania.ConfigIni.eRandom.Drums);
939+ CDTXMania.DTX.tドラムの足ランダム化(E楽器パート.DRUMS, CDTXMania.ConfigIni.eRandomPedal.Drums);
855940 CDTXMania.DTX.t譜面仕様変更(E楽器パート.DRUMS, CDTXMania.ConfigIni.eNumOfLanes.Drums);
856- CDTXMania.DTX.tドラムの足ランダム化(E楽器パート.DRUMS, CDTXMania.ConfigIni.eRandomPedal.Drums);
857941 CDTXMania.DTX.tギターとベースのランダム化(E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar);
858942 CDTXMania.DTX.tギターとベースのランダム化(E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass);
859943
@@ -1130,6 +1214,23 @@
11301214 }
11311215 public int nIndex;
11321216 public STATUSPANEL[] stパネルマップ;
1217+
1218+
1219+ private STDGBVALUE<List<STGhostLag>> stGhostLag;
1220+
1221+ [StructLayout(LayoutKind.Sequential)]
1222+ private struct STGhostLag
1223+ {
1224+ public int index;
1225+ public int nJudgeTime;
1226+ public int nLagTime;
1227+ public STGhostLag( int index, int nJudgeTime, int nLagTime )
1228+ {
1229+ this.index = index;
1230+ this.nJudgeTime = nJudgeTime;
1231+ this.nLagTime = nLagTime;
1232+ }
1233+ }
11331234 //-----------------
11341235
11351236 private void ReadGhost( string filename, List<int> list ) // #35411 2015.08.19 chnmr0 add
@@ -1160,75 +1261,75 @@
11601261 }
11611262 }
11621263
1163- if( File.Exists( filename + ".score" ) )
1164- {
1165- using( FileStream fs = new FileStream( filename + ".score", FileMode.Open, FileAccess.Read ) )
1166- {
1167- using( StreamReader sr = new StreamReader( fs ) )
1168- {
1169- try
1170- {
1171- string strScoreDataFile = sr.ReadToEnd();
1264+ //if( File.Exists( filename + ".score" ) )
1265+ //{
1266+ // using( FileStream fs = new FileStream( filename + ".score", FileMode.Open, FileAccess.Read ) )
1267+ // {
1268+ // using( StreamReader sr = new StreamReader( fs ) )
1269+ // {
1270+ // try
1271+ // {
1272+ // string strScoreDataFile = sr.ReadToEnd();
11721273
1173- strScoreDataFile = strScoreDataFile.Replace( Environment.NewLine, "\n" );
1174- string[] delimiter = { "\n" };
1175- string[] strSingleLine = strScoreDataFile.Split( delimiter, StringSplitOptions.RemoveEmptyEntries );
1274+ // strScoreDataFile = strScoreDataFile.Replace( Environment.NewLine, "\n" );
1275+ // string[] delimiter = { "\n" };
1276+ // string[] strSingleLine = strScoreDataFile.Split( delimiter, StringSplitOptions.RemoveEmptyEntries );
11761277
1177- for( int i = 0; i < strSingleLine.Length; i++ )
1178- {
1179- string[] strA = strSingleLine[ i ].Split( '=' );
1180- if (strA.Length != 2)
1181- continue;
1278+ // for( int i = 0; i < strSingleLine.Length; i++ )
1279+ // {
1280+ // string[] strA = strSingleLine[ i ].Split( '=' );
1281+ // if (strA.Length != 2)
1282+ // continue;
11821283
1183- switch( strA[ 0 ] )
1184- {
1185- case "Score":
1186- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nスコア = Convert.ToInt32( strA[ 1 ] );
1187- continue;
1188- case "PlaySkill":
1189- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].db演奏型スキル値 = Convert.ToDouble( strA[ 1 ] );
1190- continue;
1191- case "Skill":
1192- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].dbゲーム型スキル値 = Convert.ToDouble( strA[ 1 ] );
1193- continue;
1194- case "Perfect":
1195- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPerfect数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1196- continue;
1197- case "Great":
1198- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGreat数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1199- continue;
1200- case "Good":
1201- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGood数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1202- continue;
1203- case "Poor":
1204- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPoor数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1205- continue;
1206- case "Miss":
1207- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nMiss数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1208- continue;
1209- case "MaxCombo":
1210- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].n最大コンボ数 = Convert.ToInt32( strA[ 1 ] );
1211- continue;
1212- default:
1213- continue;
1214- }
1215- }
1216- }
1217- catch( NullReferenceException )
1218- {
1219- Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
1220- }
1221- catch( EndOfStreamException )
1222- {
1223- Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
1224- }
1225- }
1226- }
1227- }
1228- else
1229- {
1230- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ] = null;
1231- }
1284+ // switch( strA[ 0 ] )
1285+ // {
1286+ // case "Score":
1287+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nスコア = Convert.ToInt32( strA[ 1 ] );
1288+ // continue;
1289+ // case "PlaySkill":
1290+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].db演奏型スキル値 = Convert.ToDouble( strA[ 1 ] );
1291+ // continue;
1292+ // case "Skill":
1293+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].dbゲーム型スキル値 = Convert.ToDouble( strA[ 1 ] );
1294+ // continue;
1295+ // case "Perfect":
1296+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPerfect数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1297+ // continue;
1298+ // case "Great":
1299+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGreat数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1300+ // continue;
1301+ // case "Good":
1302+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGood数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1303+ // continue;
1304+ // case "Poor":
1305+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPoor数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1306+ // continue;
1307+ // case "Miss":
1308+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nMiss数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
1309+ // continue;
1310+ // case "MaxCombo":
1311+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].n最大コンボ数 = Convert.ToInt32( strA[ 1 ] );
1312+ // continue;
1313+ // default:
1314+ // continue;
1315+ // }
1316+ // }
1317+ // }
1318+ // catch( NullReferenceException )
1319+ // {
1320+ // Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
1321+ // }
1322+ // catch( EndOfStreamException )
1323+ // {
1324+ // Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
1325+ // }
1326+ // }
1327+ // }
1328+ //}
1329+ //else
1330+ //{
1331+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ] = null;
1332+ //}
12321333 }
12331334
12341335 private void t小文字表示(int x, int y, string str)
@@ -1354,6 +1455,31 @@
13541455 if( this.tx難易度パネル != null )
13551456 this.tx難易度パネル.t2D描画( CDTXMania.app.Device, nX, nY, rect );
13561457 }
1458+ protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, int nInputAdjustTime )
1459+ {
1460+ //if ( pChip != null )
1461+ {
1462+ int nDeltaTime = Math.Abs( (int)nTime );
1463+ //Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));
1464+ if ( nDeltaTime <= CDTXMania.nPerfect範囲ms )
1465+ {
1466+ return E判定.Perfect;
1467+ }
1468+ if ( nDeltaTime <= CDTXMania.nGreat範囲ms )
1469+ {
1470+ return E判定.Great;
1471+ }
1472+ if ( nDeltaTime <= CDTXMania.nGood範囲ms )
1473+ {
1474+ return E判定.Good;
1475+ }
1476+ if ( nDeltaTime <= CDTXMania.nPoor範囲ms )
1477+ {
1478+ return E判定.Poor;
1479+ }
1480+ }
1481+ return E判定.Miss;
1482+ }
13571483 #endregion
13581484 }
13591485 }
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/08.結果/CStage結果.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/08.結果/CStage結果.cs (revision 542)
@@ -373,23 +373,23 @@
373373 }
374374
375375 //Ver.K追加 演奏結果の記録
376- CScoreIni.C演奏記録 cScoreData;
377- cScoreData = this.st演奏記録[ (int)inst ];
378- using (FileStream fs = new FileStream(directory + "\\" + filename + ".score", FileMode.Create, FileAccess.Write))
379- {
380- using (StreamWriter sw = new StreamWriter(fs))
381- {
382- sw.WriteLine( "Score=" + cScoreData.nスコア );
383- sw.WriteLine( "PlaySkill=" + cScoreData.db演奏型スキル値 );
384- sw.WriteLine( "Skill=" + cScoreData.dbゲーム型スキル値 );
385- sw.WriteLine( "Perfect=" + cScoreData.nPerfect数・Auto含まない );
386- sw.WriteLine( "Great=" + cScoreData.nGreat数・Auto含まない );
387- sw.WriteLine( "Good=" + cScoreData.nGood数・Auto含まない );
388- sw.WriteLine( "Poor=" + cScoreData.nPoor数・Auto含まない );
389- sw.WriteLine( "Miss=" + cScoreData.nMiss数・Auto含まない );
390- sw.WriteLine( "MaxCombo=" + cScoreData.n最大コンボ数 );
391- }
392- }
376+ //CScoreIni.C演奏記録 cScoreData;
377+ //cScoreData = this.st演奏記録[ (int)inst ];
378+ //using (FileStream fs = new FileStream(directory + "\\" + filename + ".score", FileMode.Create, FileAccess.Write))
379+ //{
380+ // using (StreamWriter sw = new StreamWriter(fs))
381+ // {
382+ // sw.WriteLine( "Score=" + cScoreData.nスコア );
383+ // sw.WriteLine( "PlaySkill=" + cScoreData.db演奏型スキル値 );
384+ // sw.WriteLine( "Skill=" + cScoreData.dbゲーム型スキル値 );
385+ // sw.WriteLine( "Perfect=" + cScoreData.nPerfect数・Auto含まない );
386+ // sw.WriteLine( "Great=" + cScoreData.nGreat数・Auto含まない );
387+ // sw.WriteLine( "Good=" + cScoreData.nGood数・Auto含まない );
388+ // sw.WriteLine( "Poor=" + cScoreData.nPoor数・Auto含まない );
389+ // sw.WriteLine( "Miss=" + cScoreData.nMiss数・Auto含まない );
390+ // sw.WriteLine( "MaxCombo=" + cScoreData.n最大コンボ数 );
391+ // }
392+ //}
393393 }
394394 }
395395 public override void On非活性化()
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏ステータスパネル共通.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏ステータスパネル共通.cs (revision 542)
@@ -96,6 +96,7 @@
9696 public long nCurrentScore;
9797 public long n現在のスコアGuitar;
9898 public long n現在のスコアBass;
99+ public STDGBVALUE<double> db現在の達成率;
99100 public int nIndex;
100101 public int nStatus;
101102 public STATUSPANEL[] stパネルマップ;
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs (revision 542)
@@ -69,23 +69,29 @@
6969
7070 public override void On活性化()
7171 {
72+ int nGraphUsePart = CDTXMania.ConfigIni.bGraph有効.Guitar ? 1 : 2;
7273 this.ct登場用 = new CCounter(0, 12, 16, CDTXMania.Timer);
7374 dtLastQueueOperation = DateTime.MinValue;
74- if (CDTXMania.bコンパクトモード)
75+ if( CDTXMania.bコンパクトモード )
7576 {
7677 var score = new Cスコア();
7778 CDTXMania.Songs管理.tScoreIniを読み込んで譜面情報を設定する(CDTXMania.strコンパクトモードファイル + ".score.ini", ref score);
78- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
79- this.actGraph.dbグラフ値目標_渡 = score.譜面情報.最大スキル[1];
80- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
81- this.actGraph.dbグラフ値目標_渡 = score.譜面情報.最大スキル[2];
79+ this.actGraph.dbグラフ値目標_渡 = score.譜面情報.最大スキル[ nGraphUsePart ];
8280 }
8381 else
8482 {
85- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
86- this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[1]; // #24074 2011.01.23 add ikanick
87- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
88- this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[2]; // #24074 2011.01.23 add ikanick
83+ this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ nGraphUsePart ]; // #24074 2011.01.23 add ikanick
84+ //this.actGraph.dbグラフ値自己ベスト = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ nGraphUsePart ];
85+
86+ // #35411 2015.08.21 chnmr0 add
87+ // ゴースト利用可のなとき、0で初期化
88+ if (CDTXMania.ConfigIni.eTargetGhost[ nGraphUsePart ] != ETargetGhostData.NONE)
89+ {
90+ if (CDTXMania.listTargetGhsotLag[ nGraphUsePart ] != null)
91+ {
92+ this.actGraph.dbグラフ値目標_渡 = 0;
93+ }
94+ }
8995 }
9096 base.On活性化();
9197 }
@@ -179,8 +185,7 @@
179185 this.t進行描画・ステータスパネル();
180186 if (CDTXMania.ConfigIni.bShowScore)
181187 this.t進行描画・スコア();
182- if (CDTXMania.ConfigIni.bGraph有効)
183- this.t進行描画・グラフ();
188+ this.t進行描画・グラフ();
184189 this.t進行描画・コンボ();
185190 this.t進行描画・演奏情報();
186191 //this.t進行描画・Wailing枠();
@@ -221,7 +226,6 @@
221226 #region [ private ]
222227 //-----------------
223228 private CTexture txレーン;
224- public CAct演奏スキルメーター actGraph;
225229 public bool bサビ区間;
226230 public double UnitTime;
227231
@@ -228,19 +232,53 @@
228232 protected override E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip, bool bCorrectLane )
229233 {
230234 E判定 eJudgeResult = tチップのヒット処理( nHitTime, pChip, E楽器パート.GUITAR, bCorrectLane );
231- if (CDTXMania.ConfigIni.nSkillMode == 0)
235+ if( pChip.e楽器パート == E楽器パート.GUITAR && CDTXMania.ConfigIni.bGraph有効.Guitar )
232236 {
233- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
234- this.actGraph.dbグラフ値現在_渡 = CScoreIni.t旧演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, E楽器パート.GUITAR, bIsAutoPlay);
235- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
236- this.actGraph.dbグラフ値現在_渡 = CScoreIni.t旧演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, E楽器パート.BASS, bIsAutoPlay);
237+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
238+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t旧演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, E楽器パート.GUITAR, bIsAutoPlay );
239+ else
240+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, this.actCombo.n現在のコンボ数.最高値.Guitar, E楽器パート.GUITAR, bIsAutoPlay );
241+
242+ if( CDTXMania.listTargetGhsotLag.Guitar != null &&
243+ CDTXMania.ConfigIni.eTargetGhost.Guitar == ETargetGhostData.ONLINE &&
244+ CDTXMania.DTX.n可視チップ数.Guitar > 0 )
245+ {
246+
247+ this.actGraph.dbグラフ値現在_渡 = 100 *
248+ (this.nヒット数・Auto含まない.Guitar.Perfect * 17 +
249+ this.nヒット数・Auto含まない.Guitar.Great * 7 +
250+ this.actCombo.n現在のコンボ数.最高値.Guitar * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Guitar );
251+ }
252+
253+ this.actGraph.n現在のAutoを含まない判定数_渡[ 0 ] = this.nヒット数・Auto含まない.Guitar.Perfect;
254+ this.actGraph.n現在のAutoを含まない判定数_渡[ 1 ] = this.nヒット数・Auto含まない.Guitar.Great;
255+ this.actGraph.n現在のAutoを含まない判定数_渡[ 2 ] = this.nヒット数・Auto含まない.Guitar.Good;
256+ this.actGraph.n現在のAutoを含まない判定数_渡[ 3 ] = this.nヒット数・Auto含まない.Guitar.Poor;
257+ this.actGraph.n現在のAutoを含まない判定数_渡[ 4 ] = this.nヒット数・Auto含まない.Guitar.Miss;
237258 }
238- else if (CDTXMania.ConfigIni.nSkillMode == 1)
259+ else if( pChip.e楽器パート == E楽器パート.BASS && CDTXMania.ConfigIni.bGraph有効.Bass )
239260 {
240- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
241- this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Guitar, this.nヒット数・Auto含まない.Guitar.Perfect, this.nヒット数・Auto含まない.Guitar.Great, this.nヒット数・Auto含まない.Guitar.Good, this.nヒット数・Auto含まない.Guitar.Poor, this.nヒット数・Auto含まない.Guitar.Miss, this.actCombo.n現在のコンボ数.最高値.Guitar, E楽器パート.GUITAR, bIsAutoPlay);
242- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
243- this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, this.actCombo.n現在のコンボ数.最高値.Bass, E楽器パート.BASS, bIsAutoPlay);
261+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
262+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t旧演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, E楽器パート.BASS, bIsAutoPlay );
263+ else
264+ this.actGraph.dbグラフ値現在_渡 = CScoreIni.t演奏型スキルを計算して返す( CDTXMania.DTX.n可視チップ数.Bass, this.nヒット数・Auto含まない.Bass.Perfect, this.nヒット数・Auto含まない.Bass.Great, this.nヒット数・Auto含まない.Bass.Good, this.nヒット数・Auto含まない.Bass.Poor, this.nヒット数・Auto含まない.Bass.Miss, this.actCombo.n現在のコンボ数.最高値.Bass, E楽器パート.BASS, bIsAutoPlay );
265+
266+ if( CDTXMania.listTargetGhsotLag.Bass != null &&
267+ CDTXMania.ConfigIni.eTargetGhost.Bass == ETargetGhostData.ONLINE &&
268+ CDTXMania.DTX.n可視チップ数.Bass > 0 )
269+ {
270+
271+ this.actGraph.dbグラフ値現在_渡 = 100 *
272+ (this.nヒット数・Auto含まない.Bass.Perfect * 17 +
273+ this.nヒット数・Auto含まない.Bass.Great * 7 +
274+ this.actCombo.n現在のコンボ数.最高値.Bass * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Bass );
275+ }
276+
277+ this.actGraph.n現在のAutoを含まない判定数_渡[ 0 ] = this.nヒット数・Auto含まない.Bass.Perfect;
278+ this.actGraph.n現在のAutoを含まない判定数_渡[ 1 ] = this.nヒット数・Auto含まない.Bass.Great;
279+ this.actGraph.n現在のAutoを含まない判定数_渡[ 2 ] = this.nヒット数・Auto含まない.Bass.Good;
280+ this.actGraph.n現在のAutoを含まない判定数_渡[ 3 ] = this.nヒット数・Auto含まない.Bass.Poor;
281+ this.actGraph.n現在のAutoを含まない判定数_渡[ 4 ] = this.nヒット数・Auto含まない.Bass.Miss;
244282 }
245283 return eJudgeResult;
246284 }
@@ -270,16 +308,10 @@
270308 }
271309 private void t進行描画・グラフ()
272310 {
273- if (CDTXMania.ConfigIni.bGraph有効 && ((CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && !CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)))
274- {
311+ if ( !CDTXMania.ConfigIni.bストイックモード && ( CDTXMania.ConfigIni.bGraph有効.Guitar || CDTXMania.ConfigIni.bGraph有効.Bass ) )
312+ {
275313 this.actGraph.On進行描画();
276- this.actGraph.db現在の判定数合計 = this.nヒット数・Auto含む.Guitar.Perfect + this.nヒット数・Auto含む.Guitar.Great + this.nヒット数・Auto含む.Guitar.Good + this.nヒット数・Auto含む.Guitar.Miss + this.nヒット数・Auto含む.Guitar.Poor;
277314 }
278- else if (CDTXMania.ConfigIni.bGraph有効 && ((!CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)))
279- {
280- this.actGraph.On進行描画();
281- this.actGraph.db現在の判定数合計 = this.nヒット数・Auto含む.Bass.Perfect + this.nヒット数・Auto含む.Bass.Great + this.nヒット数・Auto含む.Bass.Good + this.nヒット数・Auto含む.Bass.Miss + this.nヒット数・Auto含む.Bass.Poor;
282- }
283315 }
284316 protected override void t進行描画・Wailing枠()
285317 {
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CAct演奏Guitarステータスパネル.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CAct演奏Guitarステータスパネル.cs (revision 542)
@@ -193,7 +193,7 @@
193193 this.n本体X[1] = 0;
194194 }
195195 }
196- else if (CDTXMania.ConfigIni.bGraph有効)
196+ else if (CDTXMania.ConfigIni.bGraph有効.Guitar || CDTXMania.ConfigIni.bGraph有効.Bass )
197197 {
198198 if (!CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)
199199 {
@@ -430,8 +430,8 @@
430430 this.t小文字表示( 167 + this.n本体X[ i ], 192 + this.n本体Y, string.Format( "{0,3:##0}%", dbMISS率 ) );
431431 this.t小文字表示( 167 + this.n本体X[ i ], 222 + this.n本体Y, string.Format( "{0,3:##0}%", dbMAXCOMBO率 ) );
432432
433- this.t大文字表示(58 + this.n本体X[ i ], 277 + this.n本体Y, string.Format( "{0,6:##0.00}", CDTXMania.stage演奏ドラム画面.actGraph.dbグラフ値現在_渡 ) );
434- this.t大文字表示(88 + this.n本体X[ i ], 363 + this.n本体Y, string.Format( "{0,6:##0.00}", CDTXMania.stage演奏ドラム画面.actGraph.dbグラフ値現在_渡 * ( CDTXMania.DTX.LEVEL[ i ] / 10.0 ) * 0.2 ) );
433+ this.t大文字表示(58 + this.n本体X[ i ], 277 + this.n本体Y, string.Format( "{0,6:##0.00}", CDTXMania.stage演奏ギター画面.actStatusPanels.db現在の達成率.Guitar ) );
434+ this.t大文字表示(88 + this.n本体X[ i ], 363 + this.n本体Y, string.Format( "{0,6:##0.00}", CDTXMania.stage演奏ギター画面.actStatusPanels.db現在の達成率.Guitar * ( CDTXMania.DTX.LEVEL[ i ] / 10.0 ) * 0.2 ) );
435435
436436 if( this.tx難易度パネル != null )
437437 this.tx難易度パネル.t2D描画( CDTXMania.app.Device, 14 + this.n本体X[ i ], 266 + this.n本体Y, new Rectangle( 0, 60 * nIndex, 60, 60 ) );
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CAct演奏Guitarスコア.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CAct演奏Guitarスコア.cs (revision 542)
@@ -27,7 +27,7 @@
2727 this.n本体Y = 12;
2828 }
2929
30- if (CDTXMania.ConfigIni.bGraph有効)
30+ if (CDTXMania.ConfigIni.bGraph有効.Guitar || CDTXMania.ConfigIni.bGraph有効.Bass )
3131 {
3232 if (!CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)
3333 {
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏スキルメーター.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏スキルメーター.cs (revision 542)
@@ -3,6 +3,7 @@
33 using System.Text;
44 using System.Runtime.InteropServices;
55 using System.Drawing;
6+using System.Diagnostics;
67 using System.IO;
78 using SlimDX;
89 using FDK;
@@ -11,21 +12,28 @@
1112 {
1213 internal class CAct演奏スキルメーター : CActivity
1314 {
15+ // グラフ仕様
16+ // ・ギターとベースで同時にグラフを出すことはない。
17+ //
18+ // ・目標のメーター画像
19+ // →ゴーストがあった
20+ //   ・ゴーストに基づいたグラフ(リアルタイム比較)
21+ //  →なかった
22+ //   ・ScoreIniの自己ベストのグラフ
23+ //
1424
25+ private STDGBVALUE<int> nGraphBG_XPos = new STDGBVALUE<int>(); //ドラムにも座標指定があるためDGBVALUEとして扱う。
26+ private int nGraphBG_YPos = 200;
27+ private int DispHeight = 400;
28+ private int DispWidth = 60;
29+ private CCounter counterYposInImg = null;
30+ private readonly int slices = 10;
31+ private int nGraphUsePart = 0;
32+ private int[] nGraphGauge_XPos = new int[ 2 ];
33+ private int nPart = 0;
1534
16- // #24074 2011.01.23 ikanick グラフの描画
17- // 実装内容
18- // ・左を現在、右を目標
19- // ・基準線(60,70,80,90,100%)を超えると線が黄色くなる(元は白)
20- // ・目標を超えると現在が光る
21- // ・オート時には描画しない
22- // 要望・実装予定
23- // ・グラフを波打たせるなどの視覚の向上→実装済
24- // 修正等
25- // ・画像がないと落ちる→修正済
35+ // プロパティ
2636
27- // プロパティ
28-
2937 public double dbグラフ値現在_渡
3038 {
3139 get
@@ -48,445 +56,362 @@
4856 this.dbグラフ値目標 = value;
4957 }
5058 }
51-
52- // コンストラクタ
53-
54- public CAct演奏スキルメーター()
59+ public int[] n現在のAutoを含まない判定数_渡
5560 {
56- ST文字位置[] st文字位置Array = new ST文字位置[11];
57- ST文字位置 st文字位置 = new ST文字位置();
58- st文字位置.ch = '0';
59- st文字位置.pt = new Point(210, 0);
60- st文字位置Array[0] = st文字位置;
61- ST文字位置 st文字位置2 = new ST文字位置();
62- st文字位置2.ch = '1';
63- st文字位置2.pt = new Point(223, 0);
64- st文字位置Array[1] = st文字位置2;
65- ST文字位置 st文字位置3 = new ST文字位置();
66- st文字位置3.ch = '2';
67- st文字位置3.pt = new Point(235, 0);
68- st文字位置Array[2] = st文字位置3;
69- ST文字位置 st文字位置4 = new ST文字位置();
70- st文字位置4.ch = '3';
71- st文字位置4.pt = new Point(247, 0);
72- st文字位置Array[3] = st文字位置4;
73- ST文字位置 st文字位置5 = new ST文字位置();
74- st文字位置5.ch = '4';
75- st文字位置5.pt = new Point(259, 0);
76- st文字位置Array[4] = st文字位置5;
77- ST文字位置 st文字位置6 = new ST文字位置();
78- st文字位置6.ch = '5';
79- st文字位置6.pt = new Point(271, 0);
80- st文字位置Array[5] = st文字位置6;
81- ST文字位置 st文字位置7 = new ST文字位置();
82- st文字位置7.ch = '6';
83- st文字位置7.pt = new Point(283, 0);
84- st文字位置Array[6] = st文字位置7;
85- ST文字位置 st文字位置8 = new ST文字位置();
86- st文字位置8.ch = '7';
87- st文字位置8.pt = new Point(295, 0);
88- st文字位置Array[7] = st文字位置8;
89- ST文字位置 st文字位置9 = new ST文字位置();
90- st文字位置9.ch = '8';
91- st文字位置9.pt = new Point(307, 0);
92- st文字位置Array[8] = st文字位置9;
93- ST文字位置 st文字位置10 = new ST文字位置();
94- st文字位置10.ch = '9';
95- st文字位置10.pt = new Point(319, 0);
96- st文字位置Array[9] = st文字位置10;
97- ST文字位置 st文字位置11 = new ST文字位置();
98- st文字位置11.ch = '.';
99- st文字位置11.pt = new Point(331, 0);
100- st文字位置Array[10] = st文字位置11;
101- this.st小文字位置 = st文字位置Array;
102- base.b活性化してない = true;
103- }
104-
105-
106- // CActivity 実装
107-
108- public override void On活性化()
109- {
110- this.n本体X[0] = 900;
111- this.n本体X[1] = 574;
112- this.n本体X[2] = 290;
113-
114- this.dbグラフ値目標 = 80f;
115- this.dbグラフ値現在 = 0f;
116- this.dbグラフ値比較 = 0f;
117- this.db現在の判定数合計 = 0f;
118- base.On活性化();
119- }
120- public override void On非活性化()
121- {
122- base.On非活性化();
123- }
124- public override void OnManagedリソースの作成()
125- {
126- if (!base.b活性化してない)
61+ get
12762 {
128- this.txグラフ = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_Graph_main.png"));
129- this.tx比較 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_Graph_main.png"));
130- this.txグラフバックパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_Graph_main.png"));
131- this.tx数字 = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_Graph_main.png"));
132- this.txComboBom = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_Combobomb.png"));
133- if (this.txComboBom != null)
134- this.txComboBom.b加算合成 = true;
135- base.OnManagedリソースの作成();
63+ return this.n現在のAutoを含まない判定数;
13664 }
137- }
138- public override void OnManagedリソースの解放()
139- {
140- if (!base.b活性化してない)
65+ set
14166 {
142- CDTXMania.tテクスチャの解放(ref this.txグラフ);
143- CDTXMania.tテクスチャの解放(ref this.tx比較);
144- CDTXMania.tテクスチャの解放(ref this.txグラフバックパネル);
145- CDTXMania.tテクスチャの解放(ref this.tx数字);
146- CDTXMania.tテクスチャの解放(ref this.txComboBom);
147- base.OnManagedリソースの解放();
67+ this.n現在のAutoを含まない判定数 = value;
14868 }
14969 }
150- public override int On進行描画()
151- {
152- int j = 0;
70+
71+ // コンストラクタ
15372
154- if (CDTXMania.ConfigIni.bGuitar有効)
155- {
156- if (!CDTXMania.DTX.bチップがある.Bass)
157- j = 1;
158- else if (!CDTXMania.DTX.bチップがある.Guitar)
159- j = 2;
160- else if (!CDTXMania.ConfigIni.bギターが全部オートプレイである && CDTXMania.ConfigIni.bベースが全部オートプレイである)
161- j = 1;
162- else if (CDTXMania.ConfigIni.bギターが全部オートプレイである && !CDTXMania.ConfigIni.bベースが全部オートプレイである)
163- j = 2;
164- }
73+ public CAct演奏スキルメーター()
74+ {
75+ base.b活性化してない = true;
76+ }
16577
166- if (!base.b活性化してない)
167- {
168- if (base.b初めての進行描画)
169- {
170- this.ct爆発エフェクト = new CCounter(0, 13, 20, CDTXMania.Timer);
171- base.b初めての進行描画 = false;
172- }
173- double db1ノーツごとの達成率 = (double)this.dbグラフ値目標 / CDTXMania.DTX.n可視チップ数[j];
17478
175- if (j == 0)
176- this.n現在演奏されたノーツ数 =
177- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む[j].Perfect +
178- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む[j].Great +
179- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む[j].Good +
180- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む[j].Poor +
181- CDTXMania.stage演奏ドラム画面.nヒット数・Auto含む[j].Miss;
182- else
183- this.n現在演奏されたノーツ数 =
184- CDTXMania.stage演奏ギター画面.nヒット数・Auto含む[j].Perfect +
185- CDTXMania.stage演奏ギター画面.nヒット数・Auto含む[j].Great +
186- CDTXMania.stage演奏ギター画面.nヒット数・Auto含む[j].Good +
187- CDTXMania.stage演奏ギター画面.nヒット数・Auto含む[j].Poor +
188- CDTXMania.stage演奏ギター画面.nヒット数・Auto含む[j].Miss;
79+ // CActivity 実装
18980
190- CScoreIni.C演奏記録 drums = new CScoreIni.C演奏記録();
81+ public override void On活性化()
82+ {
83+ this.dbグラフ値目標 = 0f;
84+ this.dbグラフ値現在 = 0f;
19185
192- double rate = (double)n現在演奏されたノーツ数 / (double)CDTXMania.DTX.n可視チップ数[j];
86+ this.n現在のAutoを含まない判定数 = new int[ 6 ];
19387
194- if (CDTXMania.ConfigIni.nSkillMode == 0)
195- {
196- //int n逆算Perfect = drums.nPerfect数・Auto含まない / this.n現在演奏されたノーツ数;
197- //int n逆算Great = drums.nGreat数・Auto含まない / this.n現在演奏されたノーツ数;
198- //this.dbグラフ値比較 = CScoreIni.t旧ゴーストスキルを計算して返す(CDTXMania.DTX.n可視チップ数[j], drums.nPerfect数, drums.nGreat数, drums.nGood数, drums.nPoor数, drums.nMiss数, E楽器パート[j]) * rate;
199- //this.dbグラフ値比較 = ((this.dbグラフ値目標_渡) / (double)CDTXMania.DTX.n可視チップ数[j]) * rate;
200- this.dbグラフ値比較 = this.dbグラフ値目標_渡;
201- }
202- else if (CDTXMania.ConfigIni.nSkillMode == 1)
203- {
204- //this.dbグラフ値比較 = CScoreIni.tゴーストスキルを計算して返す(CDTXMania.DTX.n可視チップ数[j], this.n現在演奏されたノーツ数, drums.n最大コンボ数, E楽器パート[j]);
205- this.dbグラフ値比較 = (double)(db1ノーツごとの達成率 * n現在演奏されたノーツ数);
206- }
88+ base.On活性化();
89+ }
90+ public override void On非活性化()
91+ {
92+ base.On非活性化();
93+ }
94+ public override void OnManagedリソースの作成()
95+ {
96+ if( !base.b活性化してない )
97+ {
98+ this.pfNameFont = new CPrivateFastFont( new FontFamily( "Arial" ), 16, FontStyle.Bold );
99+ this.txグラフ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_Main.png" ) );
100+ this.txグラフ_ゲージ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Graph_Gauge.png" ) );
207101
208-
209- //this.dbグラフ値比較 = (double)(db1ノーツごとの達成率 * n現在演奏されたノーツ数);
210- // 背景暗幕
211- Rectangle rectangle = new Rectangle(900, 0, 380, 720);
212- if (this.txグラフ != null)
102+ if( this.pfNameFont != null )
213103 {
214- this.txグラフバックパネル.t2D描画(CDTXMania.app.Device, this.n本体X[j], 0, rectangle);
215- this.txグラフバックパネル.t2D描画(CDTXMania.app.Device, 141 + this.n本体X[j], 650 - (int)(this.dbグラフ値現在 * 5.56), new Rectangle(499, 0, 201, (int)(this.dbグラフ値現在 * 5.56)));
216- }
217-
218- this.t小文字表示(270 + this.n本体X[j], 658, string.Format("{0,6:##0.00}%", this.dbグラフ値現在));
219- if (CDTXMania.ConfigIni.nInfoType == 0)
220- {
221- this.tx比較.t2D描画(CDTXMania.app.Device, 170 + this.n本体X[j], 200, new Rectangle(336, 0, 162, 60));
222- this.t小文字表示(250 + this.n本体X[j], 224, string.Format("{0,6:##0.00}%", this.dbグラフ値目標));
223- if (this.dbグラフ値現在 > this.dbグラフ値目標)
104+ if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.PERFECT )
224105 {
225- this.tx比較.n透明度 = 128;
106+ this.txPlayerName = this.t指定された文字テクスチャを生成する( "DJ AUTO" );
226107 }
227- }
228- else if (CDTXMania.ConfigIni.nInfoType == 1)
229- {
230- this.tx比較.t2D描画(CDTXMania.app.Device, 170 + this.n本体X[j], 200, new Rectangle(336, 205, 162, 60));
231- this.tx比較.t2D描画(CDTXMania.app.Device, 170 + this.n本体X[j], 280, new Rectangle(336, 265, 162, 60));
232- this.tx比較.t2D描画(CDTXMania.app.Device, 170 + this.n本体X[j], 360, new Rectangle(336, 325, 162, 60));
233- this.tx比較.t2D描画(CDTXMania.app.Device, 170 + this.n本体X[j], 440, new Rectangle(336, 385, 162, 60));
234- this.tx比較.t2D描画(CDTXMania.app.Device, 170 + this.n本体X[j], 520, new Rectangle(336, 445, 162, 60));
235-
236- if (j == 0)
108+ else if( CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.LAST_PLAY )
237109 {
238- this.t小文字表示(250 + this.n本体X[j], 224, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない[j].Perfect));
239- this.t小文字表示(250 + this.n本体X[j], 304, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない[j].Great));
240- this.t小文字表示(250 + this.n本体X[j], 384, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない[j].Good));
241- this.t小文字表示(250 + this.n本体X[j], 464, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない[j].Poor));
242- this.t小文字表示(250 + this.n本体X[j], 544, string.Format("{0,6:###0}", CDTXMania.stage演奏ドラム画面.nヒット数・Auto含まない[j].Miss));
110+ this.txPlayerName = this.t指定された文字テクスチャを生成する( "LAST PLAY" );
243111 }
244- else
245- {
246- this.t小文字表示(250 + this.n本体X[j], 224, string.Format("{0,6:###0}", CDTXMania.stage演奏ギター画面.nヒット数・Auto含まない[j].Perfect));
247- this.t小文字表示(250 + this.n本体X[j], 304, string.Format("{0,6:###0}", CDTXMania.stage演奏ギター画面.nヒット数・Auto含まない[j].Great));
248- this.t小文字表示(250 + this.n本体X[j], 384, string.Format("{0,6:###0}", CDTXMania.stage演奏ギター画面.nヒット数・Auto含まない[j].Good));
249- this.t小文字表示(250 + this.n本体X[j], 464, string.Format("{0,6:###0}", CDTXMania.stage演奏ギター画面.nヒット数・Auto含まない[j].Poor));
250- this.t小文字表示(250 + this.n本体X[j], 544, string.Format("{0,6:###0}", CDTXMania.stage演奏ギター画面.nヒット数・Auto含まない[j].Miss));
251- }
252112 }
253-
254- // 基準線
255- rectangle = new Rectangle(78, 0, 60, 3);
256- if (this.txグラフ != null)
257- {
258- //this.txグラフ.n透明度 = 32;
259- //this.txグラフ.vc拡大縮小倍率 = new Vector3(58f, 1f, 1f);
260- for (int i = 0; i < 20; i++)
113+ base.OnManagedリソースの作成();
114+ }
115+ }
116+ public override void OnManagedリソースの解放()
117+ {
118+ if( !base.b活性化してない )
119+ {
120+ CDTXMania.tテクスチャの解放( ref this.txグラフ );
121+ CDTXMania.tテクスチャの解放( ref this.txグラフ_ゲージ );
122+ CDTXMania.tテクスチャの解放( ref this.txグラフ値自己ベストライン );
123+ base.OnManagedリソースの解放();
124+ }
125+ }
126+ public override int On進行描画()
127+ {
128+ if( !base.b活性化してない )
129+ {
130+ if( base.b初めての進行描画 )
131+ {
132+ //座標などの定義は初回だけにする。
133+ //2016.03.29 kairera0467 非セッション譜面で、譜面が無いパートでグラフを有効にしている場合、譜面があるパートに一時的にグラフを切り替える。
134+ // 時間がなくて雑なコードになったため、後日最適化を行う。
135+ if( CDTXMania.ConfigIni.bDrums有効 )
261136 {
262- //this.txグラフ.t2D描画(CDTXMania.app.Device, 75 + this.n本体X[j], 94 + (int)(29.26 * i), rectangle);
137+ this.nPart = 0;
138+ this.nGraphUsePart = 0;
263139 }
264- //this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 230f, 1f);
265- for (int i = 0; i < 2; i++)
140+ else if( CDTXMania.ConfigIni.bGuitar有効 )
266141 {
267- //this.txグラフ.t2D描画(CDTXMania.app.Device, 75 + this.n本体X[j] + (int)(29.26 * i), 94, rectangle);
268- //this.txグラフ.t2D描画(CDTXMania.app.Device, 75 + this.n本体X[j] + (int)(29.26 * i), 94, rectangle);
269- }
270- }
271- if (this.txグラフ != null)
272- {
273- //this.txグラフ.vc拡大縮小倍率 = new Vector3(38f, 1f, 1f);
274- }
275- for (int i = 0; i < 5; i++)
276- {
277- // 基準線を越えたら線が黄色くなる
278- if (this.dbグラフ値現在 >= (100 - i * 10))
279- {
280- rectangle = new Rectangle(78, 1, 60, 2);//黄色
281- if (this.txグラフ != null)
142+ this.nGraphUsePart = ( CDTXMania.ConfigIni.bGraph有効.Guitar == true ) ? 1 : 2;
143+ if( CDTXMania.DTX.bチップがある.Guitar )
144+ this.nPart = CDTXMania.ConfigIni.bGraph有効.Guitar ? 0 : 1;
145+ else if( !CDTXMania.DTX.bチップがある.Guitar && CDTXMania.ConfigIni.bGraph有効.Guitar )
282146 {
283- //this.txグラフ.n透明度 = 224;
147+ this.nPart = 1;
148+ this.nGraphUsePart = 2;
284149 }
150+
151+ if( !CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bGraph有効.Bass )
152+ this.nPart = 0;
285153 }
286- else
154+
155+ this.nGraphBG_XPos.Drums = 870;
156+ this.nGraphBG_XPos.Guitar = 356;
157+ this.nGraphBG_XPos.Bass = 647;
158+ this.nGraphBG_YPos = 50;
159+
160+ if( CDTXMania.ConfigIni.eTargetGhost[ this.nGraphUsePart ] != ETargetGhostData.NONE )
287161 {
288- rectangle = new Rectangle(78, 4, 60, 2);
289- if (this.txグラフ != null)
162+ if( CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ] != null )
290163 {
291- this.txグラフ.n透明度 = 160;
164+ //this.dbグラフ値目標 = CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ].db演奏型スキル値;
165+ this.dbグラフ値目標_表示 = CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ].db演奏型スキル値;
292166 }
293167 }
294168
295- if (this.txグラフ != null)
296- {
297- this.txグラフ.t2D描画(CDTXMania.app.Device, 75 + this.n本体X[j], 94 + (int)(58.52 * i), rectangle);
169+ this.nGraphGauge_XPos = new int[] { 3, 205 };
298170
299- }
171+ base.b初めての進行描画 = false;
300172 }
301- // グラフ
302- // --現在値
303- if (this.dbグラフ値現在_表示 < this.dbグラフ値現在)
173+
174+ int stYposInImg = 0;
175+
176+
177+
178+ if( this.txグラフ != null )
304179 {
305- this.dbグラフ値現在_表示 += (this.dbグラフ値現在 - this.dbグラフ値現在_表示) / 5 + 0.01;
180+ //背景
181+ this.txグラフ.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
182+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos, new Rectangle( 2, 2, 251, 584 ) );
183+
184+ //自己ベスト数値表示
185+ this.t達成率文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 136, nGraphBG_YPos + 501, string.Format( "{0,6:##0.00}" + "%", this.dbグラフ値自己ベスト ) );
306186 }
307- if (this.dbグラフ値現在_表示 >= this.dbグラフ値現在)
308- {
309- this.dbグラフ値現在_表示 = this.dbグラフ値現在;
310- }
311- rectangle = new Rectangle(0, 0, 72, (int)(556f * this.dbグラフ値現在_表示 / 100));
312- if (this.txグラフ != null)
313- {
314- this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
315- //this.txグラフ.n透明度 = 192;
316- this.txグラフ.t2D描画(CDTXMania.app.Device, 69 + this.n本体X[j], 650 - (int)(556f * this.dbグラフ値現在_表示 / 100), rectangle);
317- }
318- for (int k = 0; k < 32; k++)
319- {
320- rectangle = new Rectangle(20, 0, 1, 1);
321- if (this.txグラフ != null)
322- {
323- //this.stキラキラ[ k ].ct進行.t進行Loop();
324- int num1 = (int)this.stキラキラ[k].x;
325- //int num2 = this.stキラキラ[ k ].ct進行.n現在の値;
326- //this.txグラフ.vc拡大縮小倍率 = new Vector3(this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale);
327- //this.txグラフ.n透明度 = 138 - 2 * this.stキラキラ[ k ].Trans;
328- //if ( num2 < (2.3f * this.dbグラフ値現在_表示) )
329- {
330- //this.txグラフ.t2D描画(CDTXMania.app.Device, 860+num1, 318-num2, rectangle);
331- }
332- }
333- }
334- // --現在値_追加エフェクト
335187
336- if (this.dbグラフ値直前 != this.dbグラフ値現在)
188+ //ゲージ現在
189+ if( this.txグラフ_ゲージ != null )
337190 {
338- this.stフラッシュ[nグラフフラッシュct].y = 0;
339- this.stフラッシュ[nグラフフラッシュct].Trans = 650;
340- nグラフフラッシュct++;
341- if (nグラフフラッシュct >= 16)
191+ //ゲージ本体
192+ int nGaugeSize = (int)( 434.0f * (float)this.dbグラフ値現在 / 100.0f );
193+ int nPosY = 527 - nGaugeSize;
194+ this.txグラフ_ゲージ.n透明度 = 255;
195+ this.txグラフ_ゲージ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 45, nPosY, new Rectangle( 2, 2, 30, nGaugeSize ) );
196+
197+ //ゲージ比較
198+ int nTargetGaugeSize = (int)( 434.0f * ( (float)this.dbグラフ値目標 / 100.0f ) );
199+ int nTargetGaugePosY = 527 - nTargetGaugeSize;
200+ int nTargetGaugeRectX = this.dbグラフ値現在 > this.dbグラフ値目標 ? 38 : 74;
201+ this.txグラフ_ゲージ.n透明度 = 255;
202+ this.txグラフ_ゲージ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 75, nTargetGaugePosY, new Rectangle( nTargetGaugeRectX, 2, 30, nTargetGaugeSize ) );
203+ if( this.txグラフ != null )
342204 {
343- nグラフフラッシュct = 0;
344- }
345- }
205+ //ターゲット達成率数値
346206
347- this.dbグラフ値直前 = this.dbグラフ値現在;
348- for (int m = 0; m < 16; m++)
349- {
350- rectangle = new Rectangle(6, 0, 60, 2);
351- if ((this.stフラッシュ[m].y >= 0) && (this.stフラッシュ[m].y + 3 < (int)(650f * this.dbグラフ値現在_表示 / 100)) && (this.txグラフ != null))
352- {
353- //this.txグラフ.n透明度 = this.stフラッシュ[ m ].Trans;
354- //this.txグラフ.t2D描画(CDTXMania.app.Device, 75 + this.n本体X[j], this.stフラッシュ[ m ].y + (620 - (int)(556f * this.dbグラフ値現在_表示 / 100)), rectangle);
355- //this.txグラフ.n透明度 = this.stフラッシュ[ m ].Trans;
356- //this.txグラフ.t2D描画(CDTXMania.app.Device, 75 + this.n本体X[j], this.stフラッシュ[ m ].y + 2 + (620 - (int)(556f * this.dbグラフ値現在_表示 / 100)), rectangle);
207+ //ターゲット名
208+ //現在
209+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 45, nGraphBG_YPos + 357, new Rectangle( 260, 2, 30, 120 ) );
210+ //自己ベスト
211+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 75, nGraphBG_YPos + 357, new Rectangle( 260 + 90, 2, 30, 120 ) );
212+
213+ //以下使用予定
214+ //最終プレイ
215+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 106, nGraphBG_YPos + 357, new Rectangle( 260 + 60, 2, 30, 120 ) );
216+ //自己ベスト
217+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 136, nGraphBG_YPos + 357, new Rectangle( 260 + 90, 2, 30, 120 ) );
218+ //最高スコア
219+ this.txグラフ.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ] + 164, nGraphBG_YPos + 357, new Rectangle( 260 + 120, 2, 30, 120 ) );
357220 }
358- this.stフラッシュ[m].y += 5;
359- this.stフラッシュ[m].Trans -= 5;
221+ this.t比較文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 44, nPosY - 10, string.Format( "{0,5:##0.00}", Math.Abs( this.dbグラフ値現在 ) ) );
222+ this.t比較文字表示( nGraphBG_XPos[ this.nGraphUsePart ] + 74, nTargetGaugePosY - 10, string.Format( "{0,5:##0.00}", Math.Abs( this.dbグラフ値目標 ) ) );
360223 }
361- // --現在値_目標越
362- rectangle = new Rectangle(0, 0, 10, (int)(556f * this.dbグラフ値現在_表示 / 100));
363- if ((dbグラフ値現在 >= dbグラフ値目標) && (this.txグラフ != null))
364- {
365- //this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);
366- //this.txグラフ.n透明度 = 128;
367- //this.txグラフ.b加算合成 = true;
368- this.txグラフ.t2D描画(CDTXMania.app.Device, 69 + this.n本体X[j], 650 - (int)(556f * this.dbグラフ値現在_表示 / 100), rectangle);
369224
370- }
371- // --目標値
372225
373- if (this.dbグラフ値目標_表示 < this.dbグラフ値目標)
374- {
375- this.dbグラフ値目標_表示 += (this.dbグラフ値目標 - this.dbグラフ値目標_表示) / 5 + 0.01;
376- }
377- if (this.dbグラフ値目標_表示 >= this.dbグラフ値目標)
378- {
379- this.dbグラフ値目標_表示 = this.dbグラフ値目標;
380- }
226+ }
227+ return 0;
228+ }
381229
382- db現在の判定数合計 = 0;
383- //db現在の判定数合計 = CDTXMania.stage演奏画面共通.nヒット数・Auto含む[j].Perfect + CDTXMania.stage演奏画面共通.nヒット数・Auto含む[j].Great + CDTXMania.stage演奏画面共通.nヒット数・Auto含む[j].Good + CDTXMania.stage演奏画面共通.nヒット数・Auto含む[j].Miss + CDTXMania.stage演奏画面共通.nヒット数・Auto含む[j].Poor;
384- //this.dbグラフ値目標_Ghost = ((1.0 * CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[0] / CDTXMania.DTX.n可視チップ数[j]) * db現在の判定数合計);
385- //System.IO.StreamWriter sw = new System.IO.StreamWriter(@"debug.txt", true, System.Text.Encoding.GetEncoding("shift_jis"));
386- //sw.WriteLine("TotalJudgeは{0}で、Ghostは{1}です。", db現在の判定数合計, this.dbグラフ値目標_Ghost);
387- //sw.Close();
388- this.dbグラフ値目標_表示 = this.dbグラフ値目標;
389- rectangle = new Rectangle(138, 0, 72, (int)(556f * this.dbグラフ値目標_表示 / 100));
390- if (this.txグラフ != null)
391- {
392- //this.txグラフ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
393- //this.txグラフ.n透明度 = 192;
394- //this.txグラフ.t2D描画(CDTXMania.app.Device, 69 + this.n本体X[j], 650 - (int)(556f * this.dbグラフ値目標_表示 / 100), rectangle);
395- //this.txグラフ.vc拡大縮小倍率 = new Vector3(1.4f, 1f, 1f);
396- this.txグラフ.n透明度 = 48;
397- //this.txグラフ.b加算合成 = true;
398- //this.txグラフ.t2D描画(CDTXMania.app.Device, 69 + this.n本体X[j], 650 - (int)(556f * this.dbグラフ値目標_表示 / 100), rectangle);
399- this.txグラフ.t2D描画(CDTXMania.app.Device, 69 + this.n本体X[j], 650 - (int)(556f * this.dbグラフ値比較 / 100), new Rectangle(138, 0, 72, (int)(556f * this.dbグラフ値比較 / 100)));
400- }
401- /*
402- for( int k = 32; k < 64; k++ )
403- {
404- rectangle = new Rectangle(6, 0, 1, 1);
405- if (this.txグラフ != null)
406- {
407- this.stキラキラ[ k ].ct進行.t進行Loop();
408- int num1 = (int)this.stキラキラ[ k ].x;
409- int num2 = this.stキラキラ[ k ].ct進行.n現在の値;
410- this.txグラフ.vc拡大縮小倍率 = new Vector3(this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale, this.stキラキラ[ k ].fScale);
411- //this.txグラフ.n透明度 = 138 - 2 * this.stキラキラ[ k ].Trans;
412- if ( num2 < (2.3f * this.dbグラフ値目標_表示) )
413- {
414- this.txグラフ.t2D描画(CDTXMania.app.Device, 75 +this.n本体X[j] + num1, 318 - num2, rectangle);
415- }
416- }
417- }
418- */
419230
420- }
421- return 0;
422- }
231+ // その他
423232
233+ #region [ private ]
234+ //----------------
235+ private double dbグラフ値目標;
236+ private double dbグラフ値目標_表示;
237+ private double dbグラフ値現在;
238+ private double dbグラフ値現在_表示;
239+ public double dbグラフ値自己ベスト;
240+ private int[] n現在のAutoを含まない判定数;
424241
425- // その他
242+ private CTexture txPlayerName;
243+ private CTexture txグラフ;
244+ private CTexture txグラフ_ゲージ;
245+ private CTexture txグラフ値自己ベストライン;
426246
427- #region [ private ]
428- //----------------
247+ private CPrivateFastFont pfNameFont;
248+
429249 [StructLayout(LayoutKind.Sequential)]
430- private struct STキラキラ
431- {
432- public int x;
433- public int y;
434- public float fScale;
435- public int Trans;
436- public CCounter ct進行;
437- }
438- [StructLayout(LayoutKind.Sequential)]
439250 private struct ST文字位置
440251 {
441252 public char ch;
442253 public Point pt;
254+ public ST文字位置( char ch, Point pt )
255+ {
256+ this.ch = ch;
257+ this.pt = pt;
258+ }
443259 }
444- private readonly ST文字位置[] st小文字位置;
445- private STキラキラ[] stキラキラ = new STキラキラ[64];
446- private STキラキラ[] stフラッシュ = new STキラキラ[16];
447260
448- private CCounter ct爆発エフェクト;
449- public double db現在の判定数合計;
450- private double dbグラフ値目標;
451- public double dbグラフ値比較;
452- private double dbグラフ値目標_表示;
453- private double dbグラフ値現在;
454- private double dbグラフ値現在_表示;
455- private double dbグラフ値直前;
456- private int nグラフフラッシュct;
457- private int n現在演奏されたノーツ数;
458- private STDGBVALUE<int> n本体X;
459- private CTexture tx数字;
460- private CTexture tx比較;
461- private CTexture txグラフ;
462- private CTexture txグラフバックパネル;
463- protected CTexture txComboBom;
464- //-----------------
261+ private ST文字位置[] st比較数字位置 = new ST文字位置[]{
262+ new ST文字位置( '0', new Point( 0, 0 ) ),
263+ new ST文字位置( '1', new Point( 8, 0 ) ),
264+ new ST文字位置( '2', new Point( 16, 0 ) ),
265+ new ST文字位置( '3', new Point( 24, 0 ) ),
266+ new ST文字位置( '4', new Point( 32, 0 ) ),
267+ new ST文字位置( '5', new Point( 40, 0 ) ),
268+ new ST文字位置( '6', new Point( 48, 0 ) ),
269+ new ST文字位置( '7', new Point( 56, 0 ) ),
270+ new ST文字位置( '8', new Point( 64, 0 ) ),
271+ new ST文字位置( '9', new Point( 72, 0 ) ),
272+ new ST文字位置( '.', new Point( 80, 0 ) )
273+ };
274+ private ST文字位置[] st達成率数字位置 = new ST文字位置[]{
275+ new ST文字位置( '0', new Point( 0, 0 ) ),
276+ new ST文字位置( '1', new Point( 16, 0 ) ),
277+ new ST文字位置( '2', new Point( 32, 0 ) ),
278+ new ST文字位置( '3', new Point( 48, 0 ) ),
279+ new ST文字位置( '4', new Point( 64, 0 ) ),
280+ new ST文字位置( '5', new Point( 80, 0 ) ),
281+ new ST文字位置( '6', new Point( 96, 0 ) ),
282+ new ST文字位置( '7', new Point( 112, 0 ) ),
283+ new ST文字位置( '8', new Point( 128, 0 ) ),
284+ new ST文字位置( '9', new Point( 144, 0 ) ),
285+ new ST文字位置( '.', new Point( 160, 0 ) ),
286+ new ST文字位置( '%', new Point( 168, 0 ) ),
287+ };
465288
466289
467- private void t小文字表示(int x, int y, string str)
290+ private void t比較文字表示( int x, int y, string str )
291+ {
292+ foreach( char ch in str )
293+ {
294+ for( int i = 0; i < this.st比較数字位置.Length; i++ )
295+ {
296+ if( this.st比較数字位置[ i ].ch == ch )
297+ {
298+ int RectX = 8;
299+ if( ch == '.' ) RectX = 2;
300+ Rectangle rectangle = new Rectangle( 260 + this.st比較数字位置[ i ].pt.X, 162, RectX, 10 );
301+ if( this.txグラフ != null )
302+ {
303+ this.txグラフ.n透明度 = 255;
304+ this.txグラフ.t2D描画( CDTXMania.app.Device, x, y, rectangle );
305+ }
306+ break;
307+ }
308+ }
309+ if( ch == '.' ) x += 2;
310+ else x += 7;
311+ }
312+ }
313+ private void t達成率文字表示( int x, int y, string str )
314+ {
315+ foreach( char ch in str )
316+ {
317+ for( int i = 0; i < this.st達成率数字位置.Length; i++ )
318+ {
319+ if( this.st達成率数字位置[ i ].ch == ch )
320+ {
321+ int RectX = 16;
322+ if( ch == '.' ) RectX = 8;
323+ Rectangle rectangle = new Rectangle( 260 + this.st達成率数字位置[ i ].pt.X, 128, RectX, 28 );
324+ if( this.txグラフ != null )
325+ {
326+ this.txグラフ.n透明度 = 255;
327+ this.txグラフ.t2D描画( CDTXMania.app.Device, x, y, rectangle );
328+ }
329+ break;
330+ }
331+ }
332+ if( ch == '.' ) x += 8;
333+ else x += 16;
334+ }
335+ }
336+ private CTexture t指定された文字テクスチャを生成する( string str文字 )
468337 {
469- foreach (char ch in str)
338+ Bitmap bmp;
339+ bmp = this.pfNameFont.DrawPrivateFont( str文字, Color.White, Color.Transparent );
340+
341+ CTexture tx文字テクスチャ = CDTXMania.tテクスチャの生成( bmp, false );
342+
343+ if( tx文字テクスチャ != null )
344+ tx文字テクスチャ.vc拡大縮小倍率 = new Vector3( 1.0f, 1.0f, 1f );
345+
346+ bmp.Dispose();
347+
348+ return tx文字テクスチャ;
349+ }
350+ private void t折れ線を描画する( int nBoardPosA, int nBoardPosB )
351+ {
352+ //やる気がまるでない線
353+ //2016.03.28 kairera0467 ギター画面では1Pと2Pで向きが変わるが、そこは残念ながら未対応。
354+ //参考 http://dobon.net/vb/dotnet/graphics/drawline.html
355+ if( this.txグラフ値自己ベストライン == null )
470356 {
471- for (int i = 0; i < this.st小文字位置.Length; i++)
357+ Bitmap canvas = new Bitmap( 280, 720 );
358+
359+ Graphics g = Graphics.FromImage( canvas );
360+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
361+ int nMybestGaugeSize = (int)( 560.0f * (float)this.dbグラフ値自己ベスト / 100.0f );
362+ int nMybestGaugePosY = 600 - nMybestGaugeSize;
363+
364+ int nTargetGaugeSize = (int)( 560.0f * (float)this.dbグラフ値目標_表示 / 100.0f );
365+ int nTargetGaugePosY = 600 - nTargetGaugeSize;
366+
367+ Point[] posMybest = {
368+ new Point( 3, nMybestGaugePosY ),
369+ new Point( 75, nMybestGaugePosY ),
370+ new Point( 94, nBoardPosA + 31 ),
371+ new Point( 102, nBoardPosA + 31 )
372+ };
373+
374+ Point[] posTarget = {
375+ new Point( 3, nTargetGaugePosY ),
376+ new Point( 75, nTargetGaugePosY ),
377+ new Point( 94, nBoardPosB + 59 ),
378+ new Point( 102, nBoardPosB + 59 )
379+ };
380+
381+ if( this.nGraphUsePart == 2 )
472382 {
473- if (this.st小文字位置[i].ch == ch)
474- {
475- Rectangle rectangle = new Rectangle(this.st小文字位置[i].pt.X, this.st小文字位置[i].pt.Y, 12, 16);
476- if (ch == '.')
477- {
478- rectangle.Width -= 8;
479- }
480- if (this.tx数字 != null)
481- {
482- this.tx数字.t2D描画(CDTXMania.app.Device, x, y, rectangle);
483- }
484- break;
485- }
383+ posMybest = new Point[]{
384+ new Point( 271, nMybestGaugePosY ),
385+ new Point( 206, nMybestGaugePosY ),
386+ new Point( 187, nBoardPosA + 31 ),
387+ new Point( 178, nBoardPosA + 31 )
388+ };
389+
390+ posTarget = new Point[]{
391+ new Point( 271, nTargetGaugePosY ),
392+ new Point( 206, nTargetGaugePosY ),
393+ new Point( 187, nBoardPosB + 59 ),
394+ new Point( 178, nBoardPosB + 59 )
395+ };
486396 }
487- x += 12;
397+
398+ Pen penMybest = new Pen( Color.Pink, 2 );
399+ g.DrawLines( penMybest, posMybest );
400+
401+ if( CDTXMania.listTargetGhsotLag[ this.nGraphUsePart ] != null && CDTXMania.listTargetGhostScoreData[ this.nGraphUsePart ] != null )
402+ {
403+ Pen penTarget = new Pen( Color.Orange, 2 );
404+ g.DrawLines( penTarget, posTarget );
405+ }
406+
407+ g.Dispose();
408+
409+ this.txグラフ値自己ベストライン = new CTexture( CDTXMania.app.Device, canvas, CDTXMania.TextureFormat, false );
488410 }
411+ if( this.txグラフ値自己ベストライン != null )
412+ this.txグラフ値自己ベストライン.t2D描画( CDTXMania.app.Device, nGraphBG_XPos[ this.nGraphUsePart ], nGraphBG_YPos );
489413 }
490- #endregion
491- }
414+ //-----------------
415+ #endregion
416+ }
492417 }
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CAct演奏Drumsステータスパネル.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CAct演奏Drumsステータスパネル.cs (revision 542)
@@ -396,8 +396,8 @@
396396 this.t小文字表示(167 + this.n本体X[i], 192 + this.n本体Y, string.Format("{0,3:##0}%", dbMISS率));
397397 this.t小文字表示(167 + this.n本体X[i], 222 + this.n本体Y, string.Format("{0,3:##0}%", dbMAXCOMBO率));
398398
399- this.t大文字表示(58 + this.n本体X[i], 277 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stage演奏ドラム画面.actGraph.dbグラフ値現在_渡));
400- this.t大文字表示(88 + this.n本体X[i], 363 + this.n本体Y, string.Format("{0,6:##0.00}", (CDTXMania.stage演奏ドラム画面.actGraph.dbグラフ値現在_渡 * (CDTXMania.DTX.LEVEL[i] / 10.0) * 0.2)));
399+ this.t大文字表示(58 + this.n本体X[i], 277 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stage演奏ドラム画面.actStatusPanels.db現在の達成率.Drums ) );
400+ this.t大文字表示(88 + this.n本体X[i], 363 + this.n本体Y, string.Format("{0,6:##0.00}", (CDTXMania.stage演奏ドラム画面.actStatusPanels.db現在の達成率.Drums * (CDTXMania.DTX.LEVEL[i] / 10.0) * 0.2)));
401401
402402 if (this.tx難易度パネル != null)
403403 this.tx難易度パネル.t2D描画(CDTXMania.app.Device, 14 + this.n本体X[i], 266 + this.n本体Y, new Rectangle(0, 60 * nIndex, 60, 60));
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs (revision 542)
@@ -92,7 +92,18 @@
9292 }
9393 else
9494 {
95- this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[0]; // #24074 2011.01.23 add ikanick
95+ this.actGraph.dbグラフ値目標_渡 = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ]; // #24074 2011.01.23 add ikanick
96+ this.actGraph.dbグラフ値自己ベスト = CDTXMania.stage選曲.r確定されたスコア.譜面情報.最大スキル[ 0 ];
97+
98+ // #35411 2015.08.21 chnmr0 add
99+ // ゴースト利用可のなとき、0で初期化
100+ if (CDTXMania.ConfigIni.eTargetGhost.Drums != ETargetGhostData.NONE)
101+ {
102+ if (CDTXMania.listTargetGhsotLag[(int)E楽器パート.DRUMS] != null)
103+ {
104+ this.actGraph.dbグラフ値目標_渡 = 0;
105+ }
106+ }
96107 }
97108 dtLastQueueOperation = DateTime.MinValue;
98109 }
@@ -398,10 +409,9 @@
398409 // this.t進行描画・パネル文字列();
399410 if (CDTXMania.ConfigIni.nInfoType == 1)
400411 this.t進行描画・ステータスパネル();
401- if (CDTXMania.ConfigIni.bGraph有効)
402- this.t進行描画・グラフ();
403412 this.t進行描画・ゲージ();
404413 this.t進行描画・コンボ();
414+ this.t進行描画・グラフ();
405415 this.t進行描画・演奏情報();
406416 this.t進行描画・判定文字列1・通常位置指定の場合();
407417 this.t進行描画・判定文字列2・判定ライン上指定の場合();
@@ -498,7 +508,6 @@
498508 public int nミス数;
499509 public int nパフェ数;
500510 private CAct演奏DrumsチップファイアD actChipFireD;
501- public CAct演奏スキルメーター actGraph; // #24074 2011.01.23 add ikanick
502511 public CAct演奏Drumsパッド actPad;
503512 public bool bフィルイン中;
504513 public bool bフィルイン終了;
@@ -581,6 +590,19 @@
581590 {
582591 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, this.actCombo.n現在のコンボ数.最高値.Drums, E楽器パート.DRUMS, bIsAutoPlay);
583592 }
593+ // #35411 2015.09.07 add chnmr0
594+ if( CDTXMania.listTargetGhsotLag.Drums != null &&
595+ CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.ONLINE &&
596+ CDTXMania.DTX.n可視チップ数.Drums > 0 )
597+ {
598+ // Online Stats の計算式
599+ this.actGraph.dbグラフ値現在_渡 = 100 *
600+ ( this.nヒット数・Auto含まない.Drums.Perfect * 17 +
601+ this.nヒット数・Auto含まない.Drums.Great * 7 +
602+ this.actCombo.n現在のコンボ数.最高値.Drums * 3 ) / ( 20.0 * CDTXMania.DTX.n可視チップ数.Drums );
603+ }
604+
605+ this.actStatusPanels.db現在の達成率.Drums = this.actGraph.dbグラフ値現在_渡;
584606 return eJudgeResult;
585607 }
586608
@@ -791,10 +813,9 @@
791813
792814 private void t進行描画・グラフ()
793815 {
794- if (CDTXMania.ConfigIni.bGraph有効)
816+ if( CDTXMania.ConfigIni.bGraph有効.Drums )
795817 {
796818 this.actGraph.On進行描画();
797- this.actGraph.db現在の判定数合計 = this.nヒット数・Auto含む.Drums.Perfect + this.nヒット数・Auto含む.Drums.Great + this.nヒット数・Auto含む.Drums.Good + this.nヒット数・Auto含む.Drums.Miss + this.nヒット数・Auto含む.Drums.Poor;
798819 }
799820 }
800821
@@ -3386,21 +3407,93 @@
33863407 }
33873408
33883409 int indexSevenLanes = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];
3410+ // #35411 chnmr0 modified
3411+ bool autoPlayCondition = ( configIni.bAutoPlay[ indexSevenLanes ] && !pChip.bHit );
3412+ bool UsePerfectGhost = true;
3413+ long ghostLag = 0;
33893414
3415+ if( CDTXMania.ConfigIni.eAutoGhost.Drums != EAutoGhostData.PERFECT &&
3416+ CDTXMania.listAutoGhostLag.Drums != null &&
3417+ 0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.listAutoGhostLag.Drums.Count)
33903418
3391- if( ( pChip.nチャンネル番号 == 0x1C ? ( configIni.bAutoPlay.LBD && !pChip.bHit ) : ( configIni.bAutoPlay[ indexSevenLanes ] && !pChip.bHit ) ) && ( pChip.nバーからの距離dot.Drums < 0 ) )
3419+ {
3420+ // ゴーストデータが有効 : ラグに合わせて判定
3421+ ghostLag = CDTXMania.listAutoGhostLag.Drums[pChip.n楽器パートでの出現順];
3422+ ghostLag = (ghostLag & 255) - 128;
3423+ ghostLag -= this.nInputAdjustTimeMs.Drums;
3424+ autoPlayCondition &= !pChip.bHit && (ghostLag + pChip.n発声時刻ms <= CSound管理.rc演奏用タイマ.n現在時刻ms);
3425+ UsePerfectGhost = false;
3426+ }
3427+ if( UsePerfectGhost )
3428+ {
3429+ // 従来の AUTO : バー下で判定
3430+ autoPlayCondition &= ( pChip.nバーからの距離dot.Drums < 0 );
3431+ }
3432+
3433+ if ( autoPlayCondition )
33923434 {
33933435 pChip.bHit = true;
3394- this.actLaneFlushD.Start( ( Eレーン ) indexSevenLanes, ( ( float ) CInput管理.n通常音量 ) / 127f );
3436+ this.actLaneFlushD.Start( (Eレーン) indexSevenLanes, ( (float) CInput管理.n通常音量 ) / 127f );
33953437 bool flag = this.bフィルイン中;
33963438 bool flag2 = this.bフィルイン中 && this.bフィルイン区間の最後のChipである( pChip );
33973439 //bool flag3 = flag2;
3398- // #31602 2013.6.24 yyagi 判定ラインの表示位置をずらしたら、チップのヒットエフェクトの表示もずらすために、nJudgeLine..を追加
3399- this.actChipFireD.Start( ( Eレーン )indexSevenLanes, flag, flag2, flag2, nJudgeLinePosY_delta.Drums );
3440+ // #31602 2013.6.24 yyagi 判定ラインの表示位置をずらしたら、チップのヒットエフェクトの表示もずらすために、nJudgeLine..を追加
3441+ this.actChipFireD.Start( (Eレーン)indexSevenLanes, flag, flag2, flag2, nJudgeLinePosY_delta.Drums );
34003442 this.actPad.Hit( this.nチャンネル0Atoパッド08[ pChip.nチャンネル番号 - 0x11 ] );
3401- this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );
3402- this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
3443+ this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );
3444+ this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);
3445+ //cInvisibleChip.StartSemiInvisible( E楽器パート.DRUMS );
34033446 }
3447+ // #35411 modify end
3448+
3449+ // #35411 2015.08.21 chnmr0 add
3450+ // 目標値グラフにゴーストの達成率を渡す
3451+ if (CDTXMania.ConfigIni.eTargetGhost.Drums != ETargetGhostData.NONE &&
3452+ CDTXMania.listTargetGhsotLag.Drums != null)
3453+ {
3454+ double val = 0;
3455+ if (CDTXMania.ConfigIni.eTargetGhost.Drums == ETargetGhostData.ONLINE)
3456+ {
3457+ if (CDTXMania.DTX.n可視チップ数.Drums > 0)
3458+ {
3459+ // Online Stats の計算式
3460+ val = 100 *
3461+ (this.nヒット数_TargetGhost.Drums.Perfect * 17 +
3462+ this.nヒット数_TargetGhost.Drums.Great * 7 +
3463+ this.n最大コンボ数_TargetGhost.Drums * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Drums);
3464+ }
3465+ }
3466+ else
3467+ {
3468+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
3469+ {
3470+ val = CScoreIni.t旧演奏型スキルを計算して返す(
3471+ CDTXMania.DTX.n可視チップ数.Drums,
3472+ this.nヒット数_TargetGhost.Drums.Perfect,
3473+ this.nヒット数_TargetGhost.Drums.Great,
3474+ this.nヒット数_TargetGhost.Drums.Good,
3475+ this.nヒット数_TargetGhost.Drums.Poor,
3476+ this.nヒット数_TargetGhost.Drums.Miss,
3477+ E楽器パート.DRUMS, new STAUTOPLAY());
3478+ }
3479+ else
3480+ {
3481+ val = CScoreIni.t演奏型スキルを計算して返す(
3482+ CDTXMania.DTX.n可視チップ数.Drums,
3483+ this.nヒット数_TargetGhost.Drums.Perfect,
3484+ this.nヒット数_TargetGhost.Drums.Great,
3485+ this.nヒット数_TargetGhost.Drums.Good,
3486+ this.nヒット数_TargetGhost.Drums.Poor,
3487+ this.nヒット数_TargetGhost.Drums.Miss,
3488+ this.n最大コンボ数_TargetGhost.Drums,
3489+ E楽器パート.DRUMS, new STAUTOPLAY());
3490+ }
3491+
3492+ }
3493+ if (val < 0) val = 0;
3494+ if (val > 100) val = 100;
3495+ this.actGraph.dbグラフ値目標_渡 = val;
3496+ }
34043497 return;
34053498 } // end of "if configIni.bDrums有効"
34063499 if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs (revision 542)
@@ -261,12 +261,14 @@
261261 }
262262 this.r現在の空うちギターChip = null;
263263 this.r現在の空うちベースChip = null;
264+ this.n最大コンボ数_TargetGhost = new STDGBVALUE<int>(); // #35411 2015.08.21 chnmr0 add
264265 for (int k = 0; k < 3; k++)
265266 {
266267 //for ( int n = 0; n < 5; n++ )
267268 {
268- this.nヒット数・Auto含まない[k] = new CHITCOUNTOFRANK();
269- this.nヒット数・Auto含む[k] = new CHITCOUNTOFRANK();
269+ this.nヒット数・Auto含まない[ k ] = new CHITCOUNTOFRANK();
270+ this.nヒット数・Auto含む[ k ] = new CHITCOUNTOFRANK();
271+ this.nヒット数_TargetGhost[ k ] = new CHITCOUNTOFRANK(); // #35411 2015.08.21 chnmr0 add
270272 }
271273 this.queWailing[k] = new Queue<CDTX.CChip>();
272274 this.r現在の歓声Chip[k] = null;
@@ -640,6 +642,7 @@
640642 public CAct演奏ステータスパネル共通 actStatusPanels;
641643 protected CAct演奏WailingBonus共通 actWailingBonus;
642644 public CAct演奏スクロール速度 act譜面スクロール速度;
645+ protected CAct演奏スキルメーター actGraph;
643646 protected bool bPAUSE;
644647 protected STDGBVALUE<bool> b演奏にMIDI入力を使った;
645648 protected STDGBVALUE<bool> b演奏にキーボードを使った;
@@ -709,6 +712,11 @@
709712 public CTexture tx判定画像anime_3;
710713 public CTexture txボーナスエフェクト;
711714
715+ //fork
716+ protected STDGBVALUE<CHITCOUNTOFRANK> nヒット数_TargetGhost; // #35411 2015.08.21 chnmr0 add
717+ protected STDGBVALUE<int> nコンボ数_TargetGhost;
718+ public STDGBVALUE<int> n最大コンボ数_TargetGhost;
719+
712720 protected CTexture tx背景;
713721 protected STDGBVALUE<int> nInputAdjustTimeMs; // #23580 2011.1.3 yyagi
714722 public STAUTOPLAY bIsAutoPlay; // #24239 2011.1.23 yyagi
@@ -771,12 +779,23 @@
771779 }
772780 }
773781
774- protected E判定 e指定時刻からChipのJUDGEを返す(long nTime, CDTX.CChip pChip, int nInputAdjustTime)
782+ protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime, bool saveLag = true )
775783 {
776784 if (pChip != null)
777785 {
778- pChip.nLag = (int)(nTime + nInputAdjustTime - pChip.n発声時刻ms); // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature
779- int nDeltaTime = Math.Abs(pChip.nLag);
786+ // #35411 2015.08.22 chnmr0 modified add check save lag flag for ghost
787+ int lag = (int)(nTime + nInputAdjustTime - pChip.n発声時刻ms);
788+ if (saveLag)
789+ {
790+ pChip.nLag = lag; // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature
791+ if (pChip.e楽器パート != E楽器パート.UNKNOWN)
792+ {
793+ pChip.nCurrentComboForGhost = this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート];
794+ }
795+ }
796+ // #35411 modify end
797+
798+ int nDeltaTime = Math.Abs( lag );
780799 if (nDeltaTime <= CDTXMania.nPerfect範囲ms)
781800 {
782801 return E判定.Perfect;
@@ -2325,11 +2344,57 @@
23252344
23262345 int nInputAdjustTime = (bPChipIsAutoPlay || (pChip.e楽器パート == E楽器パート.UNKNOWN)) ? 0 : this.nInputAdjustTimeMs[(int)pChip.e楽器パート];
23272346
2328- if (((pChip.e楽器パート != E楽器パート.UNKNOWN) && !pChip.bHit) &&
2329- ((pChip.nバーからの距離dot.Drums < 0) && (this.e指定時刻からChipのJUDGEを返す(CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime) == E判定.Miss)))
2347+ int instIndex = (int) pChip.e楽器パート;
2348+ if ( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&
2349+ ( ( pChip.nバーからの距離dot[ instIndex ] < 0 ) && ( this.e指定時刻からChipのJUDGEを返す( CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime ) == E判定.Miss ) ) )
2350+ {
2351+ this.tチップのヒット処理( CSound管理.rc演奏用タイマ.n現在時刻, pChip );
2352+ }
2353+
2354+ // #35411 chnmr0 add (ターゲットゴースト)
2355+ if ( CDTXMania.ConfigIni.eTargetGhost[instIndex] != ETargetGhostData.NONE &&
2356+ CDTXMania.listTargetGhsotLag[instIndex] != null &&
2357+ pChip.e楽器パート != E楽器パート.UNKNOWN &&
2358+ pChip.nバーからの距離dot[instIndex] < 0 )
23302359 {
2331- this.tチップのヒット処理(CSound管理.rc演奏用タイマ.n現在時刻, pChip);
2360+ if ( !pChip.bTargetGhost判定済み )
2361+ {
2362+ pChip.bTargetGhost判定済み = true;
2363+
2364+ int ghostLag = 128;
2365+ if( 0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.listTargetGhsotLag[instIndex].Count )
2366+ {
2367+ ghostLag = CDTXMania.listTargetGhsotLag[instIndex][pChip.n楽器パートでの出現順];
2368+ // 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)
2369+ if( ghostLag > 255 )
2370+ {
2371+ this.nコンボ数_TargetGhost[instIndex] = 0;
2372+ }
2373+ ghostLag = (ghostLag & 255) - 128;
2374+ }
2375+ else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )
2376+ {
2377+ ghostLag = 0;
2378+ }
2379+
2380+ if ( ghostLag <= 127 )
2381+ {
2382+ E判定 eJudge = this.e指定時刻からChipのJUDGEを返す(pChip.n発声時刻ms + ghostLag, pChip, 0, false);
2383+ this.nヒット数_TargetGhost[instIndex][(int)eJudge]++;
2384+ if (eJudge == E判定.Miss || eJudge == E判定.Poor)
2385+ {
2386+ this.n最大コンボ数_TargetGhost[instIndex] = Math.Max(this.n最大コンボ数_TargetGhost[instIndex], this.nコンボ数_TargetGhost[instIndex]);
2387+ this.nコンボ数_TargetGhost[instIndex] = 0;
2388+ }
2389+ else
2390+ {
2391+ this.n最大コンボ数_TargetGhost[instIndex] = Math.Max(this.n最大コンボ数_TargetGhost[instIndex], this.nコンボ数_TargetGhost[instIndex]);
2392+ this.nコンボ数_TargetGhost[instIndex]++;
2393+ }
2394+ }
2395+ }
23322396 }
2397+
23332398 switch (pChip.nチャンネル番号)
23342399 {
23352400 //描画順の都合上こちらから描画。
@@ -3824,9 +3889,50 @@
38243889 }
38253890 }
38263891 #endregion
3827- //if ( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )
3828- if ((!pChip.bHit) && (pChip.nバーからの距離dot[instIndex] < 0))
3892+ //if ( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )
3893+ //if ( ( !pChip.bHit ) && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )
3894+
3895+ // #35411 2015.08.20 chnmr0 modified
3896+ // 従来のAUTO処理に加えてプレーヤーゴーストの再生機能を追加
3897+ bool autoPlayCondition = (!pChip.bHit) && (pChip.nバーからの距離dot[instIndex] < 0);
3898+ if ( autoPlayCondition )
38293899 {
3900+ //cInvisibleChip.StartSemiInvisible( inst );
3901+ }
3902+
3903+ bool autoPick = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtPick : bIsAutoPlay.BsPick;
3904+ autoPlayCondition = !pChip.bHit && autoPick;
3905+ long ghostLag = 0;
3906+ bool bUsePerfectGhost = true;
3907+
3908+ if ( (pChip.e楽器パート == E楽器パート.GUITAR || pChip.e楽器パート == E楽器パート.BASS ) &&
3909+ CDTXMania.ConfigIni.eAutoGhost[(int)(pChip.e楽器パート)] != EAutoGhostData.PERFECT &&
3910+ CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート] != null &&
3911+ 0 <= pChip.n楽器パートでの出現順 &&
3912+ pChip.n楽器パートでの出現順 < CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート].Count)
3913+ {
3914+ // #35411 (mod) Ghost data が有効なので 従来のAUTOではなくゴーストのラグを利用
3915+ // 発生時刻と現在時刻からこのタイミングで演奏するかどうかを決定
3916+ ghostLag = CDTXMania.listAutoGhostLag[(int)pChip.e楽器パート][pChip.n楽器パートでの出現順];
3917+ bool resetCombo = ghostLag > 255;
3918+ ghostLag = (ghostLag & 255) - 128;
3919+ ghostLag -= (pChip.e楽器パート == E楽器パート.GUITAR ? nInputAdjustTimeMs.Guitar : nInputAdjustTimeMs.Bass);
3920+ autoPlayCondition &= (pChip.n発声時刻ms + ghostLag <= CSound管理.rc演奏用タイマ.n現在時刻ms);
3921+ if (resetCombo && autoPlayCondition )
3922+ {
3923+ this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート] = 0;
3924+ }
3925+ bUsePerfectGhost = false;
3926+ }
3927+
3928+ if( bUsePerfectGhost )
3929+ {
3930+ // 従来のAUTOを使用する場合
3931+ autoPlayCondition &= ( pChip.nバーからの距離dot[ instIndex ] < 0 );
3932+ }
3933+
3934+ if ( autoPlayCondition )
3935+ {
38303936 int lo = (inst == E楽器パート.GUITAR) ? 0 : 5; // lane offset
38313937 bool autoR = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtR : bIsAutoPlay.BsR;
38323938 bool autoG = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtG : bIsAutoPlay.BsG;
@@ -3833,7 +3939,6 @@
38333939 bool autoB = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtB : bIsAutoPlay.BsB;
38343940 bool autoY = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtY : bIsAutoPlay.BsY;
38353941 bool autoP = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtP : bIsAutoPlay.BsP;
3836- bool autoPick = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtPick : bIsAutoPlay.BsPick;
38373942 bool pushingR = CDTXMania.Pad.b押されている(inst, Eパッド.R);
38383943 bool pushingG = CDTXMania.Pad.b押されている(inst, Eパッド.G);
38393944 bool pushingB = CDTXMania.Pad.b押されている(inst, Eパッド.B);
@@ -3840,72 +3945,214 @@
38403945 bool pushingY = CDTXMania.Pad.b押されている(inst, Eパッド.Y);
38413946 bool pushingP = CDTXMania.Pad.b押されている(inst, Eパッド.P);
38423947
3843- #region [ Chip Fire effects ]
3844- bool bSuccessOPEN = bChipIsO && (autoR || !pushingR) && (autoG || !pushingG) && (autoB || !pushingB) && (autoY || !pushingY) && (autoP || !pushingP);
3845- if ((bChipHasR && (autoR || pushingR) && autoPick) || bSuccessOPEN)
3948+ #region [ Chip Fire effects (auto時用) ]
3949+ // autoPickでない時の処理は、 t入力処理・ギターベース(E楽器パート) で行う
3950+ bool bSuccessOPEN = bChipIsO && ( autoR || !pushingR ) && ( autoG || !pushingG ) && ( autoB || !pushingB ) && ( autoY || !pushingY ) && ( autoP || !pushingP );
3951+ if ( ( bChipHasR && ( autoR || pushingR ) && autoPick ) || bSuccessOPEN && autoPick )
3952+ {
3953+ this.actChipFireGB.Start( 0 + lo );
3954+ }
3955+ if ( ( bChipHasG && ( autoG || pushingG ) && autoPick ) || bSuccessOPEN && autoPick )
3956+ {
3957+ this.actChipFireGB.Start( 1 + lo );
3958+ }
3959+ if ( ( bChipHasB && ( autoB || pushingB ) && autoPick ) || bSuccessOPEN && autoPick )
3960+ {
3961+ this.actChipFireGB.Start( 2 + lo );
3962+ }
3963+ if ( ( bChipHasY && ( autoY || pushingY ) && autoPick ) || bSuccessOPEN && autoPick )
3964+ {
3965+ this.actChipFireGB.Start( 3 + lo );
3966+ }
3967+ if ( ( bChipHasP && ( autoP || pushingP ) && autoPick ) || bSuccessOPEN && autoPick )
3968+ {
3969+ this.actChipFireGB.Start( 4 + lo );
3970+ }
3971+ #endregion
3972+ #region [ autopick ]
3973+ {
3974+ bool bMiss = true;
3975+ if ( bChipHasR == autoR && bChipHasG == autoG && bChipHasB == autoB ) // autoレーンとチップレーン一致時はOK
3976+ { // この条件を加えないと、同時に非autoレーンを押下している時にNGとなってしまう。
3977+ bMiss = false;
3978+ }
3979+ else if ( ( autoR || ( bChipHasR == pushingR ) ) && ( autoG || ( bChipHasG == pushingG ) ) && ( autoB || ( bChipHasB == pushingB ) ) )
3980+ // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
3981+ {
3982+ bMiss = false;
3983+ }
3984+ else if ( ( ( bChipIsO == true ) && ( !pushingR | autoR ) && ( !pushingG | autoG ) && ( !pushingB | autoB ) ) ) // OPEN時
3985+ {
3986+ bMiss = false;
3987+ }
3988+ pChip.bHit = true;
3989+ this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, inst, dTX.nモニタを考慮した音量( inst ), false, bMiss );
3990+ this.r次にくるギターChip = null;
3991+ if ( !bMiss )
3992+ {
3993+ this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);
3994+ }
3995+ else
3996+ {
3997+ pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入
3998+ this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip, false);
3999+ }
4000+ int chWailingChip = ( inst == E楽器パート.GUITAR ) ? 0x28 : 0xA8;
4001+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip(pChip.n発声時刻ms + ghostLag, chWailingChip, this.nInputAdjustTimeMs[instIndex], 140);
4002+ if ( item != null && !bMiss )
4003+ {
4004+ this.queWailing[ instIndex ].Enqueue( item );
4005+ }
4006+ }
4007+ #endregion
4008+ if ( autoPick )
4009+ {
4010+ bool bMiss = true;
4011+ if ( bChipHasR == autoR && bChipHasG == autoG && bChipHasB == autoB && bChipHasY == autoY && bChipHasP == autoP ) // autoレーンとチップレーン一致時はOK
4012+ { // この条件を加えないと、同時に非autoレーンを押下している時にNGとなってしまう。
4013+ bMiss = false;
4014+ }
4015+ else if ( ( autoR || ( bChipHasR == pushingR ) ) && ( autoG || ( bChipHasG == pushingG ) ) && ( autoB || ( bChipHasB == pushingB ) ) && ( autoY || ( bChipHasY == pushingY ) ) && ( autoP || bChipHasP == pushingP ) )
4016+ // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
4017+ {
4018+ bMiss = false;
4019+ }
4020+ else if ( ( ( bChipIsO == true ) && ( !pushingR | autoR ) && ( !pushingG | autoG ) && ( !pushingB | autoB ) && ( !pushingY | autoY) && ( !pushingP | autoP) ) ) // OPEN時
4021+ {
4022+ bMiss = false;
4023+ }
4024+ pChip.bHit = true;
4025+ this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, inst, dTX.nモニタを考慮した音量( inst ), false, bMiss );
4026+ this.r次にくるギターChip = null;
4027+ if ( !bMiss )
4028+ {
4029+ this.tチップのヒット処理( pChip.n発声時刻ms + ghostLag, pChip );
4030+ }
4031+ else
4032+ {
4033+ pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入
4034+ this.tチップのヒット処理( pChip.n発声時刻ms + ghostLag, pChip, false );
4035+ }
4036+ int chWailingChip = ( inst == E楽器パート.GUITAR ) ? 0x28 : 0xA8;
4037+ CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip( pChip.n発声時刻ms + ghostLag, chWailingChip, this.nInputAdjustTimeMs[ instIndex ], 140 );
4038+ if ( item != null && !bMiss )
4039+ {
4040+ this.queWailing[ instIndex ].Enqueue( item );
4041+ }
4042+ }
4043+ // #35411 modify end
4044+ }
4045+
4046+ if( pChip.e楽器パート == E楽器パート.GUITAR && CDTXMania.ConfigIni.bGraph有効.Guitar )
4047+ {
4048+ #region[ ギターゴースト ]
4049+ if (CDTXMania.ConfigIni.eTargetGhost.Guitar != ETargetGhostData.NONE &&
4050+ CDTXMania.listTargetGhsotLag.Guitar != null)
38464051 {
3847- this.actChipFireGB.Start(0 + lo);
3848- }
3849- if ((bChipHasG && (autoG || pushingG) && autoPick) || bSuccessOPEN)
3850- {
3851- this.actChipFireGB.Start(1 + lo);
3852- }
3853- if ((bChipHasB && (autoB || pushingB) && autoPick) || bSuccessOPEN)
3854- {
3855- this.actChipFireGB.Start(2 + lo);
3856- }
3857- if ((bChipHasY && (autoY || pushingY) && autoPick) || bSuccessOPEN)
3858- {
3859- this.actChipFireGB.Start(3 + lo);
3860- }
3861- if ((bChipHasP && (autoP || pushingP) && autoPick) || bSuccessOPEN)
3862- {
3863- this.actChipFireGB.Start(4 + lo);
3864- }
3865- #endregion
3866- if (autoPick)
3867- {
3868- bool bMiss = true;
3869- if (bChipHasR == autoR && bChipHasG == autoG && bChipHasB == autoB && bChipHasY == autoY && bChipHasP == autoP) // autoレーンとチップレーン一致時はOK
3870- { // この条件を加えないと、同時に非autoレーンを押下している時にNGとなってしまう。
3871- bMiss = false;
3872- }
3873- else if ((autoR || (bChipHasR == pushingR)) && (autoG || (bChipHasG == pushingG)) && (autoB || (bChipHasB == pushingB)) && (autoY || (bChipHasY == pushingY)) && (autoP || bChipHasP == pushingP))
3874- // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
4052+ double val = 0;
4053+ if (CDTXMania.ConfigIni.eTargetGhost.Guitar == ETargetGhostData.ONLINE)
38754054 {
3876- bMiss = false;
4055+ if (CDTXMania.DTX.n可視チップ数.Guitar > 0)
4056+ {
4057+ // Online Stats の計算式
4058+ val = 100 *
4059+ (this.nヒット数_TargetGhost.Guitar.Perfect * 17 +
4060+ this.nヒット数_TargetGhost.Guitar.Great * 7 +
4061+ this.n最大コンボ数_TargetGhost.Guitar * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Guitar);
4062+ }
38774063 }
3878- else if (((bChipIsO == true) && (!pushingR | autoR) && (!pushingG | autoG) && (!pushingB | autoB) && (!pushingY | autoY) && (!pushingP | autoP))) // OPEN時
4064+ else
38794065 {
3880- bMiss = false;
4066+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
4067+ {
4068+ val = CScoreIni.t旧演奏型スキルを計算して返す(
4069+ CDTXMania.DTX.n可視チップ数.Guitar,
4070+ this.nヒット数_TargetGhost.Guitar.Perfect,
4071+ this.nヒット数_TargetGhost.Guitar.Great,
4072+ this.nヒット数_TargetGhost.Guitar.Good,
4073+ this.nヒット数_TargetGhost.Guitar.Poor,
4074+ this.nヒット数_TargetGhost.Guitar.Miss,
4075+ E楽器パート.GUITAR, new STAUTOPLAY());
4076+ }
4077+ else
4078+ {
4079+ val = CScoreIni.t演奏型スキルを計算して返す(
4080+ CDTXMania.DTX.n可視チップ数.Guitar,
4081+ this.nヒット数_TargetGhost.Guitar.Perfect,
4082+ this.nヒット数_TargetGhost.Guitar.Great,
4083+ this.nヒット数_TargetGhost.Guitar.Good,
4084+ this.nヒット数_TargetGhost.Guitar.Poor,
4085+ this.nヒット数_TargetGhost.Guitar.Miss,
4086+ this.n最大コンボ数_TargetGhost.Guitar,
4087+ E楽器パート.GUITAR, new STAUTOPLAY());
4088+ }
4089+
38814090 }
3882- pChip.bHit = true;
3883- this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量(inst), false, bMiss);
3884- this.r次にくるギターChip = null;
3885- if (!bMiss)
4091+ if (val < 0) val = 0;
4092+ if (val > 100) val = 100;
4093+ this.actGraph.dbグラフ値目標_渡 = val;
4094+ }
4095+ #endregion
4096+ }
4097+ else if( pChip.e楽器パート == E楽器パート.BASS && CDTXMania.ConfigIni.bGraph有効.Bass )
4098+ {
4099+ #region[ ベースゴースト ]
4100+ if (CDTXMania.ConfigIni.eTargetGhost.Bass != ETargetGhostData.NONE &&
4101+ CDTXMania.listTargetGhsotLag.Bass != null)
4102+ {
4103+ double val = 0;
4104+ if (CDTXMania.ConfigIni.eTargetGhost.Bass == ETargetGhostData.ONLINE)
38864105 {
3887- this.tチップのヒット処理(pChip.n発声時刻ms, pChip);
4106+ if (CDTXMania.DTX.n可視チップ数.Bass > 0)
4107+ {
4108+ // Online Stats の計算式
4109+ val = 100 *
4110+ (this.nヒット数_TargetGhost.Bass.Perfect * 17 +
4111+ this.nヒット数_TargetGhost.Bass.Great * 7 +
4112+ this.n最大コンボ数_TargetGhost.Bass * 3) / (20.0 * CDTXMania.DTX.n可視チップ数.Bass);
4113+ }
38884114 }
38894115 else
38904116 {
3891- pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入
3892- this.tチップのヒット処理(pChip.n発声時刻ms, pChip, false);
4117+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
4118+ {
4119+ val = CScoreIni.t旧演奏型スキルを計算して返す(
4120+ CDTXMania.DTX.n可視チップ数.Bass,
4121+ this.nヒット数_TargetGhost.Bass.Perfect,
4122+ this.nヒット数_TargetGhost.Bass.Great,
4123+ this.nヒット数_TargetGhost.Bass.Good,
4124+ this.nヒット数_TargetGhost.Bass.Poor,
4125+ this.nヒット数_TargetGhost.Bass.Miss,
4126+ E楽器パート.BASS, new STAUTOPLAY());
4127+ }
4128+ else
4129+ {
4130+ val = CScoreIni.t演奏型スキルを計算して返す(
4131+ CDTXMania.DTX.n可視チップ数.Bass,
4132+ this.nヒット数_TargetGhost.Bass.Perfect,
4133+ this.nヒット数_TargetGhost.Bass.Great,
4134+ this.nヒット数_TargetGhost.Bass.Good,
4135+ this.nヒット数_TargetGhost.Bass.Poor,
4136+ this.nヒット数_TargetGhost.Bass.Miss,
4137+ this.n最大コンボ数_TargetGhost.Bass,
4138+ E楽器パート.BASS, new STAUTOPLAY());
4139+ }
4140+
38934141 }
3894- int chWailingChip = (inst == E楽器パート.GUITAR) ? 0x28 : 0xA8;
3895- CDTX.CChip item = this.r指定時刻に一番近い未ヒットChip(pChip.n発声時刻ms, chWailingChip, this.nInputAdjustTimeMs[instIndex], 140);
3896- if (item != null && !bMiss)
3897- {
3898- this.queWailing[instIndex].Enqueue(item);
3899- }
4142+ if (val < 0) val = 0;
4143+ if (val > 100) val = 100;
4144+ this.actGraph.dbグラフ値目標_渡 = val;
39004145 }
4146+ #endregion
39014147 }
3902- return;
3903- } // end of "if configIni.bGuitar有効"
3904- if (!pChip.bHit && (pChip.nバーからの距離dot[instIndex] < 0)) // Guitar/Bass無効の場合は、自動演奏する
3905- {
3906- pChip.bHit = true;
3907- this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量(inst));
3908- }
4148+
4149+ return;
4150+ } // end of "if configIni.bGuitar有効"
4151+ if ( !pChip.bHit && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) ) // Guitar/Bass無効の場合は、自動演奏する
4152+ {
4153+ pChip.bHit = true;
4154+ this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量( inst ) );
4155+ }
39094156 }
39104157
39114158
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏AVI.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏AVI.cs (revision 542)
@@ -3,6 +3,7 @@
33 using System.Text;
44 using System.Runtime.InteropServices;
55 using System.Drawing;
6+using System.Diagnostics;
67 using System.IO;
78 using SlimDX;
89 using SlimDX.Direct3D9;
@@ -17,235 +18,305 @@
1718
1819 public CAct演奏AVI()
1920 {
20- base.list子Activities.Add(this.actFill = new CAct演奏Drumsフィルインエフェクト());
21- base.list子Activities.Add(this.actPanel = new CAct演奏パネル文字列());
21+ base.list子Activities.Add( this.actFill = new CAct演奏Drumsフィルインエフェクト() );
22+ base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );
2223 base.b活性化してない = true;
2324 }
2425
2526
2627 // メソッド
27-
28+
2829 public void Start(int nチャンネル番号, CDTX.CAVI rAVI, CDTX.CDirectShow dsBGV, int n開始サイズW, int n開始サイズH, int n終了サイズW, int n終了サイズH, int n画像側開始位置X, int n画像側開始位置Y, int n画像側終了位置X, int n画像側終了位置Y, int n表示側開始位置X, int n表示側開始位置Y, int n表示側終了位置X, int n表示側終了位置Y, int n総移動時間ms, int n移動開始時刻ms)
2930 {
30- if ( ( nチャンネル番号 == 0x54 || nチャンネル番号 == 0x5A ) && CDTXMania.ConfigIni.bDirectShowMode == false && CDTXMania.ConfigIni.bAVI有効 )
31+ //2016.01.21 kairera0467 VfW時代のコードを除去+大改造
32+
33+ this.rAVI = rAVI;
34+ #region[ アスペクト比からどっちを使うか判別 ]
35+ // 旧DShowモードを使っていて、旧規格クリップだったら新DShowモードを使う。
36+ if( CDTXMania.ConfigIni.bDirectShowMode == false )
3137 {
32- this.rAVI = rAVI;
33- //this.dsBGV.dshow.Dispose();
34- this.n開始サイズW = n開始サイズW;
35- this.n開始サイズH = n開始サイズH;
36- this.n終了サイズW = n終了サイズW;
37- this.n終了サイズH = n終了サイズH;
38- this.n画像側開始位置X = n画像側開始位置X;
39- this.n画像側開始位置Y = n画像側開始位置Y;
40- this.n画像側終了位置X = n画像側終了位置X;
41- this.n画像側終了位置Y = n画像側終了位置Y;
42- this.n表示側開始位置X = n表示側開始位置X;
43- this.n表示側開始位置Y = n表示側開始位置Y;
44- this.n表示側終了位置X = n表示側終了位置X;
45- this.n表示側終了位置Y = n表示側終了位置Y;
46- this.n総移動時間ms = n総移動時間ms;
47- this.n移動開始時刻ms = (n移動開始時刻ms != -1) ? n移動開始時刻ms : CSound管理.rc演奏用タイマ.n現在時刻;
48- this.n前回表示したフレーム番号 = -1;
49- if ((this.rAVI != null) && (this.rAVI.avi != null))
38+ this.fClipアスペクト比 = ( (float)rAVI.avi.nフレーム幅 / (float)rAVI.avi.nフレーム高さ );
39+ this.bUseMRenderer = false;
40+ }
41+ else
42+ {
43+ this.fClipアスペクト比 = ( (float)dsBGV.dshow.n幅px / (float)dsBGV.dshow.n高さpx );
44+ if( this.fClipアスペクト比 < 1.77f )
45+ this.bUseMRenderer = false;
46+ }
47+ #endregion
48+
49+ if( nチャンネル番号 == 0x54 || nチャンネル番号 == 0x5A )
50+ {
51+ if( this.bUseMRenderer )
5052 {
51- float f拡大率x;
52- float f拡大率y;
53- this.framewidth = this.rAVI.avi.nフレーム幅;
54- this.frameheight = this.rAVI.avi.nフレーム高さ;
55- this.fAVIアスペクト比 = ((float)this.framewidth) / ((float)this.frameheight);
56- if (this.tx描画用 == null)
53+ //MemoryRenderer
54+ this.dsBGV = dsBGV;
55+ if( this.dsBGV != null && this.dsBGV.dshow != null )
5756 {
58- this.tx描画用 = new CTexture(CDTXMania.app.Device, (int)this.framewidth, (int)this.frameheight, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Managed);
59- }
60- if (fAVIアスペクト比 < 1.77f)
61- {
62- //旧企画クリップだった場合
63- this.ratio1 = 720f / ((float)this.frameheight);
64- this.position = (int)((1280f - (this.framewidth * this.ratio1)) / 2f);
65- int num = (int)(this.framewidth * this.ratio1);
66- if (num <= 565)
57+ this.framewidth = (uint)this.dsBGV.dshow.n幅px;
58+ this.frameheight = (uint)this.dsBGV.dshow.n高さpx;
59+ float f拡大率x;
60+ float f拡大率y;
61+
62+ if ( this.tx描画用 == null )
6763 {
68- this.position = 295 + ((int)((565f - (this.framewidth * this.ratio1)) / 2f));
69- this.i1 = 0;
70- this.i2 = (int)this.framewidth;
71- this.rec = new Rectangle(0, 0, 0, 0);
72- this.rec3 = new Rectangle(0, 0, 0, 0);
73- this.rec2 = new Rectangle(0, 0, (int)this.framewidth, (int)this.frameheight);
64+ try
65+ {
66+ this.tx描画用 = new CTexture( CDTXMania.app.Device, (int)this.framewidth, (int)this.frameheight, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Managed );
67+ }
68+ catch ( CTextureCreateFailedException e )
69+ {
70+ Trace.TraceError( "CActAVI: OnManagedリソースの作成(): " + e.Message );
71+ this.tx描画用 = null;
72+ }
7473 }
75- else
76- {
77- this.position = 295 - ((int)(((this.framewidth * this.ratio1) - 565f) / 2f));
78- this.i1 = (int)(((float)(295 - this.position)) / this.ratio1);
79- this.i2 = (int)((565f / ((float)num)) * this.framewidth);
80- this.rec = new Rectangle(0, 0, this.i1, (int)this.frameheight);
81- this.rec3 = new Rectangle(this.i1 + this.i2, 0, (((int)this.framewidth) - this.i1) - this.i2, (int)this.frameheight);
82- this.rec2 = new Rectangle(this.i1, 0, this.i2, (int)this.frameheight);
83- }
84- this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
85- this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
86- }
87- else
88- {
74+
75+ #region[ リサイズ処理 ]
8976 //ワイドクリップの処理
90- this.ratio1 = 1280f / ((float)this.framewidth);
91- this.position = (int)((720f - (this.frameheight * this.ratio1)) / 2f);
92- this.i1 = (int)(this.framewidth * 0.23046875);
93- this.i2 = (int)(this.framewidth * 0.44140625);
94- this.rec = new Rectangle(0, 0, this.i1, (int)this.frameheight);
95- this.rec2 = new Rectangle(this.i1, 0, this.i2, (int)this.frameheight);
96- this.rec3 = new Rectangle(this.i1 + this.i2, 0, (((int)this.framewidth) - this.i1) - this.i2, (int)this.frameheight);
77+ this.ratio1 = 1280.0f / ( (float)this.framewidth );
78+ this.position = (int)( ( 720.0f - ( this.frameheight * this.ratio1 ) ) / 2.0f );
79+ this.i1 = (int)( this.framewidth * 0.23046875 );
80+ this.i2 = (int)( this.framewidth * 0.44140625 );
81+ this.rec = new Rectangle( 0, 0, this.i1, (int)this.frameheight );
82+ this.rec2 = new Rectangle( this.i1, 0, this.i2, (int)this.frameheight );
83+ this.rec3 = new Rectangle( this.i1 + this.i2, 0, ( ( (int)this.framewidth ) - this.i1 ) - this.i2, (int)this.frameheight );
9784 this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
9885 this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
99- }
10086
87+ if( this.framewidth > 420 )
88+ f拡大率x = 420f / ( (float)this.framewidth );
89+ else
90+ f拡大率x = 1f;
10191
102- if (this.framewidth > 420)
103- {
104- f拡大率x = 420f / ((float)this.framewidth);
92+ if( this.frameheight > 580 )
93+ f拡大率y = 580f / ( (float)this.frameheight );
94+ else
95+ f拡大率y = 1f;
96+
97+ if( f拡大率x > f拡大率y )
98+ f拡大率x = f拡大率y;
99+ else
100+ f拡大率y = f拡大率x;
101+
102+ this.smallvc = new Vector3( f拡大率x, f拡大率y, 1.0f );
103+ #endregion
105104 }
106- else
105+
106+ if ( fClipアスペクト比 > 1.77f && this.dsBGV != null && this.dsBGV.dshow != null )
107107 {
108- f拡大率x = 1f;
108+ this.dsBGV.dshow.t再生開始();
109+ this.bDShowクリップを再生している = true;
109110 }
110- if (this.frameheight > 580)
111+ if ( fClipアスペクト比 < 1.77f && this.dsBGV != null && this.dsBGV.dshow != null )
111112 {
112- f拡大率y = 580f / ((float)this.frameheight);
113+ this.dsBGV.dshow.t再生開始();
114+ this.bDShowクリップを再生している = true;
113115 }
114- else
115- {
116- f拡大率y = 1f;
117- }
118- if (f拡大率x > f拡大率y)
119- {
120- f拡大率x = f拡大率y;
121- }
122- else
123- {
124- f拡大率y = f拡大率x;
125- }
126-
127- this.smallvc = new Vector3(f拡大率x, f拡大率y, 1f);
128- this.vclip = new Vector3(1.42f, 1.42f, 1f);
129116 }
130- }
131- else if ( ( nチャンネル番号 == 0x54 || nチャンネル番号 == 0x5A ) && CDTXMania.ConfigIni.bDirectShowMode && CDTXMania.ConfigIni.bAVI有効 )
132- {
133- this.rAVI = rAVI;
134- this.dsBGV = dsBGV;
135- if (this.dsBGV != null && this.dsBGV.dshow != null)
117+ else if( this.bUseCAviDS )
136118 {
137- this.framewidth = (uint)this.dsBGV.dshow.n幅px;
138- this.frameheight = (uint)this.dsBGV.dshow.n高さpx;
139- float f拡大率x;
140- float f拡大率y;
141- this.fAVIアスペクト比 = ((float)this.framewidth) / ((float)this.frameheight);
119+ //CAviDS
120+ this.rAVI = rAVI;
121+ this.n開始サイズW = n開始サイズW;
122+ this.n開始サイズH = n開始サイズH;
123+ this.n終了サイズW = n終了サイズW;
124+ this.n終了サイズH = n終了サイズH;
125+ this.n画像側開始位置X = n画像側開始位置X;
126+ this.n画像側開始位置Y = n画像側開始位置Y;
127+ this.n画像側終了位置X = n画像側終了位置X;
128+ this.n画像側終了位置Y = n画像側終了位置Y;
129+ this.n表示側開始位置X = n表示側開始位置X;
130+ this.n表示側開始位置Y = n表示側開始位置Y;
131+ this.n表示側終了位置X = n表示側終了位置X;
132+ this.n表示側終了位置Y = n表示側終了位置Y;
133+ this.n総移動時間ms = n総移動時間ms;
134+ this.n移動開始時刻ms = ( n移動開始時刻ms != -1 ) ? n移動開始時刻ms : CSound管理.rc演奏用タイマ.n現在時刻;
142135
143- if (fAVIアスペクト比 < 1.77f)
136+ if( ( this.rAVI != null ) && ( this.rAVI.avi != null ) )
144137 {
145- #region[ 旧規格クリップ時の処理。結果的には面倒な処理なんだよな・・・・ ]
146- this.n開始サイズW = n開始サイズW;
147- this.n開始サイズH = n開始サイズH;
148- this.n終了サイズW = n終了サイズW;
149- this.n終了サイズH = n終了サイズH;
150- this.n画像側開始位置X = n画像側開始位置X;
151- this.n画像側開始位置Y = n画像側開始位置Y;
152- this.n画像側終了位置X = n画像側終了位置X;
153- this.n画像側終了位置Y = n画像側終了位置Y;
154- this.n表示側開始位置X = n表示側開始位置X;
155- this.n表示側開始位置Y = n表示側開始位置Y;
156- this.n表示側終了位置X = n表示側終了位置X;
157- this.n表示側終了位置Y = n表示側終了位置Y;
158- this.n総移動時間ms = n総移動時間ms;
159- this.n移動開始時刻ms = (n移動開始時刻ms != -1) ? n移動開始時刻ms : CSound管理.rc演奏用タイマ.n現在時刻;
160- this.n前回表示したフレーム番号 = -1;
138+ float f拡大率x;
139+ float f拡大率y;
140+ this.framewidth = (uint)this.rAVI.avi.nフレーム幅;
141+ this.frameheight = (uint)this.rAVI.avi.nフレーム高さ;
142+ if( this.tx描画用 == null )
143+ {
144+ this.tx描画用 = new CTexture( CDTXMania.app.Device, (int)this.framewidth, (int)this.frameheight, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Managed );
145+ }
161146
162- this.vclip = new Vector3(1.42f, 1.42f, 1f);
163- this.dsBGV = null;
164- #endregion
147+ if( fClipアスペクト比 < 1.77f )
148+ {
149+ //旧規格クリップだった場合
150+ this.ratio1 = 720f / ( (float)this.frameheight );
151+ this.position = (int)( ( 1280f - ( this.framewidth * this.ratio1 ) ) / 2f );
152+ int num = (int)( this.framewidth * this.ratio1 );
153+ if( num <= 565 )
154+ {
155+ this.position = 295 + ( (int)( ( 565f - ( this.framewidth * this.ratio1 ) ) / 2f ) );
156+ this.i1 = 0;
157+ this.i2 = (int)this.framewidth;
158+ this.rec = new Rectangle( 0, 0, 0, 0 );
159+ this.rec3 = new Rectangle( 0, 0, 0, 0 );
160+ this.rec2 = new Rectangle( 0, 0, (int)this.framewidth, (int)this.frameheight );
161+ }
162+ else
163+ {
164+ this.position = 295 - ( (int)( ( ( this.framewidth * this.ratio1 ) - 565f ) / 2f ) );
165+ this.i1 = (int)( ( (float)( 295 - this.position ) ) / this.ratio1 );
166+ this.i2 = (int)( ( 565f / ( (float)num ) ) * this.framewidth );
167+ this.rec = new Rectangle( 0, 0, this.i1, (int)this.frameheight );
168+ this.rec3 = new Rectangle( this.i1 + this.i2, 0, ( ( (int)this.framewidth ) - this.i1 ) - this.i2, (int)this.frameheight );
169+ this.rec2 = new Rectangle( this.i1, 0, this.i2, (int)this.frameheight );
170+ }
171+ this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
172+ this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
173+ }
174+ else
175+ {
176+ //ワイドクリップの処理
177+ this.ratio1 = 1280f / ( (float)this.framewidth );
178+ this.position = (int)( ( 720f - ( this.frameheight * this.ratio1 ) ) / 2f );
179+ this.i1 = (int)( this.framewidth * 0.23046875 );
180+ this.i2 = (int)( this.framewidth * 0.44140625 );
181+ this.rec = new Rectangle( 0, 0, this.i1, (int)this.frameheight );
182+ this.rec2 = new Rectangle( this.i1, 0, this.i2, (int)this.frameheight );
183+ this.rec3 = new Rectangle( this.i1 + this.i2, 0, ( ( (int)this.framewidth ) - this.i1 ) - this.i2, (int)this.frameheight );
184+ this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
185+ this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
186+ }
187+
188+
189+ if( this.framewidth > 420 )
190+ {
191+ f拡大率x = 420f / ( (float)this.framewidth );
192+ }
193+ else
194+ {
195+ f拡大率x = 1f;
196+ }
197+ if( this.frameheight > 580 )
198+ {
199+ f拡大率y = 580f / ( (float)this.frameheight );
200+ }
201+ else
202+ {
203+ f拡大率y = 1f;
204+ }
205+ if( f拡大率x > f拡大率y )
206+ {
207+ f拡大率x = f拡大率y;
208+ }
209+ else
210+ {
211+ f拡大率y= f拡大率x;
212+ }
213+
214+ this.smallvc = new Vector3( f拡大率x, f拡大率y, 1f );
215+ this.vclip = new Vector3( 1.42f, 1.42f, 1f );
216+ //this.rAVI.avi.Run();
165217 }
166- if (this.tx描画用 == null)
218+ }
219+ else
220+ {
221+ this.rAVI = rAVI;
222+ this.n開始サイズW = n開始サイズW;
223+ this.n開始サイズH = n開始サイズH;
224+ this.n終了サイズW = n終了サイズW;
225+ this.n終了サイズH = n終了サイズH;
226+ this.n画像側開始位置X = n画像側開始位置X;
227+ this.n画像側開始位置Y = n画像側開始位置Y;
228+ this.n画像側終了位置X = n画像側終了位置X;
229+ this.n画像側終了位置Y = n画像側終了位置Y;
230+ this.n表示側開始位置X = n表示側開始位置X;
231+ this.n表示側開始位置Y = n表示側開始位置Y;
232+ this.n表示側終了位置X = n表示側終了位置X;
233+ this.n表示側終了位置Y = n表示側終了位置Y;
234+ this.n総移動時間ms = n総移動時間ms;
235+ this.n移動開始時刻ms = ( n移動開始時刻ms != -1 ) ? n移動開始時刻ms : CSound管理.rc演奏用タイマ.n現在時刻;
236+ this.n前回表示したフレーム番号 = -1;
237+ if( ( this.rAVI != null ) && ( this.rAVI.avi != null ) )
167238 {
168- this.tx描画用 = new CTexture(CDTXMania.app.Device, (int)this.framewidth, (int)this.frameheight, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Managed);
169- }
170-
171- #region[ リサイズ処理 ]
172- if (fAVIアスペクト比 < 1.77f)
173- {
174- //旧企画クリップだった場合
175- this.ratio1 = 720f / ((float)this.frameheight);
176- this.position = (int)((1280f - (this.framewidth * this.ratio1)) / 2f);
177- int num = (int)(this.framewidth * this.ratio1);
178- if (num <= 565)
239+ float f拡大率x;
240+ float f拡大率y;
241+ this.framewidth = this.rAVI.avi.nフレーム幅;
242+ this.frameheight = this.rAVI.avi.nフレーム高さ;
243+ if( this.tx描画用 == null )
179244 {
180- this.position = 295 + ((int)((565f - (this.framewidth * this.ratio1)) / 2f));
181- this.i1 = 0;
182- this.i2 = (int)this.framewidth;
183- this.rec = new Rectangle(0, 0, 0, 0);
184- this.rec3 = new Rectangle(0, 0, 0, 0);
185- this.rec2 = new Rectangle(0, 0, (int)this.framewidth, (int)this.frameheight);
245+ this.tx描画用 = new CTexture( CDTXMania.app.Device, (int)this.framewidth, (int)this.frameheight, CDTXMania.app.GraphicsDeviceManager.CurrentSettings.BackBufferFormat, Pool.Managed );
186246 }
247+ if( fClipアスペクト比 < 1.77f )
248+ {
249+ //旧規格クリップだった場合
250+ this.ratio1 = 720.0f / this.frameheight;
251+ this.position = (int)( ( 1280.0f - ( this.framewidth * this.ratio1 ) ) / 2.0f );
252+ int num = (int)( this.framewidth * this.ratio1 );
253+ if( num <= 565 )
254+ {
255+ this.position = 295 + ( (int)( ( 565f - ( this.framewidth * this.ratio1 ) ) / 2f ) );
256+ this.i1 = 0;
257+ this.i2 = (int)this.framewidth;
258+ this.rec = new Rectangle(0, 0, 0, 0);
259+ this.rec3 = new Rectangle(0, 0, 0, 0);
260+ this.rec2 = new Rectangle(0, 0, (int)this.framewidth, (int)this.frameheight);
261+ }
262+ else
263+ {
264+ this.position = 295 - ((int)(((this.framewidth * this.ratio1) - 565f) / 2f));
265+ this.i1 = (int)(((float)(295 - this.position)) / this.ratio1);
266+ this.i2 = (int)((565f / ((float)num)) * this.framewidth);
267+ this.rec = new Rectangle(0, 0, this.i1, (int)this.frameheight);
268+ this.rec3 = new Rectangle(this.i1 + this.i2, 0, (((int)this.framewidth) - this.i1) - this.i2, (int)this.frameheight);
269+ this.rec2 = new Rectangle(this.i1, 0, this.i2, (int)this.frameheight);
270+ }
271+ this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
272+ this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
273+ }
187274 else
188275 {
189- this.position = 295 - ((int)(((this.framewidth * this.ratio1) - 565f) / 2f));
190- this.i1 = (int)(((float)(295 - this.position)) / this.ratio1);
191- this.i2 = (int)((565f / ((float)num)) * this.framewidth);
276+ //ワイドクリップの処理
277+ this.ratio1 = 1280f / ((float)this.framewidth);
278+ this.position = (int)((720f - (this.frameheight * this.ratio1)) / 2f);
279+ this.i1 = (int)(this.framewidth * 0.23046875);
280+ this.i2 = (int)(this.framewidth * 0.44140625);
192281 this.rec = new Rectangle(0, 0, this.i1, (int)this.frameheight);
282+ this.rec2 = new Rectangle(this.i1, 0, this.i2, (int)this.frameheight);
193283 this.rec3 = new Rectangle(this.i1 + this.i2, 0, (((int)this.framewidth) - this.i1) - this.i2, (int)this.frameheight);
194- this.rec2 = new Rectangle(this.i1, 0, this.i2, (int)this.frameheight);
284+ this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
285+ this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
195286 }
196- this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
197- this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
198- }
199- else
200- {
201- //ワイドクリップの処理
202- this.ratio1 = 1280f / ((float)this.framewidth);
203- this.position = (int)((720f - (this.frameheight * this.ratio1)) / 2f);
204- this.i1 = (int)(this.framewidth * 0.23046875);
205- this.i2 = (int)(this.framewidth * 0.44140625);
206- this.rec = new Rectangle(0, 0, this.i1, (int)this.frameheight);
207- this.rec2 = new Rectangle(this.i1, 0, this.i2, (int)this.frameheight);
208- this.rec3 = new Rectangle(this.i1 + this.i2, 0, (((int)this.framewidth) - this.i1) - this.i2, (int)this.frameheight);
209- this.tx描画用.vc拡大縮小倍率.X = this.ratio1;
210- this.tx描画用.vc拡大縮小倍率.Y = this.ratio1;
211- }
212287
213288
214- if (this.framewidth > 420)
215- {
216- f拡大率x = 420f / ((float)this.framewidth);
289+ if (this.framewidth > 420)
290+ {
291+ f拡大率x = 420f / ((float)this.framewidth);
292+ }
293+ else
294+ {
295+ f拡大率x = 1f;
296+ }
297+ if (this.frameheight > 580)
298+ {
299+ f拡大率y = 580f / ((float)this.frameheight);
300+ }
301+ else
302+ {
303+ f拡大率y = 1f;
304+ }
305+ if (f拡大率x > f拡大率y)
306+ {
307+ f拡大率x = f拡大率y;
308+ }
309+ else
310+ {
311+ f拡大率y = f拡大率x;
312+ }
313+
314+ this.smallvc = new Vector3(f拡大率x, f拡大率y, 1f);
315+ this.vclip = new Vector3(1.42f, 1.42f, 1f);
217316 }
218- else
219- {
220- f拡大率x = 1f;
221- }
222- if (this.frameheight > 580)
223- {
224- f拡大率y = 580f / ((float)this.frameheight);
225- }
226- else
227- {
228- f拡大率y = 1f;
229- }
230- if (f拡大率x > f拡大率y)
231- {
232- f拡大率x = f拡大率y;
233- }
234- else
235- {
236- f拡大率y = f拡大率x;
237- }
238-
239- this.smallvc = new Vector3(f拡大率x, f拡大率y, 1f);
240- #endregion
241317 }
318+ }
242319
243- if (fAVIアスペクト比 > 1.77f && this.dsBGV != null && this.dsBGV.dshow != null)
244- {
245- this.dsBGV.dshow.t再生開始();
246- this.bDShowクリップを再生している = true;
247- }
248- }
249320 }
250321 public void SkipStart(int n移動開始時刻ms)
251322 {
@@ -352,7 +423,7 @@
352423 {
353424 this.txクリップパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_ClipPanelC.png"));
354425 }
355- else if (CDTXMania.ConfigIni.bGraph有効 && CDTXMania.ConfigIni.bDrums有効)
426+ else if (CDTXMania.ConfigIni.bGraph有効.Drums && CDTXMania.ConfigIni.bDrums有効)
356427 {
357428 this.txクリップパネル = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_ClipPanelB.png"));
358429 }
@@ -368,18 +439,18 @@
368439 this.stフィルイン[i].ct進行 = new CCounter(0, 30, 30, CDTXMania.Timer);
369440 this.stフィルイン[i].b使用中 = false;
370441 }
371- //this.txフィルインエフェクト = CDTXMania.tテクスチャの生成(CSkin.Path(@"Graphics\7_Fillin Effect.png"));
442+ this.txフィルインエフェクト = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\7_Fillin Effect.png" ) );
372443
373- this.txフィルインエフェクト = new CTexture[ 31 ];
374- for( int fill = 0; fill < 31; fill++ )
375- {
376- this.txフィルインエフェクト[ fill ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\StageEffect\7_StageEffect_" + fill.ToString() + ".png" ) );
377- if( this.txフィルインエフェクト[ fill ] == null )
378- continue;
444+ //this.txフィルインエフェクト = new CTexture[ 31 ];
445+ //for( int fill = 0; fill < 31; fill++ )
446+ //{
447+ // this.txフィルインエフェクト[ fill ] = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\StageEffect\7_StageEffect_" + fill.ToString() + ".png" ) );
448+ // if( this.txフィルインエフェクト[ fill ] == null )
449+ // continue;
379450
380- this.txフィルインエフェクト[ fill ].b加算合成 = true;
381- this.txフィルインエフェクト[ fill ].vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
382- }
451+ // this.txフィルインエフェクト[ fill ].b加算合成 = true;
452+ // this.txフィルインエフェクト[ fill ].vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
453+ //}
383454
384455 base.OnManagedリソースの作成();
385456 }
@@ -413,11 +484,11 @@
413484 //テクスチャ 17枚
414485 //CDTXMania.tテクスチャの解放(ref this.txドラム);
415486 CDTXMania.tテクスチャの解放(ref this.txクリップパネル);
416- //CDTXMania.tテクスチャの解放( ref this.txフィルインエフェクト );
417- for( int ar = 0; ar < 31; ar++ )
418- {
419- CDTXMania.tテクスチャの解放( ref this.txフィルインエフェクト[ ar ] );
420- }
487+ CDTXMania.tテクスチャの解放( ref this.txフィルインエフェクト );
488+ //for( int ar = 0; ar < 31; ar++ )
489+ //{
490+ // CDTXMania.tテクスチャの解放( ref this.txフィルインエフェクト[ ar ] );
491+ //}
421492 base.OnManagedリソースの解放();
422493 }
423494 }
@@ -461,51 +532,44 @@
461532 #region[ムービーのフレーム作成処理]
462533 if ((!base.b活性化してない))
463534 {
464- if (((this.bFullScreen || this.bWindowMode) && (this.tx描画用 != null)) && (this.dsBGV != null || this.rAVI != null)) //クリップ無し曲での進入防止。
535+ if( ( ( this.tx描画用 != null )) && ( this.dsBGV != null || this.rAVI != null ) ) //クリップ無し曲での進入防止。
465536 {
466537 Rectangle rectangle;
467538 Rectangle rectangle2;
468539
469- int time = (int)((CSound管理.rc演奏用タイマ.n現在時刻 - this.n移動開始時刻ms) * (((double)CDTXMania.ConfigIni.n演奏速度) / 20.0));
540+ #region[ frameNoFromTime ]
541+ int time = (int)( ( CSound管理.rc演奏用タイマ.n現在時刻 - this.n移動開始時刻ms ) * ( ( (double)CDTXMania.ConfigIni.n演奏速度 ) / 20.0 ) );
470542 int frameNoFromTime = 0;
471-
472- #region[ frameNoFromTime ]
473- if (CDTXMania.ConfigIni.bDirectShowMode == true && (this.dsBGV != null))
543+ if( this.bUseMRenderer )
474544 {
475- if (this.fAVIアスペクト比 > 1.77f)
476- {
477- this.dsBGV.dshow.MediaSeeking.GetPositions(out this.lDshowPosition, out this.lStopPosition);
478- frameNoFromTime = (int)lDshowPosition;
479- }
480- else
481- {
482- frameNoFromTime = this.rAVI.avi.GetFrameNoFromTime(time);
483- }
545+ this.dsBGV.dshow.MediaSeeking.GetPositions( out this.lDshowPosition, out this.lStopPosition );
546+ frameNoFromTime = (int)lDshowPosition;
484547 }
485- else if (this.rAVI != null)
486- {
487- frameNoFromTime = this.rAVI.avi.GetFrameNoFromTime(time);
488- }
548+ else if( this.bUseCAviDS )
549+ frameNoFromTime = time;
550+ else
551+ frameNoFromTime = this.rAVI.avi.GetFrameNoFromTime( time );
489552 #endregion
490553
491- if ((this.n総移動時間ms != 0) && (this.n総移動時間ms < time))
554+ if( ( this.n総移動時間ms != 0 ) && ( this.n総移動時間ms < time ) )
492555 {
493556 this.n総移動時間ms = 0;
494557 this.n移動開始時刻ms = -1L;
495558 }
496- if ((this.n総移動時間ms == 0) && this.rAVI.avi != null ? (frameNoFromTime >= this.rAVI.avi.GetMaxFrameCount()) : false)
559+ if((((this.n前回表示したフレーム番号 != frameNoFromTime) || !this.bフレームを作成した)) && ( fClipアスペクト比 < 1.77f || ( !this.bUseMRenderer ) ))
497560 {
498- this.n移動開始時刻ms = -1L;
561+ this.n前回表示したフレーム番号 = frameNoFromTime;
562+ this.bフレームを作成した = true;
499563 }
500- if ((((this.n前回表示したフレーム番号 != frameNoFromTime) || !this.bフレームを作成した)) && (fAVIアスペクト比 < 1.77f || CDTXMania.ConfigIni.bDirectShowMode == false))
564+ if( !this.bUseMRenderer && !this.bUseCAviDS )
501565 {
502- this.pBmp = this.rAVI.avi.GetFramePtr(frameNoFromTime);
566+ this.pBmp = this.rAVI.avi.GetFramePtr( frameNoFromTime );
503567 this.n前回表示したフレーム番号 = frameNoFromTime;
504568 this.bフレームを作成した = true;
505569 }
506-
570+
507571 //ループ防止
508- if (this.lDshowPosition >= this.lStopPosition && CDTXMania.ConfigIni.bDirectShowMode == true && this.dsBGV != null)
572+ if( this.lDshowPosition >= this.lStopPosition && this.bUseMRenderer && this.dsBGV != null )
509573 {
510574 this.dsBGV.dshow.MediaSeeking.SetPositions(
511575 DsLong.FromInt64((long)(0)),
@@ -516,31 +580,30 @@
516580 this.bDShowクリップを再生している = false;
517581 }
518582
519- Size size = new Size((int)this.framewidth, (int)this.frameheight);
520- Size sz720pサイズ = new Size(1280, 720);
521- Size sz開始サイズ = new Size(this.n開始サイズW, this.n開始サイズH);
522- Size sz終了サイズ = new Size(this.n終了サイズW, this.n終了サイズH);
523- Point location = new Point(this.n画像側開始位置X, this.n画像側終了位置Y);
524- Point point2 = new Point(this.n画像側終了位置X, this.n画像側終了位置Y);
525- Point point3 = new Point(this.n表示側開始位置X, this.n表示側開始位置Y);
526- Point point4 = new Point(this.n表示側終了位置X, this.n表示側終了位置Y);
527- if (CSound管理.rc演奏用タイマ.n現在時刻 < this.n移動開始時刻ms)
583+ Size size = new Size( (int)this.framewidth, (int)this.frameheight );
584+ Size sz720pサイズ = new Size( 1280, 720);
585+ Size sz開始サイズ = new Size( this.n開始サイズW, this.n開始サイズH );
586+ Size sz終了サイズ = new Size( this.n終了サイズW, this.n終了サイズH );
587+ Point location = new Point( this.n画像側開始位置X, this.n画像側終了位置Y );
588+ Point point2 = new Point( this.n画像側終了位置X, this.n画像側終了位置Y );
589+ Point point3 = new Point( this.n表示側開始位置X, this.n表示側開始位置Y );
590+ Point point4 = new Point( this.n表示側終了位置X, this.n表示側終了位置Y );
591+ if( CSound管理.rc演奏用タイマ.n現在時刻 < this.n移動開始時刻ms )
528592 {
529593 this.n移動開始時刻ms = CSound管理.rc演奏用タイマ.n現在時刻;
530594 }
531- time = (int)((CSound管理.rc演奏用タイマ.n現在時刻 - this.n移動開始時刻ms) * (((double)CDTXMania.ConfigIni.n演奏速度) / 20.0));
532- if (this.n総移動時間ms == 0)
595+ if( this.n総移動時間ms == 0 )
533596 {
534- rectangle = new Rectangle(location, sz開始サイズ);
535- rectangle2 = new Rectangle(point3, sz開始サイズ);
597+ rectangle = new Rectangle( location, sz開始サイズ );
598+ rectangle2 = new Rectangle( point3, sz開始サイズ );
536599 }
537600 else
538601 {
539- double num5 = ((double)time) / ((double)this.n総移動時間ms);
540- Size size5 = new Size(sz開始サイズ.Width + ((int)((sz終了サイズ.Width - sz開始サイズ.Width) * num5)), sz開始サイズ.Height + ((int)((sz終了サイズ.Height - sz開始サイズ.Height) * num5)));
541- rectangle = new Rectangle((int)((point2.X - location.X) * num5), (int)((point2.Y - location.Y) * num5), ((int)((point2.X - location.X) * num5)) + size5.Width, ((int)((point2.Y - location.Y) * num5)) + size5.Height);
542- rectangle2 = new Rectangle((int)((point4.X - point3.X) * num5), (int)((point4.Y - point3.Y) * num5), ((int)((point4.X - point3.X) * num5)) + size5.Width, ((int)((point4.Y - point3.Y) * num5)) + size5.Height);
543- if (rectangle.X < 0)
602+ double db経過時間倍率 = ( (double)time ) / ( (double)this.n総移動時間ms );
603+ Size size5 = new Size( sz開始サイズ.Width + ( (int)( ( sz終了サイズ.Width - sz開始サイズ.Width ) * db経過時間倍率 ) ), sz開始サイズ.Height + ( (int)( ( sz終了サイズ.Height - sz開始サイズ.Height ) * db経過時間倍率 ) ) );
604+ rectangle = new Rectangle( (int)( (point2.X - location.X ) * db経過時間倍率 ), (int)( ( point2.Y - location.Y ) * db経過時間倍率 ), ( (int)( ( point2.X - location.X ) * db経過時間倍率 ) ) + size5.Width, ( (int)((point2.Y - location.Y) * db経過時間倍率 ) ) + size5.Height );
605+ rectangle2 = new Rectangle( (int)( (point4.X - point3.X ) * db経過時間倍率 ), (int)( ( point4.Y - point3.Y ) * db経過時間倍率 ), ( (int)( (point4.X - point3.X ) * db経過時間倍率 ) ) + size5.Width, ( (int)( ( point4.Y - point3.Y ) * db経過時間倍率 ) ) + size5.Height );
606+ if( rectangle.X < 0 )
544607 {
545608 int num6 = -rectangle.X;
546609 rectangle2.X += num6;
@@ -548,7 +611,7 @@
548611 rectangle.X = 0;
549612 rectangle.Width -= num6;
550613 }
551- if (rectangle.Y < 0)
614+ if( rectangle.Y < 0 )
552615 {
553616 int num7 = -rectangle.Y;
554617 rectangle2.Y += num7;
@@ -556,19 +619,19 @@
556619 rectangle.Y = 0;
557620 rectangle.Height -= num7;
558621 }
559- if (rectangle.Right > size.Width)
622+ if( rectangle.Right > size.Width )
560623 {
561624 int num8 = rectangle.Right - size.Width;
562625 rectangle2.Width -= num8;
563626 rectangle.Width -= num8;
564627 }
565- if (rectangle.Bottom > size.Height)
628+ if( rectangle.Bottom > size.Height )
566629 {
567630 int num9 = rectangle.Bottom - size.Height;
568631 rectangle2.Height -= num9;
569632 rectangle.Height -= num9;
570633 }
571- if (rectangle2.X < 0)
634+ if( rectangle2.X < 0 )
572635 {
573636 int num10 = -rectangle2.X;
574637 rectangle.X += num10;
@@ -576,7 +639,7 @@
576639 rectangle2.X = 0;
577640 rectangle2.Width -= num10;
578641 }
579- if (rectangle2.Y < 0)
642+ if( rectangle2.Y < 0 )
580643 {
581644 int num11 = -rectangle2.Y;
582645 rectangle.Y += num11;
@@ -584,13 +647,13 @@
584647 rectangle2.Y = 0;
585648 rectangle2.Height -= num11;
586649 }
587- if (rectangle2.Right > sz720pサイズ.Width)
650+ if( rectangle2.Right > sz720pサイズ.Width )
588651 {
589652 int num12 = rectangle2.Right - sz720pサイズ.Width;
590653 rectangle.Width -= num12;
591654 rectangle2.Width -= num12;
592655 }
593- if (rectangle2.Bottom > sz720pサイズ.Height)
656+ if( rectangle2.Bottom > sz720pサイズ.Height )
594657 {
595658 int num13 = rectangle2.Bottom - sz720pサイズ.Height;
596659 rectangle.Height -= num13;
@@ -597,13 +660,67 @@
597660 rectangle2.Height -= num13;
598661 }
599662 }
600- if ((this.tx描画用 != null) && (this.n総移動時間ms != -1) && CDTXMania.ConfigIni.bDirectShowMode == false)
663+
664+
665+ if( this.bUseMRenderer )
601666 {
667+ if( fClipアスペクト比 > 1.77f && ( this.bDShowクリップを再生している == true ) && this.dsBGV.dshow != null )
668+ {
669+ #region[ ワイドクリップ ]
670+ this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する( this.tx描画用 );
671+
672+ if( this.bFullScreen )
673+ {
674+ if( this.dsBGV.dshow.b上下反転 )
675+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, this.position, y );
676+ else
677+ this.tx描画用.t2D描画( CDTXMania.app.Device, x, y );
678+ }
679+ #endregion
680+ }
681+ }
682+ else if( this.bUseCAviDS )
683+ {
684+ if( ( this.tx描画用 != null ) && ( this.n総移動時間ms != -1 ) )
685+ {
686+ #region[ フレームの生成 ]
687+ //this.rAVI.avi.tGetBitmap( CDTXMania.app.Device, this.tx描画用, time );
688+ #endregion
689+
690+ if( this.bFullScreen )
691+ {
692+ #region[ 動画の描画 ]
693+ if( fClipアスペクト比 > 1.77f )
694+ {
695+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, this.position, 0 );
696+ }
697+ else
698+ {
699+ if( CDTXMania.ConfigIni.bDrums有効 )
700+ {
701+ this.tx描画用.vc拡大縮小倍率 = this.vclip;
702+ //this.tx描画用.t2D描画( CDTXMania.app.Device, 882, 0 );
703+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, 882, 0 );
704+ }
705+ else if( CDTXMania.ConfigIni.bGuitar有効 )
706+ {
707+ this.tx描画用.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
708+ this.PositionG = (int)( ( 1280f - (float)( this.framewidth ) ) / 2f);
709+ //this.tx描画用.t2D描画( CDTXMania.app.Device, this.PositionG, 0 );
710+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, this.PositionG, 0);
711+ }
712+ }
713+ #endregion
714+ }
715+ }
716+ }
717+ else
718+ {
602719 #region[ 通常の動画生成&再生処理 ]
603- if (this.bフレームを作成した && (this.pBmp != IntPtr.Zero))
720+ if( this.bフレームを作成した && ( this.pBmp != IntPtr.Zero ) )
604721 {
605722 #region[ フレームの生成 ]
606- DataRectangle rectangle3 = this.tx描画用.texture.LockRectangle(0, LockFlags.None);
723+ DataRectangle rectangle3 = this.tx描画用.texture.LockRectangle( 0, LockFlags.None );
607724 DataStream data = rectangle3.Data;
608725 int num14 = rectangle3.Pitch / this.tx描画用.szテクスチャサイズ.Width;
609726 BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER = (BitmapUtil.BITMAPINFOHEADER*)this.pBmp.ToPointer();
@@ -612,11 +729,11 @@
612729 switch (num14)
613730 {
614731 case 2:
615- this.rAVI.avi.tBitmap24ToGraphicsStreamR5G6B5(pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height);
732+ this.rAVI.avi.tBitmap24ToGraphicsStreamR5G6B5( pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height );
616733 break;
617734
618735 case 4:
619- this.rAVI.avi.tBitmap24ToGraphicsStreamX8R8G8B8(pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height);
736+ this.rAVI.avi.tBitmap24ToGraphicsStreamX8R8G8B8( pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height );
620737 break;
621738 }
622739 }
@@ -624,26 +741,26 @@
624741 this.bフレームを作成した = false;
625742 #endregion
626743 }
627- if (this.bFullScreen)
744+ if( this.bFullScreen )
628745 {
629746 #region[ 動画の描画 ]
630- if (fAVIアスペクト比 > 1.77f)
747+ if( fClipアスペクト比 > 1.77f )
631748 {
632- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position, 0);
633- this.tx描画用.t2D描画(CDTXMania.app.Device, 0, this.position);
749+ this.tx描画用.t2D描画( CDTXMania.app.Device, this.position, 0 );
750+ this.tx描画用.t2D描画( CDTXMania.app.Device, 0, this.position );
634751 }
635752 else
636753 {
637- if (CDTXMania.ConfigIni.bDrums有効)
754+ if( CDTXMania.ConfigIni.bDrums有効 )
638755 {
639756 this.tx描画用.vc拡大縮小倍率 = this.vclip;
640757 this.tx描画用.t2D描画(CDTXMania.app.Device, 882, 0);
641758 }
642- else if (CDTXMania.ConfigIni.bGuitar有効)
759+ else if( CDTXMania.ConfigIni.bGuitar有効 )
643760 {
644- this.tx描画用.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
645- this.PositionG = (int)((1280f - (float)(this.framewidth)) / 2f);
646- this.tx描画用.t2D描画(CDTXMania.app.Device, this.PositionG, 0);
761+ this.tx描画用.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
762+ this.PositionG = (int)( ( 1280f - (float)( this.framewidth ) ) / 2f );
763+ this.tx描画用.t2D描画( CDTXMania.app.Device, this.PositionG, 0 );
647764 }
648765 }
649766 #endregion
@@ -650,67 +767,6 @@
650767 }
651768 #endregion
652769 }
653- else if ((this.tx描画用 != null) && CDTXMania.ConfigIni.bDirectShowMode == true)
654- {
655- #region[ DirectShowMode ]
656- if (fAVIアスペクト比 > 1.77f && (this.bDShowクリップを再生している == true) && this.dsBGV.dshow != null)
657- {
658- #region[ ワイドクリップ ]
659- //this.rAVI.avi.Dispose(); //2013.06.26.kairera0467 DShow時にAVIをメモリから外すことで軽くしたいが、エラーを吐くため保留。
660- this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する(this.tx描画用);
661-
662- if (this.bFullScreen)
663- {
664- if (this.dsBGV.dshow.b上下反転)
665- this.tx描画用.t2D上下反転描画(CDTXMania.app.Device, this.position, y);
666- else
667- this.tx描画用.t2D描画(CDTXMania.app.Device, x, y);
668- }
669- #endregion
670- }
671- else if (fAVIアスペクト比 < 1.77f)
672- {
673- #region[ 旧規格クリップ(DShow未対応) ]
674- if (this.bフレームを作成した && (this.pBmp != IntPtr.Zero))
675- {
676- DataRectangle rectangle3 = this.tx描画用.texture.LockRectangle(0, LockFlags.None);
677- DataStream data = rectangle3.Data;
678- int num14 = rectangle3.Pitch / this.tx描画用.szテクスチャサイズ.Width;
679- BitmapUtil.BITMAPINFOHEADER* pBITMAPINFOHEADER = (BitmapUtil.BITMAPINFOHEADER*)this.pBmp.ToPointer();
680- if (pBITMAPINFOHEADER->biBitCount == 0x18)
681- {
682- switch (num14)
683- {
684- case 2:
685- this.rAVI.avi.tBitmap24ToGraphicsStreamR5G6B5(pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height);
686- break;
687-
688- case 4:
689- this.rAVI.avi.tBitmap24ToGraphicsStreamX8R8G8B8(pBITMAPINFOHEADER, data, this.tx描画用.szテクスチャサイズ.Width, this.tx描画用.szテクスチャサイズ.Height);
690- break;
691- }
692- }
693- this.tx描画用.texture.UnlockRectangle(0);
694- this.bフレームを作成した = false;
695- this.tx描画用.vc拡大縮小倍率 = this.vclip;
696- }
697- if (this.bFullScreen)
698- {
699- if (CDTXMania.ConfigIni.bDrums有効)
700- {
701- this.tx描画用.t2D描画(CDTXMania.app.Device, 882, 0);
702- }
703- else if (CDTXMania.ConfigIni.bGuitar有効)
704- {
705- this.tx描画用.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
706- this.PositionG = (int)((1280f - (float)(this.framewidth)) / 2f);
707- this.tx描画用.t2D描画(CDTXMania.app.Device, this.PositionG, 0);
708- }
709- }
710- #endregion
711- }
712- #endregion
713- }
714770 }
715771
716772
@@ -738,7 +794,7 @@
738794 this.stフィルイン[ i ].b使用中 = false;
739795 }
740796 //if ( this.txフィルインエフェクト != null )
741- //CStage演奏ドラム画面 stageDrum = CDTXMania.stage演奏ドラム画面;
797+ CStage演奏ドラム画面 stageDrum = CDTXMania.stage演奏ドラム画面;
742798 //CStage演奏ギター画面 stageGuitar = CDTXMania.stage演奏ギター画面;
743799
744800 //if( ( CDTXMania.ConfigIni.bDrums有効 ? stageDrum.txボーナスエフェクト : stageGuitar.txボーナスエフェクト ) != null )
@@ -749,13 +805,13 @@
749805 //this.txフィルインエフェクト.t2D描画(CDTXMania.app.Device, 0, -2, new Rectangle(0, 0 + (360 * numf), 640, 360));
750806 if( CDTXMania.ConfigIni.bDrums有効 )
751807 {
752- //stageDrum.txボーナスエフェクト.vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
753- //stageDrum.txボーナスエフェクト.b加算合成 = true;
754- //stageDrum.txボーナスエフェクト.t2D描画( CDTXMania.app.Device, 0, -2, new Rectangle(0, 0 + ( 360 * numf ), 640, 360 )) ;
808+ stageDrum.txボーナスエフェクト.vc拡大縮小倍率 = new Vector3( 2.0f, 2.0f, 1.0f );
809+ stageDrum.txボーナスエフェクト.b加算合成 = true;
810+ stageDrum.txボーナスエフェクト.t2D描画( CDTXMania.app.Device, 0, -2, new Rectangle(0, 0 + ( 360 * numf ), 640, 360 )) ;
755811 try
756812 {
757- if( this.txフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ] != null )
758- this.txフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ].t2D描画( CDTXMania.app.Device, 0, 0 );
813+ //if( this.txフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ] != null )
814+ // this.txフィルインエフェクト[ this.stフィルイン[ i ].ct進行.n現在の値 ].t2D描画( CDTXMania.app.Device, 0, 0 );
759815 }
760816 catch( Exception ex )
761817 {
@@ -770,207 +826,187 @@
770826 if (CDTXMania.ConfigIni.bShowMusicInfo)
771827 this.actPanel.t進行描画();
772828
773- if ((((this.n総移動時間ms != -1L) && (((this.rAVI != null)) && (this.rAVI.avi != null)) || (this.dsBGV != null && this.dsBGV.dshow != null))) && (this.bWindowMode) && this.tx描画用 != null && (CDTXMania.ConfigIni.bAVI有効))
829+ if( ( ( this.bWindowMode ) && this.tx描画用 != null && ( CDTXMania.ConfigIni.bAVI有効 ) ) )
774830 {
775831 this.vector = this.tx描画用.vc拡大縮小倍率;
776832 this.tx描画用.vc拡大縮小倍率 = this.smallvc;
777833 this.tx描画用.n透明度 = 0xff;
778- #region[ スキルメーター有効 ]
779- if (CDTXMania.ConfigIni.bGraph有効 && CDTXMania.ConfigIni.bDrums有効)
834+
835+ if( CDTXMania.ConfigIni.bDrums有効 )
780836 {
781- this.n本体X = 10;
782- this.n本体Y = 300;
783-
784- if (this.fAVIアスペクト比 > 0.96f)
837+ if( CDTXMania.ConfigIni.bGraph有効.Drums )
785838 {
786- this.ratio2 = 260f / ((float)this.framewidth);
787- this.position2 = 20 + this.n本体Y + (int)((270f - (this.frameheight * this.ratio2)) / 2f);
788- }
789- else
790- {
791- this.ratio2 = 270f / ((float)this.frameheight);
792- this.position2 = 5 + this.n本体X + (int)((260 - (this.framewidth * this.ratio2)) / 2f);
793- }
794- if (this.txクリップパネル != null)
795- this.txクリップパネル.t2D描画(CDTXMania.app.Device, this.n本体X, this.n本体Y);
839+ #region[ スキルメーター有効 ]
840+ this.n本体X = 2;
841+ this.n本体Y = 402;
796842
797- this.smallvc = new Vector3(this.ratio2, this.ratio2, 1f);
843+ if( this.fClipアスペクト比 > 0.96f )
844+ {
845+ this.ratio2 = 260f / ( (float)this.framewidth );
846+ this.position2 = 20 + this.n本体Y + (int)( (270f - ( this.frameheight * this.ratio2 ) ) / 2f );
847+ }
848+ else
849+ {
850+ this.ratio2 = 270f / ( (float)this.frameheight );
851+ this.position2 = 5 + this.n本体X + (int)( ( 260 - ( this.framewidth * this.ratio2 ) ) / 2f );
852+ }
853+ if( this.txクリップパネル != null )
854+ this.txクリップパネル.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );
798855
799- if (CDTXMania.ConfigIni.bDirectShowMode)
800- {
801- if (this.dsBGV != null && this.bDShowクリップを再生している)
856+ this.smallvc = new Vector3( this.ratio2, this.ratio2, 1f );
857+
858+ if( this.bUseMRenderer )
802859 {
803- this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する(this.tx描画用);
804- if (this.dsBGV.dshow.b上下反転)
860+ if( this.dsBGV != null && this.bDShowクリップを再生している )
805861 {
806- this.tx描画用.t2D上下反転描画(CDTXMania.app.Device, 5 + this.n本体X, this.position2);
862+ this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する( this.tx描画用 );
863+ if( this.dsBGV.dshow.b上下反転 )
864+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, 5 + this.n本体X, this.position2 );
865+ else if( this.dsBGV != null )
866+ this.tx描画用.t2D描画( CDTXMania.app.Device, 5 + this.n本体X, this.position2 );
807867 }
808- else if (this.dsBGV != null && CDTXMania.ConfigIni.bDirectShowMode == true)
868+ }
869+ else
870+ {
871+ if( this.n総移動時間ms != -1 && this.rAVI != null )
809872 {
810- this.tx描画用.t2D描画(CDTXMania.app.Device, 5 + this.n本体X, this.position2);
873+ if( this.fClipアスペクト比 < 0.96f )
874+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, this.position2, 20 + this.n本体Y );
875+ else
876+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, 5 + this.n本体X, this.position2 );
811877 }
812878 }
813- else if (this.n総移動時間ms != -1 && this.fAVIアスペクト比 < 0.96f)
814- {
815- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position2, 20 + this.n本体Y);
816- }
817879 }
880+ #endregion
818881 else
819882 {
820- if (this.fAVIアスペクト比 < 0.96f)
883+ #region[ スキルメーター無効 ]
884+ this.n本体X = 854;
885+ this.n本体Y = 142;
886+
887+ if( this.fClipアスペクト比 > 1.77f )
821888 {
822- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position2, 20 + this.n本体Y);
889+ this.ratio2 = 416f / ((float)this.framewidth);
890+ this.position2 = 30 + this.n本体Y + (int)((234f - (this.frameheight * this.ratio2)) / 2f);
823891 }
824892 else
825893 {
826- this.tx描画用.t2D描画(CDTXMania.app.Device, 5 + this.n本体X, this.position2);
894+ this.ratio2 = 234f / ((float)this.frameheight);
895+ this.position2 = 5 + this.n本体X + (int)((416f - (this.framewidth * this.ratio2)) / 2f);
827896 }
828- }
829- }
830- #endregion
831- #region[ スキルメーター無効 ]
832- else if (!CDTXMania.ConfigIni.bGraph有効 && CDTXMania.ConfigIni.bDrums有効)
833- {
834- this.n本体X = 854;
835- this.n本体Y = 142;
836-
837- if (this.fAVIアスペクト比 > 1.77f)
838- {
839- this.ratio2 = 416f / ((float)this.framewidth);
840- this.position2 = 30 + this.n本体Y + (int)((234f - (this.frameheight * this.ratio2)) / 2f);
841- }
842- else
843- {
844- this.ratio2 = 234f / ((float)this.frameheight);
845- this.position2 = 5 + this.n本体X + (int)((416f - (this.framewidth * this.ratio2)) / 2f);
846- }
847- if (this.txクリップパネル != null)
848- this.txクリップパネル.t2D描画(CDTXMania.app.Device, this.n本体X, this.n本体Y);
849- this.smallvc = new Vector3(this.ratio2, this.ratio2, 1f);
850- this.tx描画用.vc拡大縮小倍率 = this.smallvc;
851- if (CDTXMania.ConfigIni.bDirectShowMode)
852- {
853- if (this.dsBGV != null && this.bDShowクリップを再生している)
897+ if( this.txクリップパネル != null )
898+ this.txクリップパネル.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );
899+ this.smallvc = new Vector3( this.ratio2, this.ratio2, 1f );
900+ this.tx描画用.vc拡大縮小倍率 = this.smallvc;
901+ if( this.bUseMRenderer )
854902 {
855- this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する(this.tx描画用);
856- if (this.dsBGV.dshow.b上下反転)
903+ if( this.dsBGV != null && this.bDShowクリップを再生している )
857904 {
858- this.tx描画用.t2D上下反転描画(CDTXMania.app.Device, 5 + this.n本体X, this.position2);
905+ this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する( this.tx描画用 );
906+ if( this.dsBGV.dshow.b上下反転 )
907+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, 5 + this.n本体X, this.position2 );
908+ else if( this.dsBGV != null )
909+ this.tx描画用.t2D描画( CDTXMania.app.Device, 5 + this.n本体X, this.position2 );
859910 }
860- else if (this.dsBGV != null && CDTXMania.ConfigIni.bDirectShowMode)
861- {
862- this.tx描画用.t2D描画(CDTXMania.app.Device, 5 + this.n本体X, this.position2);
863- }
864911 }
865- else if (this.n総移動時間ms != -1 && this.fAVIアスペクト比 < 1.77f)
866- {
867- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position2, 30 + this.n本体Y);
868- }
869- }
870- else
871- {
872- if (this.fAVIアスペクト比 < 1.77f)
873- {
874- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position2, 30 + this.n本体Y);
875- }
876912 else
877913 {
878- this.tx描画用.t2D描画(CDTXMania.app.Device, 5 + this.n本体X, this.position2);
914+ if( this.n総移動時間ms != -1 && this.rAVI != null )
915+ {
916+ if( this.fClipアスペクト比 < 1.77f )
917+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, this.position2, 30 + this.n本体Y );
918+ else
919+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, 5 + this.n本体X, this.position2 );
920+ }
879921 }
922+ #endregion
880923 }
881924 }
882- #endregion
883- #region[ ギター時 ]
884- if (CDTXMania.ConfigIni.bGuitar有効)
925+ else if( CDTXMania.ConfigIni.bGuitar有効 )
885926 {
886-
927+ #region[ ギター時 ]
887928 #region[ 本体位置 ]
888929 this.n本体X = 380;
889930 this.n本体Y = 50;
890-
891931 int nグラフX = 267;
892932
893- if (CDTXMania.ConfigIni.bGraph有効 && !CDTXMania.DTX.bチップがある.Bass)
933+ if( CDTXMania.ConfigIni.bGraph有効.Bass && !CDTXMania.DTX.bチップがある.Bass )
894934 this.n本体X = this.n本体X + nグラフX;
895-
896- if (CDTXMania.ConfigIni.bGraph有効 && !CDTXMania.DTX.bチップがある.Guitar)
935+ if( CDTXMania.ConfigIni.bGraph有効.Guitar && !CDTXMania.DTX.bチップがある.Guitar )
897936 this.n本体X = this.n本体X - nグラフX;
898937 #endregion
899938
900- if (this.fAVIアスペクト比 > 1.77f)
939+ if( this.fClipアスペクト比 > 1.77f )
901940 {
902- this.ratio2 = 460f / ((float)this.framewidth);
903- this.position2 = 5 + this.n本体Y + (int)((258f - (this.frameheight * this.ratio2)) / 2f);
941+ this.ratio2 = 460f / ( (float)this.framewidth );
942+ this.position2 = 5 + this.n本体Y + (int)( ( 258f - ( this.frameheight * this.ratio2 ) ) / 2f );
904943 }
905944 else
906945 {
907- this.ratio2 = 258f / ((float)this.frameheight);
908- this.position2 = 30 + this.n本体X + (int)((460f - (this.framewidth * this.ratio2)) / 2f);
946+ this.ratio2 = 258f / ( (float)this.frameheight );
947+ this.position2 = 30 + this.n本体X + (int)( ( 460f - ( this.framewidth * this.ratio2 ) ) / 2f );
909948 }
910- if (this.txクリップパネル != null)
911- this.txクリップパネル.t2D描画(CDTXMania.app.Device, this.n本体X, this.n本体Y);
912- this.smallvc = new Vector3(this.ratio2, this.ratio2, 1f);
949+ if( this.txクリップパネル != null )
950+ this.txクリップパネル.t2D描画( CDTXMania.app.Device, this.n本体X, this.n本体Y );
951+ this.smallvc = new Vector3( this.ratio2, this.ratio2, 1f );
913952 this.tx描画用.vc拡大縮小倍率 = this.smallvc;
914- if (CDTXMania.ConfigIni.bDirectShowMode)
953+ if( this.bUseMRenderer )
915954 {
916- if (this.dsBGV != null && this.bDShowクリップを再生している)
955+ if( this.dsBGV != null && this.bDShowクリップを再生している )
917956 {
918- this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する(this.tx描画用);
919- if (this.dsBGV.dshow.b上下反転)
920- {
921- this.tx描画用.t2D上下反転描画(CDTXMania.app.Device, 30 + this.n本体X, this.position2);
922- }
923- else if (this.dsBGV != null && CDTXMania.ConfigIni.bDirectShowMode == true)
924- {
957+ this.dsBGV.dshow.t現時点における最新のスナップイメージをTextureに転写する( this.tx描画用 );
958+ if( this.dsBGV.dshow.b上下反転 )
959+ this.tx描画用.t2D上下反転描画( CDTXMania.app.Device, 30 + this.n本体X, this.position2 );
960+ else if( this.dsBGV != null )
925961 this.tx描画用.t2D描画(CDTXMania.app.Device, 30 + this.n本体X, this.position2);
926- }
927962 }
928- else
929- {
930- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position2, 5 + this.n本体Y);
931- }
932963 }
933964 else
934965 {
935- if (this.fAVIアスペクト比 < 1.77f)
966+ if( this.rAVI != null )
936967 {
937- this.tx描画用.t2D描画(CDTXMania.app.Device, this.position2, 5 + this.n本体Y);
968+ if( this.fClipアスペクト比 < 1.77f )
969+ this.tx描画用.t2D描画( CDTXMania.app.Device, this.position2, 5 + this.n本体Y );
970+ else
971+ this.tx描画用.t2D描画( CDTXMania.app.Device, 30 + this.n本体X, this.position2 );
938972 }
939- else
940- {
941- this.tx描画用.t2D描画(CDTXMania.app.Device, 30 + this.n本体X, this.position2);
942- }
943973 }
974+ #endregion
944975 }
945- #endregion
946976 this.tx描画用.vc拡大縮小倍率 = this.vector;
947977 }
948978 IInputDevice keyboard = CDTXMania.Input管理.Keyboard;
949- if (CDTXMania.Pad.b押された(E楽器パート.BASS, Eパッド.Help))
979+ if( CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.Help ) )
950980 {
951- if (this.b再生トグル == false)
981+ if( this.b再生トグル == false )
952982 {
953- if (this.dsBGV != null)
983+ if( this.dsBGV != null )
954984 {
955- if (this.dsBGV.dshow != null)
985+ if( this.dsBGV.dshow != null )
956986 this.dsBGV.dshow.MediaCtrl.Pause();
957987 }
958- if (this.ds汎用 != null)
988+ if( !this.bUseMRenderer && this.bUseCAviDS )
959989 {
960- this.ds汎用.MediaCtrl.Pause();
990+ if( this.rAVI.avi != null )
991+ {
992+ //this.rAVI.avi.Pause();
993+ }
961994 }
962995 this.b再生トグル = true;
963996 }
964- else if (this.b再生トグル == true)
997+ else if( this.b再生トグル == true )
965998 {
966- if (this.dsBGV != null)
999+ if( this.dsBGV != null )
9671000 {
968- if (this.dsBGV.dshow != null)
1001+ if( this.dsBGV.dshow != null )
9691002 this.dsBGV.dshow.MediaCtrl.Run();
9701003 }
971- if (this.ds汎用 != null)
1004+ if( !this.bUseMRenderer && this.bUseCAviDS )
9721005 {
973- this.ds汎用.MediaCtrl.Run();
1006+ if( this.rAVI.avi != null )
1007+ {
1008+ //this.rAVI.avi.Run();
1009+ }
9741010 }
9751011 this.b再生トグル = false;
9761012 }
@@ -1022,7 +1058,9 @@
10221058 private bool bフレームを作成した;
10231059 private bool b再生トグル;
10241060 private bool bDShowクリップを再生している;
1025- public float fAVIアスペクト比;
1061+ private bool bUseMRenderer = true;
1062+ private bool bUseCAviDS = false;
1063+ public float fClipアスペクト比;
10261064 private uint frameheight;
10271065 private uint framewidth;
10281066 private int i1;
@@ -1061,7 +1099,8 @@
10611099 private CTexture txlanes;
10621100 private CTexture txクリップパネル;
10631101 //private CTexture txドラム;
1064- private CTexture[] txフィルインエフェクト;
1102+ //private CTexture[] txフィルインエフェクト;
1103+ private CTexture txフィルインエフェクト;
10651104 private CTexture tx描画用;
10661105 private CTexture tx描画用2;
10671106 private CTexture txDShow汎用;
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelectQuickConfig.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSelectQuickConfig.cs (revision 542)
@@ -117,6 +117,18 @@
117117 new string[] { "OFF", "HIDDEN", "SUDDEN", "HID/SUD", "STEALTH" }));
118118 //ドラム、ギター、ベースでのHIDDEN/SUDDENの設定の分離を考えなければならない。
119119 #endregion
120+ #region [ 個別 Ghost ]
121+ l.Add( new CItemList("AUTO Ghost", CItemBase.Eパネル種別.通常, (int)CDTXMania.ConfigIni.eAutoGhost[ nInst ],
122+ "AUTOプレーのゴーストを指定します。\n",
123+ "Specify Play Ghost data.\n",
124+ new string[] {"Perfect", "Last Play", "Hi Skill", "Hi Score", "Online" }
125+ ));
126+ l.Add(new CItemList("Target Ghost", CItemBase.Eパネル種別.通常, (int)CDTXMania.ConfigIni.eTargetGhost[ nInst ],
127+ "ターゲットゴーストを指定します。\n",
128+ "Specify Target Ghost data.\n",
129+ new string[] {"None", "Perfect", "Last Play", "Hi Skill", "Hi Score", "Online" }
130+ ));
131+ #endregion
120132 #region [ 共通 SET切り替え/More/Return ]
121133 l.Add(new CSwitchItemList("Config Set", CItemBase.Eパネル種別.通常, nCurrentConfigSet, "", "", new string[] { "SET-1", "SET-2", "SET-3" }));
122134 l.Add(new CSwitchItemList("More...", CItemBase.Eパネル種別.通常, 0, "", "", new string[] { "" }));
@@ -420,6 +432,15 @@
420432 }
421433 //CDTXMania.ConfigIni.nHidSud = (int) GetObj現在値((int) EOrder.SuddenHidden);
422434 break;
435+ case (int) EOrder.AutoGhost: // #35411 chnmr0 AUTOゴーストデータ
436+ EAutoGhostData gd = (EAutoGhostData)GetIndex((int)EOrder.AutoGhost);
437+ CDTXMania.ConfigIni.eAutoGhost[ nCurrentTarget ] = gd;
438+ break;
439+
440+ case (int)EOrder.TargetGhost: // #35411 chnmr0 ターゲットゴーストデータ
441+ ETargetGhostData gtd = (ETargetGhostData)GetIndex((int)EOrder.TargetGhost);
442+ CDTXMania.ConfigIni.eTargetGhost[ nCurrentTarget ] = gtd;
443+ break;
423444 case (int)EOrder.ConfSet: // CONF-SET切り替え
424445 nCurrentConfigSet = (int)GetIndex((int)EOrder.ConfSet);
425446 //Initialize( lci[ nCurrentConfigSet ], true, QuickCfgTitle, pos );
@@ -621,6 +642,8 @@
621642 Risky,
622643 PlaySpeed,
623644 SuddenHidden,
645+ AutoGhost,
646+ TargetGhost,
624647 ConfSet,
625648 More,
626649 Return, END,
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 542)
@@ -263,6 +263,7 @@
263263 {
264264 CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();
265265 CDTXMania.listTargetGhostScoreData[ instIndex ] = new CScoreIni.C演奏記録();
266+ this.stGhostLag[instIndex] = new List<STGhostLag>();
266267 ReadGhost(filename, CDTXMania.listTargetGhsotLag[instIndex]);
267268 }
268269 else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )
@@ -562,6 +563,103 @@
562563 Trace.TraceInformation("FILE: {0}", CDTXMania.DTX.strファイル名の絶対パス);
563564 Trace.TraceInformation("---------------------------");
564565
566+ // #35411 2015.08.19 chnmr0 add ゴースト機能のためList chip 読み込み後楽器パート出現順インデックスを割り振る
567+ int[] curCount = new int[(int)E楽器パート.UNKNOWN];
568+ for (int i = 0; i < curCount.Length; ++i)
569+ {
570+ curCount[i] = 0;
571+ }
572+ foreach (CDTX.CChip chip in CDTXMania.DTX.listChip)
573+ {
574+ if (chip.e楽器パート != E楽器パート.UNKNOWN)
575+ {
576+ chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;
577+ if( CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ] != null )
578+ {
579+ var lag = new STGhostLag();
580+ lag.index = chip.n楽器パートでの出現順;
581+ lag.nJudgeTime = chip.n発声時刻ms + CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
582+ lag.nLagTime = CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
583+
584+ this.stGhostLag[ (int)chip.e楽器パート ].Add( lag );
585+ }
586+ }
587+ }
588+
589+ //演奏記録をゴーストから逆生成
590+ for( int i = 0; i < 3; i++ )
591+ {
592+ int nNowCombo = 0;
593+ int nMaxCombo = 0;
594+ CDTXMania.listTargetGhostScoreData[ i ] = new CScoreIni.C演奏記録();
595+ if( this.stGhostLag[ i ] == null )
596+ continue;
597+ for( int n = 0; n < this.stGhostLag[ i ].Count; n++ )
598+ {
599+ int ghostLag = 128;
600+ ghostLag = this.stGhostLag[ i ][ n ].nLagTime;
601+ // 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)
602+ if (ghostLag > 255)
603+ {
604+ nNowCombo = 0;
605+ }
606+ ghostLag = (ghostLag & 255) - 128;
607+
608+ if( ghostLag <= 127 )
609+ {
610+ E判定 eJudge = this.e指定時刻からChipのJUDGEを返す(ghostLag, 0);
611+
612+ switch( eJudge )
613+ {
614+ case E判定.Perfect:
615+ CDTXMania.listTargetGhostScoreData[ i ].nPerfect数++;
616+ break;
617+ case E判定.Great:
618+ CDTXMania.listTargetGhostScoreData[ i ].nGreat数++;
619+ break;
620+ case E判定.Good:
621+ CDTXMania.listTargetGhostScoreData[ i ].nGood数++;
622+ break;
623+ case E判定.Poor:
624+ CDTXMania.listTargetGhostScoreData[ i ].nPoor数++;
625+ break;
626+ case E判定.Miss:
627+ case E判定.Bad:
628+ CDTXMania.listTargetGhostScoreData[ i ].nMiss数++;
629+ break;
630+ }
631+ switch( eJudge )
632+ {
633+ case E判定.Perfect:
634+ case E判定.Great:
635+ case E判定.Good:
636+ nNowCombo++;
637+ CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = Math.Max( nNowCombo, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 );
638+ break;
639+ case E判定.Poor:
640+ case E判定.Miss:
641+ case E判定.Bad:
642+ CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = Math.Max( nNowCombo, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 );
643+ nNowCombo = 0;
644+ break;
645+ }
646+ //Trace.WriteLine( eJudge.ToString() + " " + nNowCombo.ToString() + "Combo Max:" + nMaxCombo.ToString() + "Combo" );
647+ }
648+ }
649+ //CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = nMaxCombo;
650+ int nTotal = CDTXMania.DTX.n可視チップ数.Drums;
651+ if( i == 1 ) nTotal = CDTXMania.DTX.n可視チップ数.Guitar;
652+ else if( i == 2 ) nTotal = CDTXMania.DTX.n可視チップ数.Bass;
653+ if( CDTXMania.ConfigIni.nSkillMode == 0 )
654+ {
655+ CDTXMania.listTargetGhostScoreData[ i ].db演奏型スキル値 = CScoreIni.t旧演奏型スキルを計算して返す( nTotal, CDTXMania.listTargetGhostScoreData[ i ].nPerfect数, CDTXMania.listTargetGhostScoreData[ i ].nGreat数, CDTXMania.listTargetGhostScoreData[ i ].nGood数, CDTXMania.listTargetGhostScoreData[ i ].nPoor数, CDTXMania.listTargetGhostScoreData[ i ].nMiss数, (E楽器パート)i, CDTXMania.listTargetGhostScoreData[ i ].bAutoPlay );
656+ }
657+ else
658+ {
659+ CDTXMania.listTargetGhostScoreData[ i ].db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( nTotal, CDTXMania.listTargetGhostScoreData[ i ].nPerfect数, CDTXMania.listTargetGhostScoreData[ i ].nGreat数, CDTXMania.listTargetGhostScoreData[ i ].nGood数, CDTXMania.listTargetGhostScoreData[ i ].nPoor数, CDTXMania.listTargetGhostScoreData[ i ].nMiss数, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数, (E楽器パート)i, CDTXMania.listTargetGhostScoreData[ i ].bAutoPlay );
660+ }
661+ }
662+
565663 span = (TimeSpan)(DateTime.Now - timeBeginLoad);
566664 Trace.TraceInformation("DTX読込所要時間: {0}", span.ToString());
567665
@@ -607,8 +705,8 @@
607705 CDTXMania.DTX.t旧仕様のドコドコチップを振り分ける(E楽器パート.DRUMS, CDTXMania.ConfigIni.bAssignToLBD.Drums);
608706 CDTXMania.DTX.tドコドコ仕様変更(E楽器パート.DRUMS, CDTXMania.ConfigIni.eDkdkType.Drums);
609707 CDTXMania.DTX.tドラムのランダム化(E楽器パート.DRUMS, CDTXMania.ConfigIni.eRandom.Drums);
708+ CDTXMania.DTX.tドラムの足ランダム化(E楽器パート.DRUMS, CDTXMania.ConfigIni.eRandomPedal.Drums);
610709 CDTXMania.DTX.t譜面仕様変更(E楽器パート.DRUMS, CDTXMania.ConfigIni.eNumOfLanes.Drums);
611- CDTXMania.DTX.tドラムの足ランダム化(E楽器パート.DRUMS, CDTXMania.ConfigIni.eRandomPedal.Drums);
612710 CDTXMania.DTX.tギターとベースのランダム化(E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar);
613711 CDTXMania.DTX.tギターとベースのランダム化(E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass);
614712
@@ -761,6 +859,47 @@
761859 }
762860 public int nIndex;
763861 public STATUSPANEL[] stパネルマップ;
862+
863+ private STDGBVALUE<List<STGhostLag>> stGhostLag;
864+
865+ [StructLayout(LayoutKind.Sequential)]
866+ private struct STGhostLag
867+ {
868+ public int index;
869+ public int nJudgeTime;
870+ public int nLagTime;
871+ public STGhostLag( int index, int nJudgeTime, int nLagTime )
872+ {
873+ this.index = index;
874+ this.nJudgeTime = nJudgeTime;
875+ this.nLagTime = nLagTime;
876+ }
877+ }
878+ protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, int nInputAdjustTime )
879+ {
880+ //if ( pChip != null )
881+ {
882+ int nDeltaTime = Math.Abs( (int)nTime );
883+ //Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));
884+ if ( nDeltaTime <= CDTXMania.nPerfect範囲ms )
885+ {
886+ return E判定.Perfect;
887+ }
888+ if ( nDeltaTime <= CDTXMania.nGreat範囲ms )
889+ {
890+ return E判定.Great;
891+ }
892+ if ( nDeltaTime <= CDTXMania.nGood範囲ms )
893+ {
894+ return E判定.Good;
895+ }
896+ if ( nDeltaTime <= CDTXMania.nPoor範囲ms )
897+ {
898+ return E判定.Poor;
899+ }
900+ }
901+ return E判定.Miss;
902+ }
764903 //-----------------
765904 private void ReadGhost( string filename, List<int> list ) // #35411 2015.08.19 chnmr0 add
766905 {
@@ -790,75 +929,75 @@
790929 }
791930 }
792931
793- if( File.Exists( filename + ".score" ) )
794- {
795- using( FileStream fs = new FileStream( filename + ".score", FileMode.Open, FileAccess.Read ) )
796- {
797- using( StreamReader sr = new StreamReader( fs ) )
798- {
799- try
800- {
801- string strScoreDataFile = sr.ReadToEnd();
932+ //if( File.Exists( filename + ".score" ) )
933+ //{
934+ // using( FileStream fs = new FileStream( filename + ".score", FileMode.Open, FileAccess.Read ) )
935+ // {
936+ // using( StreamReader sr = new StreamReader( fs ) )
937+ // {
938+ // try
939+ // {
940+ // string strScoreDataFile = sr.ReadToEnd();
802941
803- strScoreDataFile = strScoreDataFile.Replace( Environment.NewLine, "\n" );
804- string[] delimiter = { "\n" };
805- string[] strSingleLine = strScoreDataFile.Split( delimiter, StringSplitOptions.RemoveEmptyEntries );
942+ // strScoreDataFile = strScoreDataFile.Replace( Environment.NewLine, "\n" );
943+ // string[] delimiter = { "\n" };
944+ // string[] strSingleLine = strScoreDataFile.Split( delimiter, StringSplitOptions.RemoveEmptyEntries );
806945
807- for( int i = 0; i < strSingleLine.Length; i++ )
808- {
809- string[] strA = strSingleLine[ i ].Split( '=' );
810- if (strA.Length != 2)
811- continue;
946+ // for( int i = 0; i < strSingleLine.Length; i++ )
947+ // {
948+ // string[] strA = strSingleLine[ i ].Split( '=' );
949+ // if (strA.Length != 2)
950+ // continue;
812951
813- switch( strA[ 0 ] )
814- {
815- case "Score":
816- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nスコア = Convert.ToInt32( strA[ 1 ] );
817- continue;
818- case "PlaySkill":
819- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].db演奏型スキル値 = Convert.ToDouble( strA[ 1 ] );
820- continue;
821- case "Skill":
822- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].dbゲーム型スキル値 = Convert.ToDouble( strA[ 1 ] );
823- continue;
824- case "Perfect":
825- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPerfect数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
826- continue;
827- case "Great":
828- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGreat数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
829- continue;
830- case "Good":
831- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGood数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
832- continue;
833- case "Poor":
834- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPoor数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
835- continue;
836- case "Miss":
837- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nMiss数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
838- continue;
839- case "MaxCombo":
840- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].n最大コンボ数 = Convert.ToInt32( strA[ 1 ] );
841- continue;
842- default:
843- continue;
844- }
845- }
846- }
847- catch( NullReferenceException )
848- {
849- Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
850- }
851- catch( EndOfStreamException )
852- {
853- Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
854- }
855- }
856- }
857- }
858- else
859- {
860- CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ] = null;
861- }
952+ // switch( strA[ 0 ] )
953+ // {
954+ // case "Score":
955+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nスコア = Convert.ToInt32( strA[ 1 ] );
956+ // continue;
957+ // case "PlaySkill":
958+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].db演奏型スキル値 = Convert.ToDouble( strA[ 1 ] );
959+ // continue;
960+ // case "Skill":
961+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].dbゲーム型スキル値 = Convert.ToDouble( strA[ 1 ] );
962+ // continue;
963+ // case "Perfect":
964+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPerfect数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
965+ // continue;
966+ // case "Great":
967+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGreat数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
968+ // continue;
969+ // case "Good":
970+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGood数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
971+ // continue;
972+ // case "Poor":
973+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPoor数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
974+ // continue;
975+ // case "Miss":
976+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nMiss数・Auto含まない = Convert.ToInt32( strA[ 1 ] );
977+ // continue;
978+ // case "MaxCombo":
979+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].n最大コンボ数 = Convert.ToInt32( strA[ 1 ] );
980+ // continue;
981+ // default:
982+ // continue;
983+ // }
984+ // }
985+ // }
986+ // catch( NullReferenceException )
987+ // {
988+ // Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
989+ // }
990+ // catch( EndOfStreamException )
991+ // {
992+ // Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
993+ // }
994+ // }
995+ // }
996+ //}
997+ //else
998+ //{
999+ // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ] = null;
1000+ //}
8621001 }
8631002 private void t小文字表示(int x, int y, string str)
8641003 {
--- branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs (revision 542)
@@ -444,13 +444,6 @@
444444
445445 #endregion
446446
447- // #24074 2011.01.23 add ikanick
448- this.iSystemGraph = new CItemToggle("SkillMeter", CDTXMania.ConfigIni.bGraph有効,
449- "最高スキルと比較できるグラフを表示します。\n" +
450- "オートプレイだと表示されません。",
451- "To draw Graph or not.");
452- this.list項目リスト.Add(this.iSystemGraph);
453-
454447 this.iSystemSkinSubfolder = new CItemList("Skin (General)", CItemBase.Eパネル種別.通常, nSkinIndex,
455448 "スキン切替:スキンを切り替えます。\n" +
456449 "\n",
@@ -882,17 +875,7 @@
882875 " for the drums.\n" +
883876 "You can specify from 1 to 99999.");
884877 this.list項目リスト.Add(this.iSystemMinComboDrums);
885-
886- // #23580 2011.1.3 yyagi
887- this.iDrumsInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums,
888- "ドラムの入力タイミングの微調整を行います。\n" +
889- "-99 ~ 99ms まで指定可能です。\n" +
890- "値を指定してください。\n",
891- "To adjust the drums input timing.\n" +
892- "You can set from -99 to 0ms.\n" +
893- "To decrease input lag, set minus value.");
894- this.list項目リスト.Add(this.iDrumsInputAdjustTimeMs);
895-
878+
896879 this.iDrumsHHOGraphics = new CItemList("HHOGraphics", CItemBase.Eパネル種別.通常, (int)CDTXMania.ConfigIni.eHHOGraphics.Drums,
897880 "オープンハイハットの表示画像を変更します。\n" +
898881 "A: DTXMania元仕様\n" +
@@ -1025,6 +1008,22 @@
10251008 new string[] { "OFF", "Mirror", "Part", "Super", "Hyper", "Master", "Another" });
10261009 this.list項目リスト.Add(this.iDrumsRandomPedal);
10271010
1011+ this.iDrumsGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph有効.Drums,
1012+ "最高スキルと比較できるグラフを表示します。\n" +
1013+ "オートプレイだと表示されません。",
1014+ "To draw Graph or not." );
1015+ this.list項目リスト.Add( this.iDrumsGraph );
1016+
1017+ // #23580 2011.1.3 yyagi
1018+ this.iDrumsInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums,
1019+ "ドラムの入力タイミングの微調整を行います。\n" +
1020+ "-99 ~ 99ms まで指定可能です。\n" +
1021+ "値を指定してください。\n",
1022+ "To adjust the drums input timing.\n" +
1023+ "You can set from -99 to 0ms.\n" +
1024+ "To decrease input lag, set minus value.");
1025+ this.list項目リスト.Add(this.iDrumsInputAdjustTimeMs);
1026+
10281027 this.iDrumsGoToKeyAssign = new CItemBase("Drums Keys", CItemBase.Eパネル種別.通常,
10291028 "ドラムのキー入力に関する項目を設定します。",
10301029 "Settings for the drums key/pad inputs.");
@@ -1222,6 +1221,14 @@
12221221 "Initial number to show the combo\n for the guitar.\nYou can specify from 1 to 99999.");
12231222 this.list項目リスト.Add(this.iSystemMinComboGuitar);
12241223
1224+ this.iGuitarGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph有効.Guitar,
1225+ "最高スキルと比較できるグラフを表示します。\n" +
1226+ "オートプレイだと表示されません。\n" +
1227+ "この項目を有効にすると、ベースパートのグラフは\n" +
1228+ "無効になります。",
1229+ "To draw Graph or not." );
1230+ this.list項目リスト.Add( this.iGuitarGraph );
1231+
12251232 // #23580 2011.1.3 yyagi
12261233 this.iGuitarInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar,
12271234 "ギターの入力タイミングの微調整を行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、\n負の値を指定してください。",
@@ -1416,6 +1423,14 @@
14161423 "");
14171424 this.list項目リスト.Add(this.iBassShutterOutPos);
14181425
1426+ this.iBassGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph有効.Bass,
1427+ "最高スキルと比較できるグラフを表示します。\n" +
1428+ "オートプレイだと表示されません。\n" +
1429+ "この項目を有効にすると、ギターパートのグラフは\n" +
1430+ "無効になります。",
1431+ "To draw Graph or not." );
1432+ this.list項目リスト.Add( this.iBassGraph );
1433+
14191434 // #23580 2011.1.3 yyagi
14201435 this.iBassInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass,
14211436 "ベースの入力タイミングの微調整を行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、\n負の値を指定してください。",
@@ -2677,7 +2692,6 @@
26772692 private CItemList iSystemSkillMode;
26782693 private CItemToggle iMutingLP;
26792694 private CItemToggle iSystemClassicNotes;
2680- private CItemToggle iSystemGraph; // #24074 2011.01.23 add ikanick
26812695
26822696 #region [ GDオプション ]
26832697
@@ -2764,6 +2778,7 @@
27642778 private CItemInteger iBassShutterInPos;
27652779 private CItemInteger iBassShutterOutPos;
27662780 private CItemToggle iBassLaneFlush;
2781+ private CItemToggle iBassGraph;
27672782
27682783 private CItemInteger iCommonPlaySpeed;
27692784 // private CItemBase iCommonReturnToMenu;
@@ -2806,6 +2821,7 @@
28062821 private CItemInteger iDrumsShutterInPos;
28072822 private CItemInteger iDrumsShutterOutPos;
28082823 private CItemToggle iDrumsComboDisp;
2824+ private CItemToggle iDrumsGraph;
28092825
28102826 //private CItemToggle iGuitarAutoPlay;
28112827 private CItemThreeState iGuitarAutoPlayAll; // #23886 2012.5.8 yyagi
@@ -2833,6 +2849,7 @@
28332849 private CItemInteger iGuitarShutterInPos;
28342850 private CItemInteger iGuitarShutterOutPos;
28352851 private CItemToggle iGuitarLaneFlush;
2852+ private CItemToggle iGuitarGraph;
28362853
28372854 private CItemInteger iDrumsInputAdjustTimeMs; // #23580 2011.1.3 yyagi
28382855 private CItemInteger iGuitarInputAdjustTimeMs; //
@@ -2926,7 +2943,6 @@
29262943 CDTXMania.ConfigIni.bAVI有効 = this.iSystemAVI.bON;
29272944 CDTXMania.ConfigIni.bBGA有効 = this.iSystemBGA.bON;
29282945 CDTXMania.ConfigIni.bDirectShowMode = this.iSystemDirectShowMode.bON;
2929- CDTXMania.ConfigIni.bGraph有効 = this.iSystemGraph.bON;
29302946 CDTXMania.ConfigIni.n曲が選択されてからプレビュー音が鳴るまでのウェイトms = this.iSystemPreviewSoundWait.n現在の値;
29312947 CDTXMania.ConfigIni.n曲が選択されてからプレビュー画像が表示開始されるまでのウェイトms = this.iSystemPreviewImageWait.n現在の値;
29322948 CDTXMania.ConfigIni.b演奏情報を表示する = this.iSystemDebugInfo.bON;
@@ -3007,6 +3023,7 @@
30073023
30083024 CDTXMania.ConfigIni.b演奏音を強調する.Bass = this.iSystemSoundMonitorBass.bON;
30093025 CDTXMania.ConfigIni.n表示可能な最小コンボ数.Bass = this.iSystemMinComboBass.n現在の値;
3026+ CDTXMania.ConfigIni.bGraph有効.Bass = this.iBassGraph.bON;
30103027 }
30113028 private void tConfigIniへ記録する・Drums()
30123029 {
@@ -3063,6 +3080,7 @@
30633080 CDTXMania.ConfigIni.nShutterInSide.Drums = this.iDrumsShutterInPos.n現在の値;
30643081 CDTXMania.ConfigIni.nShutterOutSide.Drums = this.iDrumsShutterOutPos.n現在の値;
30653082 CDTXMania.ConfigIni.bドラムコンボ文字の表示 = this.iDrumsComboDisp.bON;
3083+ CDTXMania.ConfigIni.bGraph有効.Drums = this.iDrumsGraph.bON;
30663084
30673085 //CDTXMania.ConfigIni.eDark = (Eダークモード) this.iCommonDark.n現在選択されている項目番号; // ダークはプリセット切り替えとして使うため、保存はしない。
30683086 }
@@ -3095,6 +3113,7 @@
30953113
30963114 CDTXMania.ConfigIni.n表示可能な最小コンボ数.Guitar = this.iSystemMinComboGuitar.n現在の値;
30973115 CDTXMania.ConfigIni.b演奏音を強調する.Guitar = this.iSystemSoundMonitorGuitar.bON;
3116+ CDTXMania.ConfigIni.bGraph有効.Guitar = this.iGuitarGraph.bON;
30983117 }
30993118 //-----------------
31003119 #endregion
--- branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CConfigIni.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CConfigIni.cs (revision 542)
@@ -481,7 +481,7 @@
481481 public bool bSTAGEFAILED有効;
482482 public STDGBVALUE<bool> bSudden;
483483 public bool bTight;
484- public bool bGraph有効; // #24074 2011.01.23 add ikanick
484+ public STDGBVALUE<bool> bGraph有効; // #24074 2011.01.23 add ikanick
485485 public bool bWave再生位置自動調整機能有効;
486486 public bool bシンバルフリー;
487487 public bool bストイックモード;
@@ -1769,7 +1769,9 @@
17691769
17701770 // #24074 2011.01.23 add ikanick
17711771 sw.WriteLine( "; グラフ表示(0:OFF, 1:ON)" );
1772- sw.WriteLine( "SkillMater={0}", this.bGraph有効 ? 1 : 0 );
1772+ sw.WriteLine( "DrumGraph={0}", this.bGraph有効.Drums ? 1 : 0 );
1773+ sw.WriteLine( "GuitarGraph={0}", this.bGraph有効.Guitar ? 1 : 0 );
1774+ sw.WriteLine( "BassGraph={0}", this.bGraph有効.Bass ? 1 : 0 );
17731775 sw.WriteLine();
17741776
17751777 sw.WriteLine( "; ドラムコンボの表示(0:OFF, 1:ON)" ); // #29500 2012.9.11 kairera0467
@@ -2761,10 +2763,18 @@
27612763 //-----------------------------
27622764 case Eセクション種別.PlayOption:
27632765 {
2764- if( str3.Equals( "SkillMater" ) ) // #24074 2011.01.23 addikanick
2766+ if( str3.Equals( "DrumSkillMater" ) ) // #24074 2011.01.23 addikanick
27652767 {
2766- this.bGraph有効 = C変換.bONorOFF( str4[ 0 ] );
2768+ this.bGraph有効.Drums = C変換.bONorOFF( str4[ 0 ] );
27672769 }
2770+ else if( str3.Equals( "GuitarSkillMater" ) ) // #24074 2011.01.23 addikanick
2771+ {
2772+ this.bGraph有効.Guitar = C変換.bONorOFF( str4[ 0 ] );
2773+ }
2774+ else if( str3.Equals( "BassSkillMater" ) ) // #24074 2011.01.23 addikanick
2775+ {
2776+ this.bGraph有効.Bass = C変換.bONorOFF( str4[ 0 ] );
2777+ }
27682778 else if( str3.Equals( "DrumsReverse" ) )
27692779 {
27702780 this.bReverse.Drums = C変換.bONorOFF( str4[ 0 ] );
--- branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 542)
@@ -23,7 +23,7 @@
2323 {
2424 // プロパティ
2525
26- public static readonly string VERSION = "Ver3.40GD(150919)";
26+ public static readonly string VERSION = "Ver3.60GD(16----)";
2727 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";
2828 public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010
2929 //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010
--- branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CPrivateFont.cs (revision 541)
+++ branches/GITADORA風/DTXManiaプロジェクト/コード/全体/CPrivateFont.cs (revision 542)
@@ -109,25 +109,50 @@
109109
110110 // 指定されたフォントスタイルが適用できない場合は、フォント内で定義されているスタイルから候補を選んで使用する
111111 // 何もスタイルが使えないようなフォントなら、例外を出す。
112- if ( !_fontfamily.IsStyleAvailable( style ) )
112+ if ( _fontfamily != null )
113113 {
114- FontStyle[] FS = { FontStyle.Regular, FontStyle.Bold, FontStyle.Italic, FontStyle.Underline, FontStyle.Strikeout };
115- style = FontStyle.Regular | FontStyle.Bold | FontStyle.Italic | FontStyle.Underline | FontStyle.Strikeout; // null非許容型なので、代わりに全盛をNGワードに設定
116- foreach ( FontStyle ff in FS )
114+ if ( !_fontfamily.IsStyleAvailable( style ) )
117115 {
118- if ( this._fontfamily.IsStyleAvailable( ff ) )
116+ FontStyle[] FS = { FontStyle.Regular, FontStyle.Bold, FontStyle.Italic, FontStyle.Underline, FontStyle.Strikeout };
117+ style = FontStyle.Regular | FontStyle.Bold | FontStyle.Italic | FontStyle.Underline | FontStyle.Strikeout; // null非許容型なので、代わりに全盛をNGワードに設定
118+ foreach ( FontStyle ff in FS )
119119 {
120- style = ff;
121- Trace.TraceWarning( "フォント{0}へのスタイル指定を、{1}に変更しました。", Path.GetFileName( fontpath ), style.ToString() );
122- break;
120+ if ( this._fontfamily.IsStyleAvailable( ff ) )
121+ {
122+ style = ff;
123+ Trace.TraceWarning( "フォント{0}へのスタイル指定を、{1}に変更しました。", Path.GetFileName( fontpath ), style.ToString() );
124+ break;
125+ }
123126 }
127+ if ( style == ( FontStyle.Regular | FontStyle.Bold | FontStyle.Italic | FontStyle.Underline | FontStyle.Strikeout ) )
128+ {
129+ Trace.TraceWarning( "フォント{0}は適切なスタイル{1}を選択できませんでした。", Path.GetFileName( fontpath ), style.ToString() );
130+ }
124131 }
125- if ( style == ( FontStyle.Regular | FontStyle.Bold | FontStyle.Italic | FontStyle.Underline | FontStyle.Strikeout ) )
132+ //this._font = new Font(this._fontfamily, pt, style); //PrivateFontCollectionの先頭のフォントのFontオブジェクトを作成する
133+ float emSize = pt * 96.0f / 72.0f;
134+ this._font = new Font( this._fontfamily, emSize, style, GraphicsUnit.Pixel ); //PrivateFontCollectionの先頭のフォントのFontオブジェクトを作成する
135+ //HighDPI対応のため、pxサイズで指定
136+ }
137+ else
138+ // フォントファイルが見つからなかった場合 (MS PGothicを代わりに指定する)
139+ {
140+ float emSize = pt * 96.0f / 72.0f;
141+ this._font = new Font( "MS PGothic", emSize, style, GraphicsUnit.Pixel ); //MS PGothicのFontオブジェクトを作成する
142+ FontFamily[] ffs = new System.Drawing.Text.InstalledFontCollection().Families;
143+ int lcid = System.Globalization.CultureInfo.GetCultureInfo( "en-us" ).LCID;
144+ foreach ( FontFamily ff in ffs )
126145 {
127- throw new ArgumentException( "フォント{0}は適切なスタイルを選択できず、使用できません。", Path.GetFileName( fontpath ) );
146+ // Trace.WriteLine( lcid ) );
147+ if ( ff.GetName( lcid ) == "MS PGothic" )
148+ {
149+ this._fontfamily = ff;
150+ Trace.TraceInformation( "MS PGothicを代わりに指定しました。" );
151+ return;
152+ }
128153 }
154+ throw new FileNotFoundException( "プライベートフォントの追加に失敗し、MS PGothicでの代替処理にも失敗しました。({0})", Path.GetFileName( fontpath ) );
129155 }
130- this._font = new Font( this._fontfamily, pt, style ); //PrivateFontCollectionの先頭のフォントのFontオブジェクトを作成する
131156 }
132157
133158 [Flags]
Show on old repository browser