<DesignTime>True</DesignTime>\r
</Compile>\r
<None Include="app.config" />\r
+ <None Include="ClassDiagram1.cd" />\r
<None Include="DTXManiaGR.exe.x86.manifest" />\r
<None Include="Properties\Settings.settings">\r
<Generator>SettingsSingleFileGenerator</Generator>\r
<Compile Include="コード\ステージ\05.選曲\CActSelectInformation.cs" />\r
<Compile Include="コード\ステージ\05.選曲\CActSelectPreimageパネル.cs" />\r
<Compile Include="コード\ステージ\05.選曲\CActSelectPresound.cs" />\r
+ <Compile Include="コード\ステージ\05.選曲\CActSelectShowCurrentPosition.cs" />\r
<Compile Include="コード\ステージ\05.選曲\CActSelectステータスパネル.cs" />\r
<Compile Include="コード\ステージ\05.選曲\CActSelect曲リスト.cs" />\r
<Compile Include="コード\ステージ\05.選曲\CActSelect演奏履歴パネル.cs" />\r
--- /dev/null
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+using System.Drawing;\r
+using System.Diagnostics;\r
+using SlimDX;\r
+using FDK;\r
+\r
+namespace DTXMania\r
+{\r
+ internal class CActSelectShowCurrentPosition : CActivity\r
+ {\r
+ // メソッド\r
+\r
+ public CActSelectShowCurrentPosition()\r
+ {\r
+ base.b活性化してない = true;\r
+ }\r
+\r
+ // CActivity 実装\r
+\r
+ public override void On活性化()\r
+ {\r
+ if ( this.b活性化してる )\r
+ return;\r
+\r
+ base.On活性化();\r
+ }\r
+ public override void On非活性化()\r
+ {\r
+ base.On非活性化();\r
+ }\r
+ public override void OnManagedリソースの作成()\r
+ {\r
+ if ( !base.b活性化してない )\r
+ {\r
+ this.txScrollBar = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
+ this.txScrollPosition = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
+ base.OnManagedリソースの作成();\r
+ }\r
+ }\r
+ public override void OnManagedリソースの解放()\r
+ {\r
+ if ( !base.b活性化してない )\r
+ {\r
+ CDTXMania.t安全にDisposeする( ref this.txScrollBar );\r
+ CDTXMania.t安全にDisposeする( ref this.txScrollPosition );\r
+\r
+ base.OnManagedリソースの解放();\r
+ }\r
+ }\r
+ public override int On進行描画()\r
+ {\r
+ #region [ スクロールバーの描画 #27648 ]\r
+ for ( int sy = 0; sy < 336; sy += 128 )\r
+ {\r
+ int ry = ( sy / 128 );\r
+ int h = ( ( ry + 1 ) * 128 > 336 ) ? 336 - ry * 128 : 128;\r
+ this.txScrollBar.t2D描画( CDTXMania.app.Device, 640 - 12, 58 + sy, new Rectangle( ry * 12, 0, 12, h ) ); // 本当のy座標は88なんだが、なぜか約30のバイアスが掛かる・・・\r
+ }\r
+ #endregion\r
+ #region [ スクロール地点の描画 (計算はCActSelect曲リストで行う。スクロール位置と選曲項目の同期のため。)#27648 ]\r
+\r
+ int py = CDTXMania.stage選曲.nスクロールバー相対y座標;\r
+ if ( py <= 336 - 6 - 8 )\r
+ {\r
+ this.txScrollPosition.t2D描画( CDTXMania.app.Device, 640 - 12 + 3, 58 + py, new Rectangle( 30, 120, 6, 8 ) );\r
+ }\r
+ #endregion\r
+\r
+ return 0;\r
+ }\r
+\r
+\r
+ // その他\r
+\r
+ #region [ private ]\r
+ //-----------------\r
+ private CTexture txScrollPosition;\r
+ private CTexture txScrollBar;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+}\r
private set;\r
}\r
\r
+ public int nスクロールバー相対y座標\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ // t選択曲が変更された()内で使う、直前の選曲の保持\r
+ // (前と同じ曲なら選択曲変更に掛かる再計算を省略して高速化するため)\r
+ private C曲リストノード song_last = null;\r
\r
+ \r
// コンストラクタ\r
\r
public CActSelect曲リスト()\r
public void t選択曲が変更された() // #27648\r
{\r
C曲リストノード song = CDTXMania.stage選曲.r現在選択中の曲;\r
- if ( song == null )\r
+ if ( song == null || song == song_last )\r
return;\r
+ song_last = song;\r
List<C曲リストノード> list = ( song.r親ノード != null ) ? song.r親ノード.list子リスト : CDTXMania.Songs管理.list曲ルート;\r
int index = list.IndexOf( song ) + 1;\r
if ( index <= 0 )\r
this.txEnumeratingSongs = null;\r
}\r
#endregion\r
- #region [ スクロールバー #27648 ]\r
+ #region [ 曲数表示 ]\r
this.txアイテム数数字 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect skill number on gauge etc.png" ), false );\r
- this.txScrollBar = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
- this.txScrollPosition = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect scrollbar.png" ), false );\r
#endregion\r
-\r
base.OnManagedリソースの作成();\r
}\r
public override void OnManagedリソースの解放()\r
{\r
if( this.b活性化してない )\r
return;\r
+\r
CDTXMania.t安全にDisposeする( ref this.txアイテム数数字 );\r
- CDTXMania.t安全にDisposeする( ref this.txScrollBar );\r
- CDTXMania.t安全にDisposeする( ref this.txScrollPosition );\r
\r
for( int i = 0; i < 13; i++ )\r
CDTXMania.t安全にDisposeする( ref this.stバー情報[ i ].txタイトル名 );\r
this.n目標のスクロールカウンタ += 100;\r
\r
this.t選択曲が変更された(); // スクロールバー用に今何番目を選択しているかを更新\r
-\r
+ \r
if( this.n目標のスクロールカウンタ == 0 )\r
CDTXMania.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更!\r
//-----------------\r
//-----------------\r
#endregion\r
}\r
- #region [ スクロールバーの描画 #27648 ]\r
- for ( int sy = 0; sy < 336; sy += 128 )\r
- {\r
- int ry = (sy / 128);\r
- int h = ( ( ry + 1 ) * 128 > 336 ) ? 336 - ry * 128 : 128;\r
- this.txScrollBar.t2D描画( CDTXMania.app.Device, 640 - 12, 58 + sy, new Rectangle( ry * 12 , 0, 12, h ) ); // 本当のy座標は88なんだが、なぜか約30のバイアスが掛かる・・・\r
- }\r
- #endregion\r
- #region [ スクロール地点の描画 #27648 ]\r
+ #region [ スクロール地点の計算(描画はCActSelectShowCurrentPositionにて行う) #27648 ]\r
int py;\r
double d = 0;\r
if ( nNumOfItems > 1 )\r
int delta = (int) ( d * this.n現在のスクロールカウンタ / 100 );\r
if ( py + delta <= 336 - 6 - 8 )\r
{\r
- this.txScrollPosition.t2D描画( CDTXMania.app.Device, 640 - 12 + 3, 58 + 3 + py + delta, new Rectangle( 30, 120, 6, 8 ) );\r
+ this.nスクロールバー相対y座標 = py + delta;\r
}\r
#endregion\r
+\r
#region [ アイテム数の描画 #27648 ]\r
tアイテム数の描画();\r
#endregion\r
-\r
return 0;\r
}\r
\r
private STバー情報[] stバー情報 = new STバー情報[ 13 ];\r
private CTexture txSongNotFound, txEnumeratingSongs;\r
private CTexture txスキル数字;\r
+ private CTexture txアイテム数数字;\r
private STバー tx曲名バー;\r
private ST選曲バー tx選曲バー;\r
\r
private int nCurrentPosition = 0;\r
private int nNumOfItems = 0;\r
- private CTexture txScrollPosition;\r
- private CTexture txScrollBar;\r
- private CTexture txアイテム数数字;\r
\r
private Eバー種別 e曲のバー種別を返す( C曲リストノード song )\r
{\r
private void tアイテム数の描画()\r
{\r
string s = nCurrentPosition.ToString() + "/" + nNumOfItems.ToString();\r
- int x = 639 - 8;\r
+ int x = 639 - 8 - 12;\r
int y = 362;\r
\r
for ( int p = s.Length - 1; p >= 0; p-- )\r
internal class CStage選曲 : CStage\r
{\r
// プロパティ\r
-\r
+ public int nスクロールバー相対y座標\r
+ {\r
+ get\r
+ {\r
+ if ( act曲リスト != null )\r
+ {\r
+ return act曲リスト.nスクロールバー相対y座標;\r
+ }\r
+ else\r
+ {\r
+ return 0;\r
+ }\r
+ }\r
+ }\r
public bool bIsEnumeratingSongs\r
{\r
get\r
base.list子Activities.Add( this.actArtistComment = new CActSelectArtistComment() );\r
base.list子Activities.Add( this.actInformation = new CActSelectInformation() );\r
base.list子Activities.Add( this.actSortSongs = new CActSortSongs() );\r
+ base.list子Activities.Add( this.actShowCurrentPosition = new CActSelectShowCurrentPosition() );\r
\r
this.CommandHistory = new CCommandHistory(); // #24063 2011.1.16 yyagi\r
// this.actSortSongs.bIsActiveSortMenu = false; // #23615 2011.3.28 yyagi\r
this.act演奏履歴パネル.t選択曲が変更された();\r
this.actステータスパネル.t選択曲が変更された();\r
this.actArtistComment.t選択曲が変更された();\r
- this.act曲リスト.t選択曲が変更された();\r
\r
#region [ プラグインにも通知する(BOX, RANDOM, BACK なら通知しない)]\r
//---------------------\r
#endregion\r
}\r
\r
-\r
// CStage 実装\r
\r
/// <summary>\r
Rectangle rect = new Rectangle(31, 49, 20, 11);\r
this.txFLIP.t2D描画( CDTXMania.app.Device, 40, 436, rect );\r
}\r
+ this.actShowCurrentPosition.On進行描画(); // #27648 2011.3.28 yyagi\r
\r
switch ( base.eフェーズID )\r
{\r
private CActSelectステータスパネル actステータスパネル;\r
private CActSelect演奏履歴パネル act演奏履歴パネル;\r
private CActSelect曲リスト act曲リスト;\r
+ private CActSelectShowCurrentPosition actShowCurrentPosition;\r
\r
private CActSortSongs actSortSongs;\r
\r