From: yyagi Date: Sun, 23 Jan 2011 04:00:58 +0000 (+0000) Subject: #24204 rel087で#BASEBPMを使えなくしていた問題を修正。 X-Git-Tag: Release099f~431 X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=5837e0786f54741e50703c96a2bad3890c5492bb;hp=e3b34a33f629750e1eeeaa213abb0d35fa73fc03;p=dtxmania%2Fdtxmania.git #24204 rel087で#BASEBPMを使えなくしていた問題を修正。 #24063 ギターとベースの入力入れ替えに対応。Pick-G-G-Pickで入れ替え。レーン表示は入れ替えず、入力アサインのみ入れ替える。 #23058 InputAdjustの説明で、「入力ラグ軽減のためには負の数をセットせよ」と追記。また英文での説明が全てベース用となっていたので、ドラムス・ギター用に修正。 git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@90 16f42ceb-6dc6-49c8-ba94-f2d53467949d --- diff --git a/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs b/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs index 976fd327..cddd86a1 100644 --- a/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs +++ b/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs @@ -3396,7 +3396,7 @@ namespace DTXMania if (str.StartsWith("PANEL", StringComparison.OrdinalIgnoreCase)) { this.t入力・パラメータ食い込みチェック("PANEL", ref str, ref str2); int dummyResult; // #23885 2010.12.12 yyagi: not to confuse "#PANEL strings (panel)" and "#PANEL int (panpot of EL)" - if (!int.TryParse(str2, out dummyResult)) { // 数値じゃないならPANELとみなす + if (!int.TryParse(str2, out dummyResult)) { // 数値じゃないならPANELとみなす this.PANEL = str2; // goto EOL; // } // 数値ならPAN ELとみなす @@ -3418,8 +3418,8 @@ namespace DTXMania this.t入力・パラメータ食い込みチェック("BASEBPM", ref str, ref str2); double basebpm = 0.0; //if( double.TryParse( str2, out num6 ) && ( num6 > 0.0 ) ) - if (!TryParse(str2, out basebpm) && basebpm > 0.0) // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point - { + if (TryParse(str2, out basebpm) && basebpm > 0.0) // #23880 2010.12.30 yyagi: alternative TryParse to permit both '.' and ',' for decimal point + { // #24204 2011.01.21 yyagi: Fix the condition correctly this.BASEBPM = basebpm; } } else if (str.StartsWith("SOUND_STAGEFAILED", StringComparison.OrdinalIgnoreCase)) { @@ -4063,34 +4063,33 @@ namespace DTXMania { case "_SS": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 0, strパラメータ ); - goto Label_0142; + break; case "_S": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 1, strパラメータ ); - goto Label_0142; + break; case "_A": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 2, strパラメータ ); - goto Label_0142; + break; case "_B": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 3, strパラメータ ); - goto Label_0142; + break; case "_C": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 4, strパラメータ ); - goto Label_0142; + break; case "_D": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 5, strパラメータ ); - goto Label_0142; + break; case "_E": this.t入力・行解析・RESULTIMAGE・ファイルを設定する( 6, strパラメータ ); - goto Label_0142; + break; } } - Label_0142: return true; } private void t入力・行解析・RESULTIMAGE・ファイルを設定する( int nランク0to6, string strファイル名 ) diff --git a/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs b/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs index 5f81392a..2027ed82 100644 --- a/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs +++ b/DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs @@ -42,8 +42,8 @@ namespace DTXMania get; set; } - public List listSongsDB; - public List list曲ルート; + public List listSongsDB; // songs.dbから構築されるlist + public List list曲ルート; // 起動時にフォルダ検索して構築されるlist // コンストラクタ diff --git a/DTXManiaプロジェクト/コード/ステージ/03.オプション/CActOptionList.cs b/DTXManiaプロジェクト/コード/ステージ/03.オプション/CActOptionList.cs index d5b4aa28..f40870aa 100644 --- a/DTXManiaプロジェクト/コード/ステージ/03.オプション/CActOptionList.cs +++ b/DTXManiaプロジェクト/コード/ステージ/03.オプション/CActOptionList.cs @@ -89,8 +89,8 @@ namespace DTXMania this.list項目リスト.Add( this.iBassLeft ); // #23580 2011.1.3 yyagi this.iBassInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass, - "ベースの入力タイミングの微調整を\n行います。\n-99 ~ 99ms まで指定可能です。", - "To adjust the bass input timing.\nYou can set from -99 to 99ms."); + "ベースの入力タイミングの微調整を\n行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、負の\n値を指定してください。", + "To adjust the bass input timing.\nYou can set from -99 to 99ms.\nTo decrease input lag, set minus value."); this.list項目リスト.Add(this.iBassInputAdjustTimeMs); this.n現在の選択項目 = 0; @@ -192,8 +192,8 @@ namespace DTXMania this.list項目リスト.Add( this.iDrumsTight ); // #23580 2011.1.3 yyagi this.iDrumsInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums, - "ドラムの入力タイミングの微調整を\n行います。\n-99 ~ 99ms まで指定可能です。", - "To adjust the bass input timing.\nYou can set from -99 to 99ms."); + "ドラムの入力タイミングの微調整を\n行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、負の\n値を指定してください。", + "To adjust the drums input timing.\nYou can set from -99 to 99ms.\nTo decrease input lag, set minus value."); this.list項目リスト.Add(this.iDrumsInputAdjustTimeMs); this.n現在の選択項目 = 0; @@ -252,9 +252,9 @@ namespace DTXMania this.list項目リスト.Add( this.iGuitarLeft ); // #23580 2011.1.3 yyagi this.iGuitarInputAdjustTimeMs= new CItemInteger("InputAdjust", -99, 99, CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar, - "ギターの入力タイミングの微調整を\n行います。\n-99 ~ 99ms まで指定可能です。", - "To adjust the bass input timing.\nYou can set from -99 to 99ms."); - this.list項目リスト.Add(this.iGuitarInputAdjustTimeMs); + "ギターの入力タイミングの微調整を\n行います。\n-99 ~ 99ms まで指定可能です。\n入力ラグを軽減するためには、負の\n値を指定してください。", + "To adjust the guitar input timing.\nYou can set from -99 to 99ms.\nTo decrease input lag, set minus value." ); + this.list項目リスト.Add( this.iGuitarInputAdjustTimeMs ); this.n現在の選択項目 = 0; this.eメニュー種別 = Eメニュー種別.Guitar; diff --git a/DTXManiaプロジェクト/コード/ステージ/05.選曲/CStage選曲.cs b/DTXManiaプロジェクト/コード/ステージ/05.選曲/CStage選曲.cs index 6500ab3f..10550753 100644 --- a/DTXManiaプロジェクト/コード/ステージ/05.選曲/CStage選曲.cs +++ b/DTXManiaプロジェクト/コード/ステージ/05.選曲/CStage選曲.cs @@ -75,6 +75,8 @@ namespace DTXMania base.list子Activities.Add( this.actPresound = new CActSelectPresound() ); base.list子Activities.Add( this.actArtistComment = new CActSelectArtistComment() ); base.list子Activities.Add( this.actInformation = new CActSelectInformation() ); + + this.CommandHistory = new CCommandHistory(); // #24063 2011.1.16 yyagi } @@ -132,10 +134,10 @@ namespace DTXMania { this.eフェードアウト完了時の戻り値 = E戻り値.継続; this.bBGM再生済み = false; - this.n前回Bassを踏んだ時刻 = -1; - this.n前回HHを叩いた時刻 = -1; - this.n前回ギターをPickした時刻 = -1; - this.n前回ベースをPickした時刻 = -1; +// this.n前回Bassを踏んだ時刻 = -1; +// this.n前回HHを叩いた時刻 = -1; +// this.n前回ギターをPickした時刻 = -1; +// this.n前回ベースをPickした時刻 = -1; this.ftフォント = new Font( "MS PGothic", 26f, GraphicsUnit.Pixel ); for( int i = 0; i < 4; i++ ) this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer ); @@ -181,6 +183,7 @@ namespace DTXMania this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect header panel.png" ), true ); this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect footer panel.png" ), true ); this.txコメントバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect comment bar.png" ), true ); + this.txFLIP = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on gauge etc.png" ), false ); base.OnManagedリソースの作成(); } } @@ -192,6 +195,7 @@ namespace DTXMania CDTXMania.tテクスチャの解放( ref this.tx上部パネル ); CDTXMania.tテクスチャの解放( ref this.tx下部パネル ); CDTXMania.tテクスチャの解放( ref this.txコメントバー ); + CDTXMania.tテクスチャの解放( ref this.txFLIP ); base.OnManagedリソースの解放(); } } @@ -250,7 +254,12 @@ namespace DTXMania } this.actArtistComment.On進行描画(); this.actオプションパネル.On進行描画(); - switch( base.eフェーズID ) + if ( this.txFLIP != null && CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.16 yyagi + { + Rectangle rect = new Rectangle(31, 49, 20, 11); + this.txFLIP.t2D描画( CDTXMania.app.Device, 40, 436, rect ); + } + switch ( base.eフェーズID ) { case CStage.Eフェーズ.共通_フェードイン: if( this.actFIFO.On進行描画() != 0 ) @@ -292,16 +301,17 @@ namespace DTXMania if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 && CDTXMania.act現在入力を占有中のプラグイン == null ) { - if( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) || ( ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) && ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード == null ) ) ) ) - { + if( CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Escape ) || ( ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.Cancel ) ) && ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード == null ) ) ) ) + { // [ESC] CDTXMania.Skin.sound取消音.t再生する(); this.eフェードアウト完了時の戻り値 = E戻り値.タイトルに戻る; this.actFIFO.tフェードアウト開始(); base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; return 0; } - if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x36 ) ) - { + if ( ( CDTXMania.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || CDTXMania.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) && + CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.F1 ) ) + { // [SHIFT] + [F1] OPTION this.actPresound.tサウンド停止(); this.eフェードアウト完了時の戻り値 = E戻り値.オプション呼び出し; this.actFIFO.tフェードアウト開始(); @@ -309,8 +319,9 @@ namespace DTXMania CDTXMania.Skin.sound取消音.t再生する(); return 0; } - if( ( CDTXMania.Input管理.Keyboard.bキーが押されている( 120 ) || CDTXMania.Input管理.Keyboard.bキーが押されている( 0x4e ) ) && CDTXMania.Input管理.Keyboard.bキーが押された( 0x37 ) ) - { + if ( ( CDTXMania.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.RightShift ) || CDTXMania.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.LeftShift ) ) && + CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.F2 ) ) + { // [SHIFT] + [F2] CONFIGURATION this.actPresound.tサウンド停止(); this.eフェードアウト完了時の戻り値 = E戻り値.コンフィグ呼び出し; this.actFIFO.tフェードアウト開始(); @@ -320,7 +331,8 @@ namespace DTXMania } if( this.act曲リスト.r現在選択中の曲 != null ) { - if( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) ) + if( ( CDTXMania.Pad.b押されたDGB( Eパッド.Decide ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || + ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Return ) ) ) ) { CDTXMania.Skin.sound決定音.t再生する(); if( this.act曲リスト.r現在選択中の曲 != null ) @@ -349,19 +361,19 @@ namespace DTXMania } } } - this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) ); - this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) ); + this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.UpArrow ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) ); + this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.R ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) ); if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) ) { this.tカーソルを上へ移動する(); } - this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) ); - this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) ); + this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int)SlimDX.DirectInput.Key.DownArrow ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) ); + this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.B ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) ); if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) ) { this.tカーソルを下へ移動する(); } - if( ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード != null ) ) && ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.FT ) ) ) + if( ( ( this.act曲リスト.r現在選択中の曲 != null ) && ( this.act曲リスト.r現在選択中の曲.r親ノード != null ) ) && ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT ) || CDTXMania.Pad.b押されたGB( Eパッド.Cancel ) ) ) { this.actPresound.tサウンド停止(); CDTXMania.Skin.sound取消音.t再生する(); @@ -369,66 +381,101 @@ namespace DTXMania this.t選択曲変更通知(); } if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.BD ) ) - { - if( ( this.n前回Bassを踏んだ時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回Bassを踏んだ時刻 ) < 400 ) ) + { // [BD]x2 スクロール速度変更 + CommandHistory.Add( E楽器パート.DRUMS, EパッドFlag.BD ); + EパッドFlag[] comChangeScrollSpeed = new EパッドFlag[ 2 ] { EパッドFlag.BD, EパッドFlag.BD }; + if ( CommandHistory.CheckCommand( comChangeScrollSpeed, E楽器パート.DRUMS ) ) { +Debug.WriteLine( "ドラムススクロール速度変更" ); CDTXMania.ConfigIni.n譜面スクロール速度.Drums = ( CDTXMania.ConfigIni.n譜面スクロール速度.Drums + 1 ) % 0x10; CDTXMania.Skin.sound変更音.t再生する(); - this.n前回Bassを踏んだ時刻 = -1; - } - else - { - this.n前回Bassを踏んだ時刻 = CDTXMania.Timer.n現在時刻; } } if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HH ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HHO ) ) - { - if( ( this.n前回HHを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HHを叩いた時刻 ) < 500 ) ) + { // [HH]x2 難易度変更 + CommandHistory.Add( E楽器パート.DRUMS, EパッドFlag.HH ); + EパッドFlag[] comChangeDifficulty = new EパッドFlag[ 2 ] { EパッドFlag.HH, EパッドFlag.HH }; + if ( CommandHistory.CheckCommand( comChangeDifficulty, E楽器パート.DRUMS ) ) { +Debug.WriteLine( "ドラムス難易度変更" ); this.act曲リスト.t難易度レベルをひとつ進める(); CDTXMania.Skin.sound変更音.t再生する(); - this.n前回HHを叩いた時刻 = -1; - } - else - { - this.n前回HHを叩いた時刻 = CDTXMania.Timer.n現在時刻; } } - if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.HT ) ) - { - if( ( this.n前回ギターをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ギターをPickした時刻 ) < 500 ) ) + if( CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.G ) && CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.Pick ) ) // #24177 2011.1.17 yyagi || -> && + { // [G] + [Pick][Pick] ギター難易度変更 + CommandHistory.Add( E楽器パート.GUITAR, EパッドFlag.Pick | EパッドFlag.G ); + EパッドFlag[] comChangeDifficulty = new EパッドFlag[ 2 ] { EパッドFlag.Pick | EパッドFlag.G, EパッドFlag.Pick | EパッドFlag.G }; + if ( CommandHistory.CheckCommand( comChangeDifficulty, E楽器パート.GUITAR ) ) { +Debug.WriteLine( "ギター難易度変更" ); this.act曲リスト.t難易度レベルをひとつ進める(); CDTXMania.Skin.sound変更音.t再生する(); - this.n前回ギターをPickした時刻 = -1; - } - else - { - this.n前回ギターをPickした時刻 = CDTXMania.Timer.n現在時刻; } } - if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.SD ) || CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.HT ) ) - { - if( ( this.n前回ベースをPickした時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回ベースをPickした時刻 ) < 500 ) ) + if( CDTXMania.Pad.b押されている( E楽器パート.BASS, Eパッド.G ) && CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.Pick ) ) // #24177 2011.1.17 yyagi || -> && + { // [G] + [Pick][Pick] ベース難易度変更 + CommandHistory.Add( E楽器パート.BASS, EパッドFlag.Pick | EパッドFlag.G); + EパッドFlag[] comChangeDifficulty = new EパッドFlag[ 2 ] { EパッドFlag.Pick | EパッドFlag.G, EパッドFlag.Pick | EパッドFlag.G }; + if ( CommandHistory.CheckCommand( comChangeDifficulty, E楽器パート.BASS ) ) { +Debug.WriteLine( "ベース難易度変更" ); this.act曲リスト.t難易度レベルをひとつ進める(); CDTXMania.Skin.sound変更音.t再生する(); - this.n前回ベースをPickした時刻 = -1; } - else + } + + if ( CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.Pick ) && !CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.G ) ) + { // ギター[Pick]: コマンドとしてEnqueue + CommandHistory.Add( E楽器パート.GUITAR, EパッドFlag.Pick ); + // Pick, G, G, Pick で、ギターとベースを入れ替え + EパッドFlag[] comSwapGtBs = new EパッドFlag[ 4 ] { EパッドFlag.Pick, EパッドFlag.G, EパッドFlag.G, EパッドFlag.Pick }; + if ( CommandHistory.CheckCommand( comSwapGtBs, E楽器パート.GUITAR ) ) { - this.n前回ベースをPickした時刻 = CDTXMania.Timer.n現在時刻; +Debug.WriteLine( "ギターとベースの入れ替え1" ); + CDTXMania.Skin.sound変更音.t再生する(); + // ギターとベースのキーを入れ替え + CDTXMania.ConfigIni.SwapGuitarBassKeyAssign(); } } - if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HT ) ) - { - if( ( this.n前回HTを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HTを叩いた時刻 ) < 400 ) ) + if ( CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.Pick ) && !CDTXMania.Pad.b押されている( E楽器パート.GUITAR, Eパッド.G ) ) + { // ベース[Pick]: コマンドとしてEnqueue + CommandHistory.Add( E楽器パート.BASS, EパッドFlag.Pick); + // Pick, G, G, Pick で、ギターとベースを入れ替え + EパッドFlag[] comSwapGtBs = new EパッドFlag[ 4 ] { EパッドFlag.Pick, EパッドFlag.G, EパッドFlag.G, EパッドFlag.Pick }; + if ( CommandHistory.CheckCommand( comSwapGtBs, E楽器パート.BASS ) ) { - this.n前回HTを叩いた時刻 = -1; +Debug.WriteLine( "ギターとベースの入れ替え2" ); + CDTXMania.Skin.sound変更音.t再生する(); + // ギターとベースのキーを入れ替え + CDTXMania.ConfigIni.SwapGuitarBassKeyAssign(); } - else + } + if ( CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.G ) ) + { // ギター[G]: コマンドとしてEnqueue + CommandHistory.Add( E楽器パート.GUITAR, EパッドFlag.G ); + } + if ( CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.G ) ) + { // ベース[G]: コマンドとしてEnqueue + CommandHistory.Add( E楽器パート.BASS, EパッドFlag.G); + } + if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.HT ) ) + { // [HT]x2 未使用 + // + CommandHistory.Add( E楽器パート.DRUMS, EパッドFlag.HT ); + EパッドFlag[] comSort = new EパッドFlag[ 2 ] { EパッドFlag.BD, EパッドFlag.HT }; + if ( CommandHistory.CheckCommand( comSort, E楽器パート.DRUMS ) ) { - this.n前回HTを叩いた時刻 = CDTXMania.Timer.n現在時刻; +Debug.WriteLine( "ソート画面発動" ); + +// if( ( this.n前回HTを叩いた時刻 != -1 ) && ( ( CDTXMania.Timer.n現在時刻 - this.n前回HTを叩いた時刻 ) < 400 ) ) +// { +// this.n前回HTを叩いた時刻 = -1; +// } +// else +// { +// this.n前回HTを叩いた時刻 = CDTXMania.Timer.n現在時刻; +// } } } } @@ -501,7 +548,6 @@ namespace DTXMania } } } - private CActSelectArtistComment actArtistComment; private CActFIFOBlack actFIFO; private CActFIFOBlack actFIfrom結果画面; @@ -518,15 +564,103 @@ namespace DTXMania private CCounter ct登場時アニメ用共通; private E戻り値 eフェードアウト完了時の戻り値; private Font ftフォント; - private long n前回Bassを踏んだ時刻; - private long n前回HHを叩いた時刻; - private long n前回HTを叩いた時刻; - private long n前回ギターをPickした時刻; - private long n前回ベースをPickした時刻; +// private long n前回Bassを踏んだ時刻; +// private long n前回HHを叩いた時刻; +// private long n前回HTを叩いた時刻; +// private long n前回ギターをPickした時刻; +// private long n前回ベースをPickした時刻; private CTexture txコメントバー; private CTexture tx下部パネル; private CTexture tx上部パネル; private CTexture tx背景; + private CTexture txFLIP; + + private struct STCommandTime // #24063 2011.1.16 yyagi コマンド入力時刻の記録用 + { + public E楽器パート eInst; // 使用楽器 + public EパッドFlag ePad; // 押されたコマンド(同時押しはOR演算で列挙する) + public long time; // コマンド入力時刻 + } + private class CCommandHistory // #24063 2011.1.16 yyagi コマンド入力履歴を保持・確認するクラス + { + readonly int buffersize = 16; + private List stct; + + public CCommandHistory() // コンストラクタ + { + stct = new List( buffersize ); + } + + /// + /// コマンド入力履歴へのコマンド追加 + /// + /// 楽器の種類 + /// 入力コマンド(同時押しはOR演算で列挙すること) + public void Add( E楽器パート _eInst, EパッドFlag _ePad ) + { + STCommandTime _stct = new STCommandTime { + eInst = _eInst, + ePad = _ePad, + time = CDTXMania.Timer.n現在時刻 + }; + + if ( stct.Count >= buffersize ) + { + stct.RemoveAt( 0 ); + } + stct.Add(_stct); +Debug.WriteLine( "CMDHIS: 楽器=" + _stct.eInst + ", CMD=" + _stct.ePad + ", time=" + _stct.time ); + } + public void RemoveAt( int index ) + { + stct.RemoveAt( index ); + } + + /// + /// コマンド入力に成功しているか調べる + /// + /// 入力が成功したか調べたいコマンド + /// 対象楽器 + /// コマンド入力成功時true + public bool CheckCommand( EパッドFlag[] _ePad, E楽器パート _eInst) + { + int targetCount = _ePad.Length; + int stciCount = stct.Count; + if ( stciCount < targetCount ) + { + return false; + } + + long curTime = CDTXMania.Timer.n現在時刻; + for ( int i = targetCount - 1, j = stciCount - 1; i >= 0; i--, j-- ) + { + if ( _ePad[ i ] != stct[ j ].ePad ) + { +Debug.WriteLine( "CMD解析: false targetCount=" + targetCount + ", i=" + i + ", j=" + j + ": ePad[]=" + _ePad[i] + ", stci[j] = " + stct[j].ePad ); + return false; + } + if ( stct[ j ].eInst != _eInst ) + { +Debug.WriteLine( "CMD解析: false " + i ); + return false; + } + if ( curTime - stct[ j ].time > 500 ) + { +Debug.WriteLine( "CMD解析: false " + i + "; over 500ms" ); + return false; + } + curTime = stct[ j ].time; + } + +Debug.Write( "CMD解析: 成功!(" + _ePad.Length + ") " ); +for ( int i = 0; i < _ePad.Length; i++ ) Debug.Write( _ePad[ i ] + ", " ); +Debug.WriteLine( "" ); + stct.RemoveRange( 0, targetCount ); + + return true; + } + } + private CCommandHistory CommandHistory; private void tカーソルを下へ移動する() { diff --git a/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs b/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs index 2e34b289..7ecb510f 100644 --- a/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs +++ b/DTXManiaプロジェクト/コード/ステージ/07.演奏/ギター画面/CStage演奏ギター画面.cs @@ -2367,7 +2367,7 @@ namespace DTXMania } #if true // DAMAGELEVELTUNING // ---------------------------------- - public float[,] fDamageGaugeDelta = { // #23625 2011.1.10 ickw_284: tuned damege/recover factors + public float[,] fDamageGaugeDelta = { // #23625 2011.1.10 ickw_284: tuned damage/recover factors // drums, guitar, bass { 0.004f, 0.006f, 0.006f }, { 0.002f, 0.003f, 0.003f }, diff --git a/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs b/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs index 1c45d2d7..638ca8e9 100644 --- a/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs +++ b/DTXManiaプロジェクト/コード/ステージ/07.演奏/ドラム画面/CStage演奏ドラム画面.cs @@ -1453,11 +1453,11 @@ namespace DTXMania { // del (debug info) CDTXMania.ConfigIni.b演奏情報を表示する = !CDTXMania.ConfigIni.b演奏情報を表示する; } - else if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.LeftArrow ) ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen. + else if ( keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.LeftArrow ) ) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen. { ChangeInputAdjustTimeInPlaying( keyboard, -1 ); } - else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.RightArrow ) ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen. + else if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.RightArrow ) ) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen. { ChangeInputAdjustTimeInPlaying( keyboard, +1 ); } @@ -1469,7 +1469,7 @@ namespace DTXMania } } } - private void ChangeInputAdjustTimeInPlaying( IInputDevice keyboard, int plusminus ) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen. + private void ChangeInputAdjustTimeInPlaying( IInputDevice keyboard, int plusminus ) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen. { int part, offset = plusminus; if ( keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.LeftShift ) || keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.RightShift ) ) // Guitar InputAdjustTime @@ -4257,7 +4257,7 @@ namespace DTXMania #if true // DAMAGELEVELTUNING // ---------------------------------- - public float[,] fDamageGaugeDelta = { // #23625 2011.1.10 ickw_284: tuned damege/recover factors + public float[,] fDamageGaugeDelta = { // #23625 2011.1.10 ickw_284: tuned damage/recover factors // drums, guitar, bass { 0.004f, 0.006f, 0.006f }, { 0.002f, 0.003f, 0.003f }, diff --git a/DTXManiaプロジェクト/コード/全体/CConfigIni.cs b/DTXManiaプロジェクト/コード/全体/CConfigIni.cs index c857ecf4..3d200cc5 100644 --- a/DTXManiaプロジェクト/コード/全体/CConfigIni.cs +++ b/DTXManiaプロジェクト/コード/全体/CConfigIni.cs @@ -552,7 +552,11 @@ namespace DTXMania } } } - + public bool bIsSwappedGuitarBass // #24063 2011.1.16 yyagi ギターとベースの切り替え中か否か + { + get; + private set; + } public STAUTOPLAY bAutoPlay; [StructLayout( LayoutKind.Sequential )] public struct STAUTOPLAY @@ -826,6 +830,7 @@ namespace DTXMania this.nハイハット切り捨て下限Velocity = 20; this.n切り捨て下限Velocity = 0; // #23857 2010.12.12 yyagi VelocityMin this.bバッファ入力を行う = true; + this.bIsSwappedGuitarBass = false; // #24063 2011.1.16 yyagi ギターとベースの切り替え } public CConfigIni( string iniファイル名 ) : this() @@ -1965,6 +1970,24 @@ namespace DTXMania } } + /// + /// ギターとベースのキーアサイン入れ替え + /// + public void SwapGuitarBassKeyAssign() // #24063 2011.1.16 yyagi + { + for ( int j = 0; j < 10; j++ ) + { + CKeyAssign.STKEYASSIGN t; //= new CConfigIni.CKeyAssign.STKEYASSIGN(); + for ( int k = 0; k < 16; k++ ) + { + t = this.KeyAssign[ 1 ][ j ][ k ]; + this.KeyAssign[ 1 ][ j ][ k ] = this.KeyAssign[ 2 ][ j ][ k ]; + this.KeyAssign[ 2 ][ j ][ k ] = t; + } + } + this.bIsSwappedGuitarBass = !bIsSwappedGuitarBass; + } + // その他 diff --git a/DTXManiaプロジェクト/コード/全体/CDTXMania.cs b/DTXManiaプロジェクト/コード/全体/CDTXMania.cs index 2f18cf2a..d96bb97c 100644 --- a/DTXManiaプロジェクト/コード/全体/CDTXMania.cs +++ b/DTXManiaプロジェクト/コード/全体/CDTXMania.cs @@ -1749,6 +1749,10 @@ for (int i = 0; i < 3; i++) { #region [ Config.iniの出力 ] //--------------------- Trace.TraceInformation("Config.ini を出力します。"); + if ( ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.16 yyagi ギターベースがスワップしているときは元に戻す + { + ConfigIni.SwapGuitarBassKeyAssign(); + } string str = strEXEのあるフォルダ + "Config.ini"; Trace.Indent(); try @@ -1797,18 +1801,6 @@ for (int i = 0; i < 3; i++) { } e.Handled = true; e.SuppressKeyPress = true; -/* - * while (Input管理.Keyboard.bキーが押されている(0x75)) - { - Trace.TraceInformation("Enterが押されている"); - Thread.Sleep(100); - if (Input管理.Keyboard.bキーが離された(0x75)) - { - Trace.TraceInformation("Enterが離された"); - break; - } - } -*/ } } private CScoreIni tScoreIniへBGMAdjustとHistoryとPlayCountを更新(string str新ヒストリ行) diff --git a/DTXManiaプロジェクト/コード/全体/C定数.cs b/DTXManiaプロジェクト/コード/全体/C定数.cs index 58807937..68fdfeb9 100644 --- a/DTXManiaプロジェクト/コード/全体/C定数.cs +++ b/DTXManiaプロジェクト/コード/全体/C定数.cs @@ -55,6 +55,29 @@ namespace DTXMania UNKNOWN = 0x63, Wail = 4 } + [Flags] + public enum EパッドFlag // #24063 2011.1.16 yyagi コマンド入力用 パッド入力のフラグ化 + { + None=0, + HH = 1, + R = 1, + SD = 2, + G = 2, + B = 4, + BD = 4, + HT = 8, + Pick = 8, + LT = 16, + Wail = 16, + FT = 32, + Cancel = 32, + CY = 64, + Decide = 128, + HHO = 128, + RD = 256, + LC = 512, + UNKNOWN = 1024 + } public enum Eランダムモード { OFF, diff --git a/DTXManiaプロジェクト/作成資料/ScreenSelect skill number on gauge etc.psd b/DTXManiaプロジェクト/作成資料/ScreenSelect skill number on gauge etc.psd index 2ee799e6..751fe5e0 100644 Binary files a/DTXManiaプロジェクト/作成資料/ScreenSelect skill number on gauge etc.psd and b/DTXManiaプロジェクト/作成資料/ScreenSelect skill number on gauge etc.psd differ diff --git a/実行時フォルダ/System/Graphics/ScreenSelect skill number on gauge etc.png b/実行時フォルダ/System/Graphics/ScreenSelect skill number on gauge etc.png index 77728ef0..2ba91fa8 100644 Binary files a/実行時フォルダ/System/Graphics/ScreenSelect skill number on gauge etc.png and b/実行時フォルダ/System/Graphics/ScreenSelect skill number on gauge etc.png differ