2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Diagnostics;
\r
6 using System.Drawing;
\r
7 using SlimDX.DirectInput;
\r
12 internal class CStageタイトル : CStage
\r
18 base.eステージID = CStage.Eステージ.タイトル;
\r
19 base.b活性化してない = true;
\r
20 base.list子Activities.Add( this.actFIfromSetup = new CActFIFOWhite() );
\r
21 base.list子Activities.Add( this.actFI = new CActFIFOWhite() );
\r
22 base.list子Activities.Add( this.actFO = new CActFIFOWhite() );
\r
28 public override void On活性化()
\r
30 Trace.TraceInformation( "タイトルステージを活性化します。" );
\r
34 for( int i = 0; i < 4; i++ )
\r
36 this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );
\r
38 this.ct上移動用 = new CCounter();
\r
39 this.ct下移動用 = new CCounter();
\r
40 this.ctカーソルフラッシュ用 = new CCounter();
\r
45 Trace.TraceInformation( "タイトルステージの活性化を完了しました。" );
\r
49 public override void On非活性化()
\r
51 Trace.TraceInformation( "タイトルステージを非活性化します。" );
\r
55 for( int i = 0; i < 4; i++ )
\r
57 this.ctキー反復用[ i ] = null;
\r
61 this.ctカーソルフラッシュ用 = null;
\r
65 Trace.TraceInformation( "タイトルステージの非活性化を完了しました。" );
\r
70 public override void OnManagedリソースの作成()
\r
72 if( !base.b活性化してない )
\r
74 this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenTitle background.jpg" ), false );
\r
75 this.txメニュー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenTitle menu.png" ), false );
\r
76 base.OnManagedリソースの作成();
\r
79 public override void OnManagedリソースの解放()
\r
81 if( !base.b活性化してない )
\r
83 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
84 CDTXMania.tテクスチャの解放( ref this.txメニュー );
\r
85 base.OnManagedリソースの解放();
\r
88 public override int On進行描画()
\r
90 if( !base.b活性化してない )
\r
92 #region [ 初めての進行描画 ]
\r
93 //---------------------
\r
94 if( base.b初めての進行描画 )
\r
96 if( CDTXMania.r直前のステージ == CDTXMania.stage起動 )
\r
98 this.actFIfromSetup.tフェードイン開始();
\r
99 base.eフェーズID = CStage.Eフェーズ.タイトル_起動画面からのフェードイン;
\r
103 this.actFI.tフェードイン開始();
\r
104 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
106 this.ctカーソルフラッシュ用.t開始( 0, 700, 5, CDTXMania.Timer );
\r
107 this.ctカーソルフラッシュ用.n現在の値 = 100;
\r
108 base.b初めての進行描画 = false;
\r
110 //---------------------
\r
115 #region [ カーソル上移動 ]
\r
116 //---------------------
\r
117 if( this.ct上移動用.b進行中 )
\r
120 if( this.ct上移動用.b終了値に達した )
\r
125 //---------------------
\r
127 #region [ カーソル下移動 ]
\r
128 //---------------------
\r
129 if( this.ct下移動用.b進行中 )
\r
132 if( this.ct下移動用.b終了値に達した )
\r
137 //---------------------
\r
139 #region [ カーソルフラッシュ ]
\r
140 //---------------------
\r
141 this.ctカーソルフラッシュ用.t進行Loop();
\r
142 //---------------------
\r
147 if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 // 通常状態、かつ
\r
148 && CDTXMania.act現在入力を占有中のプラグイン == null ) // プラグインの入力占有がない
\r
150 if( CDTXMania.Input管理.Keyboard.bキーが押された( (int) Key.Escape ) )
\r
153 this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 0x84 ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
\r
154 this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.HH ), new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
\r
155 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )
\r
156 this.tカーソルを上へ移動する();
\r
158 this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( 50 ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
\r
159 this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.BD ), new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
\r
160 if( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )
\r
161 this.tカーソルを下へ移動する();
\r
163 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 ) ) ) )
\r
165 if( ( this.n現在のカーソル行 == 0 ) && CDTXMania.Skin.soundゲーム開始音.b読み込み成功 )
\r
167 CDTXMania.Skin.soundゲーム開始音.t再生する();
\r
171 CDTXMania.Skin.sound決定音.t再生する();
\r
173 if( this.n現在のカーソル行 == 3 )
\r
177 this.actFO.tフェードアウト開始();
\r
178 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
184 if( this.tx背景 != null )
\r
185 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
187 if( this.txメニュー != null )
\r
190 int y = 0xcb + ( this.n現在のカーソル行 * 0x27 );
\r
191 if( this.ct上移動用.b進行中 )
\r
193 y += (int) ( 19.5 * ( Math.Cos( 3.1415926535897931 * ( ( (double) this.ct上移動用.n現在の値 ) / 100.0 ) ) + 1.0 ) );
\r
195 else if( this.ct下移動用.b進行中 )
\r
197 y -= (int) ( 19.5 * ( Math.Cos( 3.1415926535897931 * ( ( (double) this.ct下移動用.n現在の値 ) / 100.0 ) ) + 1.0 ) );
\r
199 if( this.ctカーソルフラッシュ用.n現在の値 <= 100 )
\r
201 float num3 = (float) ( 1.0 + ( ( ( (double) this.ctカーソルフラッシュ用.n現在の値 ) / 100.0 ) * 0.5 ) );
\r
202 this.txメニュー.vc拡大縮小倍率.X = num3;
\r
203 this.txメニュー.vc拡大縮小倍率.Y = num3;
\r
204 this.txメニュー.n透明度 = (int) ( 255.0 * ( 1.0 - ( ( (double) this.ctカーソルフラッシュ用.n現在の値 ) / 100.0 ) ) );
\r
205 int num4 = x + ( (int) ( ( 227.0 * ( 1.0 - num3 ) ) / 2.0 ) );
\r
206 int num5 = y + ( (int) ( ( 39.0 * ( 1.0 - num3 ) ) / 2.0 ) );
\r
207 this.txメニュー.t2D描画( CDTXMania.app.Device, num4, num5, new Rectangle( 0, 0xc3, 0xe3, 0x27 ) );
\r
209 this.txメニュー.vc拡大縮小倍率.X = 1f;
\r
210 this.txメニュー.vc拡大縮小倍率.Y = 1f;
\r
211 this.txメニュー.n透明度 = 0xff;
\r
212 this.txメニュー.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 0x9c, 0xe3, 0x27 ) );
\r
214 if( this.txメニュー != null )
\r
216 this.txメニュー.t2D描画( CDTXMania.app.Device, 0xce, 0xcb, new Rectangle( 0, 0, 0xe3, 0x9c ) );
\r
218 CStage.Eフェーズ eフェーズid = base.eフェーズID;
\r
221 case CStage.Eフェーズ.共通_フェードイン:
\r
222 if( this.actFI.On進行描画() != 0 )
\r
224 CDTXMania.Skin.soundタイトル音.t再生する();
\r
225 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
229 case CStage.Eフェーズ.共通_フェードアウト:
\r
230 if( this.actFO.On進行描画() == 0 )
\r
234 base.eフェーズID = CStage.Eフェーズ.共通_終了状態;
\r
235 return ( this.n現在のカーソル行 + 1 );
\r
237 case CStage.Eフェーズ.タイトル_起動画面からのフェードイン:
\r
238 if( this.actFIfromSetup.On進行描画() != 0 )
\r
240 CDTXMania.Skin.soundタイトル音.t再生する();
\r
241 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
260 #region [ private ]
\r
261 //-----------------
\r
262 [StructLayout( LayoutKind.Sequential )]
\r
263 private struct STキー反復用カウンタ
\r
265 public CCounter Up;
\r
266 public CCounter Down;
\r
269 public CCounter this[ int index ]
\r
287 throw new IndexOutOfRangeException();
\r
309 throw new IndexOutOfRangeException();
\r
314 private CActFIFOWhite actFI;
\r
315 private CActFIFOWhite actFIfromSetup;
\r
316 private CActFIFOWhite actFO;
\r
317 private CCounter ctカーソルフラッシュ用;
\r
318 private STキー反復用カウンタ ctキー反復用;
\r
319 private CCounter ct下移動用;
\r
320 private CCounter ct上移動用;
\r
321 private const int MENU_H = 0x27;
\r
322 private const int MENU_W = 0xe3;
\r
323 private const int MENU_X = 0xce;
\r
324 private const int MENU_Y = 0xcb;
\r
325 private int n現在のカーソル行;
\r
326 private CTexture txメニュー;
\r
327 private CTexture tx背景;
\r
329 private void tカーソルを下へ移動する()
\r
331 if( this.n現在のカーソル行 != 3 )
\r
333 CDTXMania.Skin.soundカーソル移動音.t再生する();
\r
335 this.ct下移動用.t開始( 0, 100, 1, CDTXMania.Timer );
\r
336 if( this.ct上移動用.b進行中 )
\r
338 this.ct下移動用.n現在の値 = 100 - this.ct上移動用.n現在の値;
\r
343 private void tカーソルを上へ移動する()
\r
345 if( this.n現在のカーソル行 != 0 )
\r
347 CDTXMania.Skin.soundカーソル移動音.t再生する();
\r
349 this.ct上移動用.t開始( 0, 100, 1, CDTXMania.Timer );
\r
350 if( this.ct下移動用.b進行中 )
\r
352 this.ct上移動用.n現在の値 = 100 - this.ct下移動用.n現在の値;
\r
357 //-----------------
\r