OSDN Git Service

#23615 Authorでのソート機能を追加。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 20 Apr 2011 09:16:07 +0000 (09:16 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 20 Apr 2011 09:16:07 +0000 (09:16 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@159 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs
DTXManiaプロジェクト/コード/ステージ/05.選曲/CActSortSongs.cs

index 5b97dff..ef48bf5 100644 (file)
@@ -70,7 +70,7 @@ namespace DTXMania
                                try\r
                                {\r
                                        br = new BinaryReader( File.OpenRead( SongsDBファイル名 ) );\r
-                                       if( !br.ReadString().Equals( "SongsDB2" ) )\r
+                                       if ( !br.ReadString().Equals( SONGSDB_VERSION ) )\r
                                        {\r
                                                throw new InvalidDataException( "ヘッダが異なります。" );\r
                                        }\r
@@ -661,6 +661,7 @@ namespace DTXMania
                        cスコア.譜面情報.演奏履歴.行5 = br.ReadString();\r
                        cスコア.譜面情報.レベルを非表示にする = br.ReadBoolean();\r
                        cスコア.譜面情報.曲種別 = (CDTX.E種別) br.ReadInt32();\r
+//                     cスコア.譜面情報.bpm = br.ReadDouble();\r
                        return cスコア;\r
                }\r
                //-----------------\r
@@ -705,6 +706,7 @@ namespace DTXMania
                                                                        c曲リストノード.arスコア[ i ].譜面情報.レベル.Bass = cdtx.LEVEL.Bass;\r
                                                                        c曲リストノード.arスコア[ i ].譜面情報.レベルを非表示にする = cdtx.HIDDENLEVEL;\r
                                                                        c曲リストノード.arスコア[ i ].譜面情報.曲種別 = cdtx.e種別;\r
+//                                                                     c曲リストノード.arスコア[ i ].譜面情報.bpm = cdtx.BPM;\r
                                                                        this.nファイルから反映できたスコア数++;\r
                                                                        cdtx.On非活性化();\r
                                                                        if( CDTXMania.ConfigIni.bLog曲検索ログ出力 )\r
@@ -724,6 +726,7 @@ namespace DTXMania
                                                                                builder.Append( ", lvBs=" + c曲リストノード.arスコア[ i ].譜面情報.レベル.Bass );\r
                                                                                builder.Append( ", lvHide=" + c曲リストノード.arスコア[ i ].譜面情報.レベルを非表示にする );\r
                                                                                builder.Append( ", type=" + c曲リストノード.arスコア[ i ].譜面情報.曲種別 );\r
+//                                                                             builder.Append( ", bpm=" + c曲リストノード.arスコア[ i ].譜面情報.bpm );\r
                                                                                Trace.TraceInformation( builder.ToString() );\r
                                                                        }\r
                                                                }\r
@@ -913,7 +916,7 @@ namespace DTXMania
                        try\r
                        {\r
                                BinaryWriter bw = new BinaryWriter( new FileStream( SongsDBファイル名, FileMode.Create, FileAccess.Write ) );\r
-                               bw.Write( "SongsDB2" );\r
+                               bw.Write( SONGSDB_VERSION );\r
                                this.tSongsDBにリストを1つ出力する( bw, this.list曲ルート );\r
                                bw.Close();\r
                        }\r
@@ -964,6 +967,7 @@ namespace DTXMania
                                        bw.Write( node.arスコア[ i ].譜面情報.演奏履歴.行5 );\r
                                        bw.Write( node.arスコア[ i ].譜面情報.レベルを非表示にする );\r
                                        bw.Write( (int) node.arスコア[ i ].譜面情報.曲種別 );\r
+//                                     bw.Write( node.arスコア[ i ].譜面情報.bpm );\r
                                        this.nSongsDBへ出力できたスコア数++;\r
                                }\r
                        }\r
@@ -1137,7 +1141,7 @@ namespace DTXMania
                                                        nSumPlayCountN1 += c曲リストノード.arスコア[ nL12345 ].譜面情報.演奏回数[ (int) part ];\r
                                                }\r
 //                                     }\r
