OSDN Git Service

#27058 取り急ぎAuthorだけ、ソート順を正しくするようにした。
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 30 Dec 2015 16:40:23 +0000 (16:40 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Wed, 30 Dec 2015 16:40:23 +0000 (16:40 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@907 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/スコア、曲/CSong管理.cs
実行時フォルダ(DTXCreator)/dll/FDK.dll
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll

index 576f838..cf723e5 100644 (file)
@@ -1527,6 +1527,7 @@ namespace DTXMania
                        int nL12345 = (int) p[ 0 ]; \r
                        ノードリスト.Sort( delegate( C曲リストノード n1, C曲リストノード n2 )\r
                        {\r
+                               #region [ 共通処理 ]\r
                                if ( n1 == n2 )\r
                                {\r
                                        return 0;\r
@@ -1536,18 +1537,31 @@ namespace DTXMania
                                {\r
                                        return order * System.Math.Sign( num );\r
                                }\r
+                               #endregion\r
                                string strAuthorN1 = "";\r
                                string strAuthorN2 = "";\r
-                               if (n1.arスコア[ nL12345 ] != null ) {\r
-                                       strAuthorN1 = n1.arスコア[ nL12345 ].譜面情報.アーティスト名;\r
+                               int nL12345補正後1 = nL12345;\r
+                               int nL12345補正後2 = nL12345;\r
+                               if ( n1.arスコア[ nL12345 ] == null )\r
+                               {\r
+                                       nL12345補正後1 = n現在のアンカ難易度レベルに最も近い難易度レベルを返す( n1, nL12345 );\r
+                               }\r
+                               if ( n1.arスコア[ nL12345補正後1 ] != null )\r
+                               {\r
+                                       strAuthorN1 = n1.arスコア[ nL12345補正後1 ].譜面情報.アーティスト名;\r
                                }\r
-                               if ( n2.arスコア[ nL12345 ] != null )\r
+                               if ( n2.arスコア[ nL12345 ] == null )\r
                                {\r
-                                       strAuthorN2 = n2.arスコア[ nL12345 ].譜面情報.アーティスト名;\r
+                                       nL12345補正後2 = n現在のアンカ難易度レベルに最も近い難易度レベルを返す( n2, nL12345 );\r
+                               }\r
+                               if ( n2.arスコア[ nL12345補正後2 ] != null )\r
+                               {\r
+                                       strAuthorN2 = n2.arスコア[ nL12345補正後2 ].譜面情報.アーティスト名;\r
                                }\r
 \r
                                return order * strAuthorN1.CompareTo( strAuthorN2 );\r
                        } );\r
+                       #region [ デバッグ用 ]\r
                        foreach ( C曲リストノード c曲リストノード in ノードリスト )\r
                        {\r
                                string s = "";\r
@@ -1555,8 +1569,62 @@ namespace DTXMania
                                {\r
                                        s = c曲リストノード.arスコア[ nL12345 ].譜面情報.アーティスト名;\r
                                }\r
-Debug.WriteLine( s + ":" + c曲リストノード.strタイトル );\r
+//Debug.WriteLine( s + ":" + c曲リストノード.strタイトル );\r
                        }\r
+                       #endregion\r
+               }\r
+               /// <summary>\r
+               /// CActSelect曲リスト のメソッドのデッドコピー。美しくない実装ですみません。\r
+               /// </summary>\r
+               /// <param name="song"></param>\r
+               /// <param name="n現在のアンカ難易度レベル"></param>\r
+               /// <returns></returns>\r
+               public int n現在のアンカ難易度レベルに最も近い難易度レベルを返す( C曲リストノード song, int n現在のアンカ難易度レベル )\r
+               {\r
+                       // 事前チェック。\r
+\r
+                       if ( song == null )\r
+                               return n現在のアンカ難易度レベル;   // 曲がまったくないよ\r
+\r
+                       if ( song.arスコア[ n現在のアンカ難易度レベル ] != null )\r
+                               return n現在のアンカ難易度レベル;   // 難易度ぴったりの曲があったよ\r
+\r
+                       if ( ( song.eノード種別 == C曲リストノード.Eノード種別.BOX ) || ( song.eノード種別 == C曲リストノード.Eノード種別.BACKBOX ) )\r
+                               return 0;                                                               // BOX と BACKBOX は関係無いよ\r
+\r
+\r
+                       // 現在のアンカレベルから、難易度上向きに検索開始。\r
+\r
+                       int n最も近いレベル = n現在のアンカ難易度レベル;\r
+\r
+                       for ( int i = 0; i < 5; i++ )\r
+                       {\r
+                               if ( song.arスコア[ n最も近いレベル ] != null )\r
+                                       break;  // 曲があった。\r
+\r
+                               n最も近いレベル = ( n最も近いレベル + 1 ) % 5;    // 曲がなかったので次の難易度レベルへGo。(5以上になったら0に戻る。)\r
+                       }\r
+\r
+\r
+                       // 見つかった曲がアンカより下のレベルだった場合……\r
+                       // アンカから下向きに検索すれば、もっとアンカに近い曲があるんじゃね?\r
+\r
+                       if ( n最も近いレベル < n現在のアンカ難易度レベル )\r
+                       {\r
+                               // 現在のアンカレベルから、難易度下向きに検索開始。\r
+\r
+                               n最も近いレベル = n現在のアンカ難易度レベル;\r
+\r
+                               for ( int i = 0; i < 5; i++ )\r
+                               {\r
+                                       if ( song.arスコア[ n最も近いレベル ] != null )\r
+                                               break;  // 曲があった。\r
+\r
+                                       n最も近いレベル = ( ( n最も近いレベル - 1 ) + 5 ) % 5;    // 曲がなかったので次の難易度レベルへGo。(0未満になったら4に戻る。)\r
+                               }\r
+                       }\r
+\r
+                       return n最も近いレベル;\r
                }\r
 #if TEST_SORTBGM\r
                public void t曲リストのソート9_BPM順( List<C曲リストノード> ノードリスト, E楽器パート part, int order, params object[] p )\r
index 58b6281..f616c18 100644 (file)
Binary files a/実行時フォルダ(DTXCreator)/dll/FDK.dll and b/実行時フォルダ(DTXCreator)/dll/FDK.dll differ
index e002885..fa2c090 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index 58b6281..f616c18 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