OSDN Git Service

#23615 ソート機能のクラスをコミットし忘れていたので追加。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 30 Mar 2011 15:23:11 +0000 (15:23 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 30 Mar 2011 15:23:11 +0000 (15:23 +0000)
その他若干の変更。(コメント追加程度)

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

DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs
DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSortSongs.cs [new file with mode: 0644]
DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏チップファイアGB.cs

index 091c9b4..46e2f82 100644 (file)
@@ -79,7 +79,7 @@ namespace DTXMania
 \r
 \r
                        int nDGmode = ( CDTXMania.ConfigIni.bGuitar有効 ? 2 : 0 ) + ( CDTXMania.ConfigIni.bDrums有効 ? 1 : 0 ) - 1;\r
-                       this.iSystemGRmode = new CItemList( "DrGrMode", CItemBase.Eパネル種別.通常, nDGmode,\r
+                       this.iSystemGRmode = new CItemList( "DrGRMode", CItemBase.Eパネル種別.通常, nDGmode,\r
                                "DrOnly: ドラムのみ有効にします。\nGROnly: ギター/ベースのみの\n専用画面を用います。\nDr&GR: ドラムとギター/ベースの\n両方を有効にします。\n",\r
                                "DrOnly: Only Drums is available.\nGROnly: Only Guitar/Bass are available.\n You can play them in GR screen.\nDr&GR: Both Drums and Guitar/bass\n are available.",\r
                                new string[] { "DrOnly", "GROnly", "Dr&GR"} );\r
diff --git a/DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSortSongs.cs b/DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSortSongs.cs
new file mode 100644 (file)
index 0000000..dbe3a50
--- /dev/null
@@ -0,0 +1,388 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Diagnostics;\r
+using System.Text;\r
+using System.Runtime.InteropServices;\r
+using System.Drawing;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+       internal class CActSortSongs : CActivity\r
+       {\r
+\r
+               // プロパティ\r
+\r
+               /// <summary>\r
+               /// ソートメニュー機能を使用中かどうか。外部からこれをtrueにすると、ソートメニューが出現する。falseにすると消える。\r
+               /// </summary>\r
+               public bool bIsActiveSortMenu\r
+               {\r
+                       get; private set;\r
+               }\r
+\r
+               // コンストラクタ\r
+\r
+               public CActSortSongs()\r
+               {\r
+                       base.b活性化してない = true;\r
+                       this.bキー入力待ち = true;\r
+                       this.bIsActiveSortMenu = false;\r
+                       this.font = new CActDFPFont();\r
+                       base.list子Activities.Add( this.font );\r
+                       this.n現在の選択行 = 0;\r
+                       nSortType = (int) ESortItem.Default;\r
+                       nSortOrder = (int) ESortOrder.Descend;\r
+               }\r
+\r
+\r
+               // メソッド\r
+               public void tActivateSortMenu( ref CActSelect曲リスト ca )\r
+               {\r
+                       this.act曲リスト = ca;\r
+                       this.bIsActiveSortMenu = true;\r
+               }\r
+               public void tDeativateSortMenu()\r
+               {\r
+                       this.bIsActiveSortMenu = false;\r
+               }\r
+\r
+               public void tEnter押下(E楽器パート eInst)\r
+               {\r
+                       if( this.bキー入力待ち )\r
+                       {\r
+                               CDTXMania.Skin.sound決定音.t再生する();\r
+\r
+                               if ( this.n現在の選択行 != (int) ESortItem.Return )\r
+                               {\r
+                                       nSortOrder = ( nSortType == n現在の選択行 )? -nSortOrder : (int)ESortOrder.Ascend;\r
+                                       nSortType = n現在の選択行;\r
+                               }\r
+\r
+                               switch( this.n現在の選択行 )\r
+                               {\r
+                                       case (int) ESortItem.Title:\r
+//                                             this.act曲リスト.t曲リストのソート2_タイトル順( eInst, nSortOrder );\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート2_タイトル順, eInst, nSortOrder\r
+                                               );\r
+                                               break;\r
+                                       case (int) ESortItem.Level:\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート4_LEVEL順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\r
+                                               break;\r
+                                       case (int) ESortItem.BestRank:\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート5_BestRank順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\r
+                                               break;\r
+                                       case (int) ESortItem.PlayCount:\r
+//                                             this.act曲リスト.t曲リストのソート3_演奏回数の多い順( eInst, nSortOrder );\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート3_演奏回数の多い順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\r
+                                               break;\r
+//                                     case (int) ESortItem.Author:\r
+//                                             break;\r
+                                       case (int) ESortItem.SkillPoint:\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート6_SkillPoint順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\r
+                                               break;\r
+//                                     case (int) ESortItem.BPM:\r
+//                                             break;\r
+                                       case (int) ESortItem.Date:\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート7_更新日時順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\r
+                                               break;\r
+                                       case (int)ESortItem.Return:\r
+                                               this.tDeativateSortMenu();\r
+                                               break;\r
+                                       default:\r
+                                               break;\r
+                               }\r
+\r
+                               this.bキー入力待ち = true;\r
+                       }\r
+               }\r
+               public void t次に移動()\r
+               {\r
+                       if( this.bキー入力待ち )\r
+                       {\r
+                               CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+                               this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % (int)ESortItem.END;\r
+                       }\r
+               }\r
+               public void t前に移動()\r
+               {\r
+                       if( this.bキー入力待ち )\r
+                       {\r
+                               CDTXMania.Skin.soundカーソル移動音.t再生する();\r
+                               this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + (int)ESortItem.END ) % (int)ESortItem.END;\r
+                       }\r
+               }\r
+\r
+               \r
+               // CActivity 実装\r
+\r
+               public override void On活性化()\r
+               {\r
+                       this.n現在の選択行 = 0;\r
+                       this.bキー入力待ち = true;\r
+                       for ( int i = 0; i < 4; i++ )\r
+                       {\r
+                               this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );\r
+                       }\r
+                       base.On活性化();\r
+               }\r
+               public override void On非活性化()\r
+               {\r
+                       if( !base.b活性化してない )\r
+                       {\r
+                               CDTXMania.tテクスチャの解放( ref this.txCursor );\r
+                               CDTXMania.tテクスチャの解放( ref this.txSortMenuBackground );\r
+                               for ( int i = 0; i < 4; i++ )\r
+                               {\r
+                                       this.ctキー反復用[ i ] = null;\r
+                               }\r
+                               base.On非活性化();\r
+                       }\r
+               }\r
+               public override void OnManagedリソースの作成()\r
+               {\r
+                       if( !base.b活性化してない )\r
+                       {\r
+                               this.txCursor = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );\r
+                               this.txSortMenuBackground = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect sort menu background.png" ), false );\r
+                               base.OnManagedリソースの作成();\r
+                       }\r
+               }\r
+               public override void OnManagedリソースの解放()\r
+               {\r
+                       if ( !base.b活性化してない )\r
+                       {\r
+                               CDTXMania.tテクスチャの解放( ref this.txSortMenuBackground );\r
+                               CDTXMania.tテクスチャの解放( ref this.txCursor );\r
+                       }\r
+                       base.OnManagedリソースの解放();\r
+               }\r
+\r
+               public override int On進行描画()\r
+               {\r
+                       throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" );\r
+               }\r
+               public int t進行描画( bool bIsActive )\r
+               {\r
+                       if( !base.b活性化してない && bIsActive )\r
+                       {\r
+                               if( this.bキー入力待ち )\r
+                               {\r
+\r
+                                       #region [ キー入力: キャンセル ]\r
+                                       if ( CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape )\r
+                                               || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT )\r
+                                               || CDTXMania.Pad.b押されたGB( Eパッド.Cancel ) )\r
+                                       {       // キャンセル\r
+                                               CDTXMania.Skin.sound取消音.t再生する();\r
+                                               //this.bキー入力待ち = false;\r
+                                               this.bIsActiveSortMenu = false;\r
+                                       }\r
+                                       #endregion\r
+                                       #region [ キー入力: 決定 ]\r
+                                       E楽器パート eInst = E楽器パート.UNKNOWN;\r
+                                       ESortAction eAction = ESortAction.END;\r
+                                       if ( CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.Decide ) )\r
+                                       {\r
+                                               eInst = E楽器パート.GUITAR;\r
+                                               eAction = ESortAction.Decide;\r
+                                       }\r
+                                       else if ( CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.Decide ) )\r
+                                       {\r
+                                               eInst = E楽器パート.BASS;\r
+                                               eAction = ESortAction.Decide;\r
+                                       }\r
+                                       else if (\r
+                                               CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) \r
+                                               || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC )\r
+                                               || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Return ) ) )\r
+                                       {\r
+                                               eInst = E楽器パート.DRUMS;\r
+                                               eAction = ESortAction.Decide;\r
+                                       }\r
+                                       if (eAction == ESortAction.Decide)      // 決定\r
+                                       {\r
+                                               this.tEnter押下(eInst);\r
+                                       }\r
+                                       #endregion\r
+                                       #region [ キー入力: 前に移動 ]\r
+                                       this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.UpArrow ), new CCounter.DGキー処理( this.t前に移動 ) );\r
+                                       this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.R ), new CCounter.DGキー処理( this.t前に移動 ) );\r
+                                       if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )\r
+                                       {\r
+                                               this.t前に移動();\r
+                                       }\r
+                                       #endregion\r
+                                       #region [ キー入力: 次に移動 ]\r
+                                       this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.DownArrow ), new CCounter.DGキー処理( this.t次に移動 ) );\r
+                                       this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.B ), new CCounter.DGキー処理( this.t次に移動 ) );\r
+                                       if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )\r
+                                       {\r
+                                               this.t次に移動();\r
+                                       }\r
+                                       #endregion\r
+                               }\r
+                               #region [ ソートメニュー 背景描画 ]\r
+                               if ( this.txSortMenuBackground != null )\r
+                               {\r
+                                       this.txSortMenuBackground.t2D描画( CDTXMania.app.Device, 160, 40 );\r
+                               }\r
+                               #endregion\r
+                               #region [ ソートメニュータイトル描画 ]\r
+                               int x = 240, y = 44;\r
+                               font.t文字列描画( x, y, "SORT MENU", false, 1.0f);\r
+                               #endregion\r
+                               #region [ カーソル描画 ]\r
+                               if ( this.txCursor != null )\r
+                               {\r
+                                       int height = 32;\r
+                                       int curX = 180;\r
+                                       int curY = 46 + ( height * ( this.n現在の選択行 + 1 ) );\r
+                                       this.txCursor.t2D描画( CDTXMania.app.Device, curX, curY, new Rectangle( 0, 0, 16, 32 ) );\r
+                                       curX += 0x10;\r
+                                       Rectangle rectangle = new Rectangle( 8, 0, 0x10, 0x20 );\r
+                                       for( int j = 0; j < 16; j++ )\r
+                                       {\r
+                                               this.txCursor.t2D描画( CDTXMania.app.Device, curX, curY, rectangle );\r
+                                               curX += 16;\r
+                                       }\r
+                                       this.txCursor.t2D描画( CDTXMania.app.Device, curX, curY, new Rectangle( 0x10, 0, 16, 32 ) );\r
+                               }\r
+                               #endregion\r
+                               #region [ ソート候補文字列描画 ]\r
+                               string[] strSortItem = {\r
+                                       "Title", "Level", "Best Rank", "PlayCount",\r
+                                       //"Author",\r
+                                       "SkillPoint",\r
+                                       //"BPM",\r
+                                       "Date",\r
+                                       "Return"\r
+                               };\r
+                               string[] strSortOrder = {\r
+                                       "Descend", "", "Ascend"\r
+                               };\r
+                               for ( int i = 0; i < strSortItem.Length; i++ )\r
+                               {\r
+                                       bool bBold = ( i == nSortType ) ? true : false;\r
+                                       font.t文字列描画( 190, 80 + i * 32, strSortItem[ i ], bBold, 1.0f );\r
+                                       if ( bBold )\r
+                                       {\r
+                                               // nSortOder+1 == 0(Ascend), (1,) 2(Descend)\r
+                                               font.t文字列描画( 350, 80 + i * 32, strSortOrder[ nSortOrder + 1 ], bBold, 1.0f );\r
+                                       }\r
+                               }\r
+                               #endregion\r
+\r
+                       }\r
+                       return 0;\r
+               }\r
+\r
+\r
+               // その他\r
+\r
+               #region [ private ]\r
+               //-----------------\r
+\r
+               private bool bキー入力待ち;\r
+\r
+               private int n現在の選択行;\r
+               private CTexture txSortMenuBackground;\r
+               private CTexture txCursor;\r
+               private CActDFPFont font;\r
+               private CActSelect曲リスト act曲リスト;\r
+\r
+               [StructLayout( LayoutKind.Sequential )]\r
+               private struct STキー反復用カウンタ\r
+               {\r
+                       public CCounter Up;\r
+                       public CCounter Down;\r
+                       public CCounter R;\r
+                       public CCounter B;\r
+                       public CCounter this[ int index ]\r
+                       {\r
+                               get\r
+                               {\r
+                                       switch ( index )\r
+                                       {\r
+                                               case 0:\r
+                                                       return this.Up;\r
+\r
+                                               case 1:\r
+                                                       return this.Down;\r
+\r
+                                               case 2:\r
+                                                       return this.R;\r
+\r
+                                               case 3:\r
+                                                       return this.B;\r
+                                       }\r
+                                       throw new IndexOutOfRangeException();\r
+                               }\r
+                               set\r
+                               {\r
+                                       switch ( index )\r
+                                       {\r
+                                               case 0:\r
+                                                       this.Up = value;\r
+                                                       return;\r
+\r
+                                               case 1:\r
+                                                       this.Down = value;\r
+                                                       return;\r
+\r
+                                               case 2:\r
+                                                       this.R = value;\r
+                                                       return;\r
+\r
+                                               case 3:\r
+                                                       this.B = value;\r
+                                                       return;\r
+                                       }\r
+                                       throw new IndexOutOfRangeException();\r
+                               }\r
+                       }\r
+               }\r
+               private STキー反復用カウンタ ctキー反復用;\r
+\r
+               private enum ESortAction : int\r
+               {\r
+                       Cancel, Decide, Previous, Next, END\r
+               }\r
+               private enum ESortItem : int\r
+               {\r
+                       Title = 0, Level, BestRank, PlayCount,\r
+                       //Author,\r
+                       SkillPoint,\r
+                       //BPM,\r
+                       Date,\r
+                       Return, END,\r
+                       Default = 99\r
+               };\r
+               private enum ESortOrder : int\r
+               {\r
+                       Ascend = 1, Descend = -1\r
+               }\r
+               private int nSortType, nSortOrder;\r
+\r
+               //-----------------\r
+               #endregion\r
+       }\r
+\r
+\r
+}\r
index ef51014..c3b782a 100644 (file)
@@ -25,7 +25,7 @@ namespace DTXMania
                        {\r
                                this.pt中央位置[ nLane ].X = n中央X;\r
                                this.pt中央位置[ nLane ].Y = n中央Y;\r
-                               this.ct進行[ nLane ].t開始( 24, 0x38, 8, CDTXMania.Timer );         // 2011.2.17 yyagi: (0, 0x38, 4,..) -> (24, 0x38, 8) に変更 ギターチップの光り始めを早くするため\r
+                               this.ct進行[ nLane ].t開始( 24, 0x38, 8, CDTXMania.Timer );         // #24736 2011.2.17 yyagi: (0, 0x38, 4,..) -> (24, 0x38, 8) に変更 ギターチップの光り始めを早くするため\r
                        }\r
                }\r
 \r