-                                       Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
+// Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
 \r
 //                             foreach( C曲リストノード c曲リストノード in ノードリスト )\r
@@ -1195,7 +1199,7 @@ namespace DTXMania
                                        {\r
                                                nSumPlayCountN1 = c曲リストノード.arスコア[ nL12345 ].譜面情報.レベル[ (int) part ];\r
                                        }\r
-                                       Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
+// Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
@@ -1252,7 +1256,7 @@ namespace DTXMania
                                        {\r
                                                nSumPlayCountN1 = c曲リストノード.arスコア[ nL12345 ].譜面情報.最大ランク[ (int) part ];\r
                                        }\r
-                                       Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
+// Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
@@ -1302,7 +1306,7 @@ namespace DTXMania
                                        {\r
                                                nSumPlayCountN1 = c曲リストノード.arスコア[ nL12345 ].譜面情報.最大スキル[ (int) part ];\r
                                        }\r
-                                       Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
+// Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
@@ -1352,10 +1356,98 @@ namespace DTXMania
                                        {\r
                                                nSumPlayCountN1 = c曲リストノード.arスコア[ nL12345 ].ファイル情報.最終更新日時;\r
                                        }\r
-                                       Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
+// Debug.WriteLine( nSumPlayCountN1 + ":" + c曲リストノード.strタイトル );\r
                                }\r
                        }\r
                }\r
+               public void t曲リストのソート8_アーティスト名順( List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p )\r
+               {\r
+                       int nL12345 = (int) p[ 0 ]; \r
+                       ノードリスト.Sort( delegate( C曲リストノード n1, C曲リストノード n2 )\r
+                       {\r
+                               if ( n1 == n2 )\r
+                               {\r
+                                       return 0;\r
+                               }\r
+                               int num = this.t比較0_共通( n1, n2 );\r
+                               if ( num != 0 )\r
+                               {\r
+                                       return order * System.Math.Sign( num );\r
+                               }\r
+                               string strAuthorN1 = "";\r
+                               string strAuthorN2 = "";\r
+                               if (n1.arスコア[ nL12345 ] != null ) {\r
+                                       strAuthorN1 = n1.arスコア[ nL12345 ].譜面情報.アーティスト名;\r
+                               }\r
+                               if ( n2.arスコア[ nL12345 ] != null )\r
+                               {\r
+                                       strAuthorN2 = n2.arスコア[ nL12345 ].譜面情報.アーティスト名;\r
+                               }\r
+\r
+                               return order * strAuthorN1.CompareTo( strAuthorN2 );\r
+                       } );\r
+                       foreach ( C曲リストノード c曲リストノード in ノードリスト )\r
+                       {\r
+                               string s = "";\r
+                               if ( c曲リストノード.arスコア[ nL12345 ] != null )\r
+                               {\r
+                                       s = c曲リストノード.arスコア[ nL12345 ].譜面情報.アーティスト名;\r
+                               }\r
+Debug.WriteLine( s + ":" + c曲リストノード.strタイトル );\r
+                       }\r
+               }\r
+#if TEST_SORTBGM\r
+               public void t曲リストのソート9_BPM順( List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p )\r
+               {\r
+                       order = -order;\r
+                       int nL12345 = (int) p[ 0 ];\r
+                       if ( part != E楽器パート.UNKNOWN )\r
+                       {\r
+                               ノードリスト.Sort( delegate( C曲リストノード n1, C曲リストノード n2 )\r
+                               {\r
+                                       #region [ 共通処理 ]\r
+                                       if ( n1 == n2 )\r
+                                       {\r
+                                               return 0;\r
+                                       }\r
+                                       int num = this.t比較0_共通( n1, n2 );\r
+                                       if ( num != 0 )\r
+                                       {\r
+                                               return order * num;\r
+                                       }\r
+                                       if ( ( n1.eノード種別 == C曲リストノード.Eノード種別.BOX ) && ( n2.eノード種別 == C曲リストノード.Eノード種別.BOX ) )\r
+                                       {\r
+                                               return order * n1.arスコア[ 0 ].ファイル情報.フォルダの絶対パス.CompareTo( n2.arスコア[ 0 ].ファイル情報.フォルダの絶対パス );\r
+                                       }\r
+                                       #endregion\r
+                                       double dBPMn1 = 0.0, dBPMn2 = 0.0;\r
+                                       if ( n1.arスコア[ nL12345 ] != null )\r
+                                       {\r
+                                               dBPMn1 = n1.arスコア[ nL12345 ].譜面情報.bpm;\r
+                                       }\r
+                                       if ( n2.arスコア[ nL12345 ] != null )\r
+                                       {\r
+                                               dBPMn2 = n2.arスコア[ nL12345 ].譜面情報.bpm;\r
+                                       }\r
+                                       double d = dBPMn1- dBPMn2;\r
+                                       if ( d != 0 )\r
+                                       {\r
+                                               return order * System.Math.Sign( d );\r
+                                       }\r
+                                       return order * n1.strタイトル.CompareTo( n2.strタイトル );\r
+                               } );\r
+                               foreach ( C曲リストノード c曲リストノード in ノードリスト )\r
+                               {\r
+                                       double dBPM = 0;\r
+                                       if ( c曲リストノード.arスコア[ nL12345 ] != null )\r
+                                       {\r
+                                               dBPM = c曲リストノード.arスコア[ nL12345 ].譜面情報.bpm;\r
+                                       }\r
+Debug.WriteLine( dBPM + ":" + c曲リストノード.strタイトル );\r
+                               }\r
+                       }\r
+               }\r
+#endif\r
                //-----------------\r
                #endregion\r
 \r
index 3cc0655..502a691 100644 (file)
@@ -89,16 +89,26 @@ namespace DTXMania
                                                        this.act曲リスト.n現在のアンカ難易度レベル\r
                                                );\r
                                                break;\r
-//                                     case (int) ESortItem.Author:\r
-//                                             break;\r
+                                       case (int) ESortItem.Author:\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート8_アーティスト名順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\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
+#if TEST_SORTBGM\r
+                                               case (int) ESortItem.BPM:\r
+                                               this.act曲リスト.t曲リストのソート(\r
+                                                       CDTXMania.Songs管理.t曲リストのソート9_BPM順, eInst, nSortOrder,\r
+                                                       this.act曲リスト.n現在のアンカ難易度レベル\r
+                                               );\r
+                                               break;\r
+#endif\r
                                        case (int) ESortItem.Date:\r
                                                this.act曲リスト.t曲リストのソート(\r
                                                        CDTXMania.Songs管理.t曲リストのソート7_更新日時順, eInst, nSortOrder,\r
@@ -288,9 +298,11 @@ namespace DTXMania
                                        { "Level",              "99,98,97,...", "1,2,3,..." },\r
                                        { "Best Rank",  "E,D,C,...",    "SS,S,A,..." },\r
                                        { "PlayCount",  "10,9,8,...",   "1,2,3,..." },\r
-                               //      { "Author",             "Z,Y,X,...",    "A,B,C,..." },\r
+                                       { "Author",             "Z,Y,X,...",    "A,B,C,..." },\r
                                        { "SkillPoint", "100,99,98,...","1,2,3,..." },\r
-                               //      { "BPM",                "300,200,...",  "70,80,90,..." },\r
+#if TEST_SORTBGM\r
+                                       { "BPM",                "300,200,...",  "70,80,90,..." },\r
+#endif\r
                                        { "Date",               "Dec.31,30,...","Jan.1,2,..." },\r
                                        { "Return",             "",                             "" }\r
                                };\r
@@ -395,9 +407,11 @@ namespace DTXMania
                private enum ESortItem : int\r
                {\r
                        Title = 0, Level, BestRank, PlayCount,\r
-                       //Author,\r
+                       Author,\r
                        SkillPoint,\r
-                       //BPM,\r
+#if TEST_SORTBGM\r
+                       BPM,\r
+#endif\r
                        Date,\r
                        Return, END,\r
                        Default = 99\r