2 using System.Collections.Generic;
\r
3 using System.Globalization;
\r
5 using System.Windows.Forms;
\r
6 using System.Drawing;
\r
7 using System.Diagnostics;
\r
8 using System.Runtime.InteropServices;
\r
10 using System.Threading;
\r
11 using System.Runtime.Serialization.Formatters.Binary;
\r
13 using SlimDX.Direct3D9;
\r
15 using SampleFramework;
\r
19 internal class CDTXMania : Game
\r
22 #region [ properties ]
\r
23 public static readonly string VERSION = "101(150101)";
\r
24 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";
\r
25 public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010
\r
26 //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010
\r
27 //public static readonly string D3DXDLL = "d3dx9_41.dll"; // March 2009
\r
29 public static CDTXMania app
\r
34 public static C文字コンソール act文字コンソール
\r
39 public static bool bコンパクトモード
\r
44 public static CConfigIni ConfigIni
\r
49 public static CDTX DTX
\r
57 if( ( dtx != null ) && ( app != null ) )
\r
60 app.listトップレベルActivities.Remove( dtx );
\r
63 if( ( dtx != null ) && ( app != null ) )
\r
65 app.listトップレベルActivities.Add( dtx );
\r
69 public static CFPS FPS
\r
74 public static CInput管理 Input管理
\r
80 public static int nPerfect範囲ms
\r
84 if( stage選曲.r確定された曲 != null )
\r
86 C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;
\r
87 if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPerfect範囲ms >= 0 ) )
\r
89 return c曲リストノード.nPerfect範囲ms;
\r
92 return ConfigIni.nヒット範囲ms.Perfect;
\r
95 public static int nGreat範囲ms
\r
99 if( stage選曲.r確定された曲 != null )
\r
101 C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;
\r
102 if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGreat範囲ms >= 0 ) )
\r
104 return c曲リストノード.nGreat範囲ms;
\r
107 return ConfigIni.nヒット範囲ms.Great;
\r
110 public static int nGood範囲ms
\r
114 if( stage選曲.r確定された曲 != null )
\r
116 C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;
\r
117 if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGood範囲ms >= 0 ) )
\r
119 return c曲リストノード.nGood範囲ms;
\r
122 return ConfigIni.nヒット範囲ms.Good;
\r
125 public static int nPoor範囲ms
\r
129 if( stage選曲.r確定された曲 != null )
\r
131 C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;
\r
132 if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPoor範囲ms >= 0 ) )
\r
134 return c曲リストノード.nPoor範囲ms;
\r
137 return ConfigIni.nヒット範囲ms.Poor;
\r
141 public static CPad Pad
\r
146 public static Random Random
\r
151 public static CSkin Skin
\r
156 public static CSongs管理 Songs管理
\r
159 set; // 2012.1.26 yyagi private解除 CStage起動でのdesirialize読み込みのため
\r
161 public static CEnumSongs EnumSongs
\r
166 public static CActEnumSongs actEnumSongs
\r
171 public static CActFlushGPU actFlushGPU
\r
177 public static CSound管理 Sound管理
\r
182 public static CStage起動 stage起動
\r
187 public static CStageタイトル stageタイトル
\r
192 // public static CStageオプション stageオプション
\r
197 public static CStageコンフィグ stageコンフィグ
\r
202 public static CStage選曲 stage選曲
\r
207 public static CStage曲読み込み stage曲読み込み
\r
212 public static CStage演奏ギター画面 stage演奏ギター画面
\r
217 public static CStage演奏ドラム画面 stage演奏ドラム画面
\r
222 public static CStage結果 stage結果
\r
227 public static CStageChangeSkin stageChangeSkin
\r
232 public static CStage終了 stage終了
\r
237 public static CStage r現在のステージ = null;
\r
238 public static CStage r直前のステージ = null;
\r
239 public static string strEXEのあるフォルダ
\r
244 public static string strコンパクトモードファイル
\r
249 public static CTimer Timer
\r
254 public static Format TextureFormat = Format.A8R8G8B8;
\r
255 internal static IPluginActivity act現在入力を占有中のプラグイン = null;
\r
256 public bool bApplicationActive
\r
261 public bool b次のタイミングで垂直帰線同期切り替えを行う
\r
266 public bool b次のタイミングで全画面_ウィンドウ切り替えを行う
\r
271 public Device Device
\r
273 get { return base.GraphicsDeviceManager.Direct3D9.Device; }
\r
275 public CPluginHost PluginHost
\r
280 public List<STPlugin> listプラグイン = new List<STPlugin>();
\r
281 public struct STPlugin
\r
283 public IPluginActivity plugin;
\r
284 public string strプラグインフォルダ;
\r
285 public string strアセンブリ簡易名;
\r
286 public Version Version;
\r
288 private static Size currentClientSize // #23510 2010.10.27 add yyagi to keep current window size
\r
293 // public static CTimer ct;
\r
294 public IntPtr WindowHandle // 2012.10.24 yyagi; to add ASIO support
\r
296 get { return base.Window.Handle; }
\r
298 public static CDTXVmode DTXVmode // #28821 2014.1.23 yyagi
\r
309 CDTXMania.app = this;
\r
316 public void t全画面_ウィンドウモード切り替え()
\r
318 #if WindowedFullscreen
\r
319 if ( ConfigIni != null )
\r
321 DeviceSettings settings = base.GraphicsDeviceManager.CurrentSettings.Clone();
\r
322 if ( ( ConfigIni != null ) && ( ConfigIni.bウィンドウモード != settings.Windowed ) )
\r
325 #if !WindowedFullscreen
\r
326 settings.Windowed = ConfigIni.bウィンドウモード;
\r
328 if ( ConfigIni.bウィンドウモード == false ) // #23510 2010.10.27 yyagi: backup current window size before going fullscreen mode
\r
330 currentClientSize = this.Window.ClientSize;
\r
331 ConfigIni.nウインドウwidth = this.Window.ClientSize.Width;
\r
332 ConfigIni.nウインドウheight = this.Window.ClientSize.Height;
\r
333 // FDK.CTaskBar.ShowTaskBar( false );
\r
335 #if !WindowedFullscreen
\r
336 base.GraphicsDeviceManager.ChangeDevice( settings );
\r
338 if ( ConfigIni.bウィンドウモード == true ) // #23510 2010.10.27 yyagi: to resume window size from backuped value
\r
340 #if WindowedFullscreen
\r
341 // #30666 2013.2.2 yyagi Don't use Fullscreen mode becasue NVIDIA GeForce is
\r
342 // tend to delay drawing on Fullscreen mode. So DTXMania uses Maximized window
\r
343 // in spite of using fullscreen mode.
\r
344 app.Window.WindowState = FormWindowState.Normal;
\r
345 app.Window.FormBorderStyle = FormBorderStyle.Sizable;
\r
346 app.Window.WindowState = FormWindowState.Normal;
\r
348 base.Window.ClientSize =
\r
349 new Size( currentClientSize.Width, currentClientSize.Height );
\r
350 // FDK.CTaskBar.ShowTaskBar( true );
\r
352 #if WindowedFullscreen
\r
355 app.Window.WindowState = FormWindowState.Normal;
\r
356 app.Window.FormBorderStyle = FormBorderStyle.None;
\r
357 app.Window.WindowState = FormWindowState.Maximized;
\r
359 if ( ConfigIni.bウィンドウモード )
\r
361 if ( !this.bマウスカーソル表示中 )
\r
364 this.bマウスカーソル表示中 = true;
\r
367 else if ( this.bマウスカーソル表示中 )
\r
370 this.bマウスカーソル表示中 = false;
\r
376 #region [ #24609 リザルト画像をpngで保存する ] // #24609 2011.3.14 yyagi; to save result screen in case BestRank or HiSkill.
\r
378 /// リザルト画像のキャプチャと保存。
\r
380 /// <param name="strFilename">保存するファイル名(フルパス)</param>
\r
381 public bool SaveResultScreen( string strFullPath )
\r
383 string strSavePath = Path.GetDirectoryName( strFullPath );
\r
384 if ( !Directory.Exists( strSavePath ) )
\r
388 Directory.CreateDirectory( strSavePath );
\r
396 // http://www.gamedev.net/topic/594369-dx9slimdxati-incorrect-saving-surface-to-file/
\r
397 using ( Surface pSurface = CDTXMania.app.Device.GetRenderTarget( 0 ) )
\r
399 Surface.ToFile( pSurface, strFullPath, ImageFileFormat.Png );
\r
407 protected override void Initialize()
\r
411 //swlist1 = new List<int>( 8192 );
\r
412 //swlist2 = new List<int>( 8192 );
\r
413 //swlist3 = new List<int>( 8192 );
\r
414 //swlist4 = new List<int>( 8192 );
\r
415 //swlist5 = new List<int>( 8192 );
\r
416 if ( this.listトップレベルActivities != null )
\r
418 foreach( CActivity activity in this.listトップレベルActivities )
\r
419 activity.OnManagedリソースの作成();
\r
422 foreach( STPlugin st in this.listプラグイン )
\r
424 Directory.SetCurrentDirectory( st.strプラグインフォルダ );
\r
425 st.plugin.OnManagedリソースの作成();
\r
426 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
428 #if GPUFlushAfterPresent
\r
429 FrameEnd += dtxmania_FrameEnd;
\r
432 #if GPUFlushAfterPresent
\r
433 void dtxmania_FrameEnd( object sender, EventArgs e ) // GraphicsDeviceManager.game_FrameEnd()後に実行される
\r
434 { // → Present()直後にGPUをFlushする
\r
435 // → 画面のカクツキが頻発したため、ここでのFlushは行わない
\r
436 actFlushGPU.On進行描画(); // Flush GPU
\r
439 protected override void LoadContent()
\r
441 if ( ConfigIni.bウィンドウモード )
\r
443 if( !this.bマウスカーソル表示中 )
\r
446 this.bマウスカーソル表示中 = true;
\r
449 else if( this.bマウスカーソル表示中 )
\r
452 this.bマウスカーソル表示中 = false;
\r
454 this.Device.SetTransform(TransformState.View, Matrix.LookAtLH(new Vector3(0f, 0f, (float)(-SampleFramework.GameWindowSize.Height / 2 * Math.Sqrt(3.0))), new Vector3(0f, 0f, 0f), new Vector3(0f, 1f, 0f)));
\r
455 this.Device.SetTransform(TransformState.Projection, Matrix.PerspectiveFovLH(C変換.DegreeToRadian((float)60f), ((float)this.Device.Viewport.Width) / ((float)this.Device.Viewport.Height), -100f, 100f));
\r
456 this.Device.SetRenderState(RenderState.Lighting, false);
\r
457 this.Device.SetRenderState( RenderState.ZEnable, false );
\r
458 this.Device.SetRenderState( RenderState.AntialiasedLineEnable, false );
\r
459 this.Device.SetRenderState( RenderState.AlphaTestEnable, true );
\r
460 this.Device.SetRenderState( RenderState.AlphaRef, 10 );
\r
462 this.Device.SetRenderState( RenderState.MultisampleAntialias, true );
\r
463 this.Device.SetSamplerState( 0, SamplerState.MinFilter, TextureFilter.Linear );
\r
464 this.Device.SetSamplerState( 0, SamplerState.MagFilter, TextureFilter.Linear );
\r
466 this.Device.SetRenderState<Compare>( RenderState.AlphaFunc, Compare.Greater );
\r
467 this.Device.SetRenderState( RenderState.AlphaBlendEnable, true );
\r
468 this.Device.SetRenderState<Blend>( RenderState.SourceBlend, Blend.SourceAlpha );
\r
469 this.Device.SetRenderState<Blend>( RenderState.DestinationBlend, Blend.InverseSourceAlpha );
\r
470 this.Device.SetTextureStageState( 0, TextureStage.AlphaOperation, TextureOperation.Modulate );
\r
471 this.Device.SetTextureStageState( 0, TextureStage.AlphaArg1, 2 );
\r
472 this.Device.SetTextureStageState( 0, TextureStage.AlphaArg2, 1 );
\r
474 if( this.listトップレベルActivities != null )
\r
476 foreach( CActivity activity in this.listトップレベルActivities )
\r
477 activity.OnUnmanagedリソースの作成();
\r
480 foreach( STPlugin st in this.listプラグイン )
\r
482 Directory.SetCurrentDirectory( st.strプラグインフォルダ );
\r
483 st.plugin.OnUnmanagedリソースの作成();
\r
484 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
487 protected override void UnloadContent()
\r
489 if( this.listトップレベルActivities != null )
\r
491 foreach( CActivity activity in this.listトップレベルActivities )
\r
492 activity.OnUnmanagedリソースの解放();
\r
495 foreach( STPlugin st in this.listプラグイン )
\r
497 Directory.SetCurrentDirectory( st.strプラグインフォルダ );
\r
498 st.plugin.OnUnmanagedリソースの解放();
\r
499 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
502 protected override void OnExiting( EventArgs e )
\r
504 CPowerManagement.tEnableMonitorSuspend(); // スリープ抑止状態を解除
\r
506 base.OnExiting( e );
\r
508 protected override void Update( GameTime gameTime )
\r
511 protected override void Draw( GameTime gameTime )
\r
513 Sound管理.t再生中の処理をする();
\r
515 if( Timer != null )
\r
517 if (CSound管理.rc演奏用タイマ != null)
\r
518 CSound管理.rc演奏用タイマ.t更新();
\r
520 if( Input管理 != null )
\r
521 Input管理.tポーリング( this.bApplicationActive, CDTXMania.ConfigIni.bバッファ入力を行う );
\r
526 //if( Pad != null ) ポーリング時にクリアしたらダメ!曲の開始時に1回だけクリアする。(2010.9.11)
\r
527 // Pad.st検知したデバイス.Clear();
\r
529 if( this.Device == null )
\r
532 if ( this.bApplicationActive ) // DTXMania本体起動中の本体/モニタの省電力モード移行を抑止
\r
533 CPowerManagement.tDisableMonitorSuspend();
\r
535 // #xxxxx 2013.4.8 yyagi; sleepの挿入位置を、EndScnene~Present間から、BeginScene前に移動。描画遅延を小さくするため。
\r
537 if ( ConfigIni.nフレーム毎スリープms >= 0 ) // #xxxxx 2011.11.27 yyagi
\r
539 Thread.Sleep( ConfigIni.nフレーム毎スリープms );
\r
543 #region [ DTXCreatorからの指示 ]
\r
544 if ( this.Window.IsReceivedMessage ) // ウインドウメッセージで、
\r
546 string strMes = this.Window.strMessage;
\r
547 this.Window.IsReceivedMessage = false;
\r
549 if ( strMes != null )
\r
551 DTXVmode.ParseArguments( strMes );
\r
553 if ( DTXVmode.Enabled )
\r
556 strコンパクトモードファイル = DTXVmode.filename;
\r
557 if ( DTXVmode.Command == CDTXVmode.ECommand.Preview )
\r
559 // preview soundの再生
\r
560 string strPreviewFilename = DTXVmode.previewFilename;
\r
561 //Trace.TraceInformation( "Preview Filename=" + DTXVmode.previewFilename );
\r
564 if ( this.previewSound != null )
\r
566 this.previewSound.tサウンドを停止する();
\r
567 this.previewSound.Dispose();
\r
568 this.previewSound = null;
\r
570 this.previewSound = CDTXMania.Sound管理.tサウンドを生成する( strPreviewFilename );
\r
571 this.previewSound.n音量 = DTXVmode.previewVolume;
\r
572 this.previewSound.n位置 = DTXVmode.previewPan;
\r
573 this.previewSound.t再生を開始する();
\r
574 Trace.TraceInformation( "DTXCからの指示で、サウンドを生成しました。({0})", strPreviewFilename );
\r
578 Trace.TraceError( "DTXCからの指示での、サウンドの生成に失敗しました。({0})", strPreviewFilename );
\r
579 if ( this.previewSound != null )
\r
581 this.previewSound.Dispose();
\r
583 this.previewSound = null;
\r
591 this.Device.BeginScene();
\r
592 this.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 1f, 0 );
\r
594 if( r現在のステージ != null )
\r
596 this.n進行描画の戻り値 = ( r現在のステージ != null ) ? r現在のステージ.On進行描画() : 0;
\r
598 #region [ プラグインの進行描画 ]
\r
599 //---------------------
\r
600 foreach( STPlugin sp in this.listプラグイン )
\r
602 Directory.SetCurrentDirectory( sp.strプラグインフォルダ );
\r
604 if( CDTXMania.act現在入力を占有中のプラグイン == null || CDTXMania.act現在入力を占有中のプラグイン == sp.plugin )
\r
605 sp.plugin.On進行描画( CDTXMania.Pad, CDTXMania.Input管理.Keyboard );
\r
607 sp.plugin.On進行描画( null, null );
\r
609 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
611 //---------------------
\r
615 CScoreIni scoreIni = null;
\r
617 if ( Control.IsKeyLocked( Keys.CapsLock ) ) // #30925 2013.3.11 yyagi; capslock=ON時は、EnumSongsしないようにして、起動負荷とASIOの音切れの関係を確認する
\r
618 { // → songs.db等の書き込み時だと音切れするっぽい
\r
619 actEnumSongs.On非活性化();
\r
620 EnumSongs.SongListEnumCompletelyDone();
\r
621 CDTXMania.stage選曲.bIsEnumeratingSongs = false;
\r
623 #region [ 曲検索スレッドの起動/終了 ] // ここに"Enumerating Songs..."表示を集約
\r
624 if ( !CDTXMania.bコンパクトモード )
\r
626 actEnumSongs.On進行描画(); // "Enumerating Songs..."アイコンの描画
\r
628 switch ( r現在のステージ.eステージID )
\r
630 case CStage.Eステージ.タイトル:
\r
631 case CStage.Eステージ.コンフィグ:
\r
632 case CStage.Eステージ.選曲:
\r
633 case CStage.Eステージ.曲読み込み:
\r
634 if ( EnumSongs != null )
\r
636 #region [ (特定条件時) 曲検索スレッドの起動・開始 ]
\r
637 if ( r現在のステージ.eステージID == CStage.Eステージ.タイトル &&
\r
638 r直前のステージ.eステージID == CStage.Eステージ.起動 &&
\r
639 this.n進行描画の戻り値 == (int) CStageタイトル.E戻り値.継続 &&
\r
640 !EnumSongs.IsSongListEnumStarted )
\r
642 actEnumSongs.On活性化();
\r
643 CDTXMania.stage選曲.bIsEnumeratingSongs = true;
\r
644 EnumSongs.Init( CDTXMania.Songs管理.listSongsDB, CDTXMania.Songs管理.nSongsDBから取得できたスコア数 ); // songs.db情報と、取得した曲数を、新インスタンスにも与える
\r
645 EnumSongs.StartEnumFromDisk(); // 曲検索スレッドの起動・開始
\r
646 if ( CDTXMania.Songs管理.nSongsDBから取得できたスコア数 == 0 ) // もし初回起動なら、検索スレッドのプライオリティをLowestでなくNormalにする
\r
648 EnumSongs.ChangeEnumeratePriority( ThreadPriority.Normal );
\r
653 #region [ 曲検索の中断と再開 ]
\r
654 if ( r現在のステージ.eステージID == CStage.Eステージ.選曲 && !EnumSongs.IsSongListEnumCompletelyDone )
\r
656 switch ( this.n進行描画の戻り値 )
\r
659 //if ( CDTXMania.stage選曲.bIsEnumeratingSongs )
\r
660 if ( !CDTXMania.stage選曲.bIsPlayingPremovie )
\r
662 EnumSongs.Resume(); // #27060 2012.2.6 yyagi 中止していたバックグランド曲検索を再開
\r
663 EnumSongs.IsSlowdown = false;
\r
667 // EnumSongs.Suspend(); // #27060 2012.3.2 yyagi #PREMOVIE再生中は曲検索を低速化
\r
668 EnumSongs.IsSlowdown = true;
\r
670 actEnumSongs.On活性化();
\r
674 EnumSongs.Suspend(); // #27060 バックグラウンドの曲検索を一時停止
\r
675 actEnumSongs.On非活性化();
\r
681 #region [ 曲探索中断待ち待機 ]
\r
682 if ( r現在のステージ.eステージID == CStage.Eステージ.曲読み込み && !EnumSongs.IsSongListEnumCompletelyDone &&
\r
683 EnumSongs.thDTXFileEnumerate != null ) // #28700 2012.6.12 yyagi; at Compact mode, enumerating thread does not exist.
\r
685 EnumSongs.WaitUntilSuspended(); // 念のため、曲検索が一時中断されるまで待機
\r
689 #region [ 曲検索が完了したら、実際の曲リストに反映する ]
\r
690 // CStage選曲.On活性化() に回した方がいいかな?
\r
691 if ( EnumSongs.IsSongListEnumerated )
\r
693 actEnumSongs.On非活性化();
\r
694 CDTXMania.stage選曲.bIsEnumeratingSongs = false;
\r
696 bool bRemakeSongTitleBar = ( r現在のステージ.eステージID == CStage.Eステージ.選曲 ) ? true : false;
\r
697 CDTXMania.stage選曲.Refresh( EnumSongs.Songs管理, bRemakeSongTitleBar );
\r
698 EnumSongs.SongListEnumCompletelyDone();
\r
706 switch ( r現在のステージ.eステージID )
\r
708 case CStage.Eステージ.何もしない:
\r
711 case CStage.Eステージ.起動:
\r
713 //-----------------------------
\r
714 if( this.n進行描画の戻り値 != 0 )
\r
719 Trace.TraceInformation( "----------------------" );
\r
720 Trace.TraceInformation( "■ タイトル" );
\r
722 r直前のステージ = r現在のステージ;
\r
723 r現在のステージ = stageタイトル;
\r
728 Trace.TraceInformation( "----------------------" );
\r
729 Trace.TraceInformation( "■ 曲読み込み" );
\r
730 stage曲読み込み.On活性化();
\r
731 r直前のステージ = r現在のステージ;
\r
732 r現在のステージ = stage曲読み込み;
\r
735 foreach( STPlugin pg in this.listプラグイン )
\r
737 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
738 pg.plugin.Onステージ変更();
\r
739 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
742 this.tガベージコレクションを実行する();
\r
744 //-----------------------------
\r
748 case CStage.Eステージ.タイトル:
\r
750 //-----------------------------
\r
751 switch( this.n進行描画の戻り値 )
\r
753 case (int)CStageタイトル.E戻り値.GAMESTART:
\r
755 //-----------------------------
\r
757 Trace.TraceInformation( "----------------------" );
\r
758 Trace.TraceInformation( "■ 選曲" );
\r
760 r直前のステージ = r現在のステージ;
\r
761 r現在のステージ = stage選曲;
\r
762 //-----------------------------
\r
766 #region [ OPTION: 廃止済 ]
\r
767 // case 2: // #24525 OPTIONとCONFIGの統合に伴い、OPTIONは廃止
\r
769 // //-----------------------------
\r
770 // r現在のステージ.On非活性化();
\r
771 // Trace.TraceInformation( "----------------------" );
\r
772 // Trace.TraceInformation( "■ オプション" );
\r
773 // stageオプション.On活性化();
\r
774 // r直前のステージ = r現在のステージ;
\r
775 // r現在のステージ = stageオプション;
\r
776 // //-----------------------------
\r
781 case (int)CStageタイトル.E戻り値.CONFIG:
\r
783 //-----------------------------
\r
785 Trace.TraceInformation( "----------------------" );
\r
786 Trace.TraceInformation( "■ コンフィグ" );
\r
787 stageコンフィグ.On活性化();
\r
788 r直前のステージ = r現在のステージ;
\r
789 r現在のステージ = stageコンフィグ;
\r
790 //-----------------------------
\r
794 case (int)CStageタイトル.E戻り値.EXIT:
\r
796 //-----------------------------
\r
798 Trace.TraceInformation( "----------------------" );
\r
799 Trace.TraceInformation( "■ 終了" );
\r
801 r直前のステージ = r現在のステージ;
\r
802 r現在のステージ = stage終了;
\r
803 //-----------------------------
\r
808 foreach( STPlugin pg in this.listプラグイン )
\r
810 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
811 pg.plugin.Onステージ変更();
\r
812 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
815 //this.tガベージコレクションを実行する(); // #31980 2013.9.3 yyagi タイトル画面でだけ、毎フレームGCを実行して重くなっていた問題の修正
\r
816 //-----------------------------
\r
820 // case CStage.Eステージ.オプション:
\r
822 // //-----------------------------
\r
823 // if( this.n進行描画の戻り値 != 0 )
\r
825 // switch( r直前のステージ.eステージID )
\r
827 // case CStage.Eステージ.タイトル:
\r
829 // //-----------------------------
\r
830 // r現在のステージ.On非活性化();
\r
831 // Trace.TraceInformation( "----------------------" );
\r
832 // Trace.TraceInformation( "■ タイトル" );
\r
833 // stageタイトル.On活性化();
\r
834 // r直前のステージ = r現在のステージ;
\r
835 // r現在のステージ = stageタイトル;
\r
837 // foreach( STPlugin pg in this.listプラグイン )
\r
839 // Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
840 // pg.plugin.Onステージ変更();
\r
841 // Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
844 // this.tガベージコレクションを実行する();
\r
846 // //-----------------------------
\r
849 // case CStage.Eステージ.選曲:
\r
851 // //-----------------------------
\r
852 // r現在のステージ.On非活性化();
\r
853 // Trace.TraceInformation( "----------------------" );
\r
854 // Trace.TraceInformation( "■ 選曲" );
\r
855 // stage選曲.On活性化();
\r
856 // r直前のステージ = r現在のステージ;
\r
857 // r現在のステージ = stage選曲;
\r
859 // foreach( STPlugin pg in this.listプラグイン )
\r
861 // Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
862 // pg.plugin.Onステージ変更();
\r
863 // Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
866 // this.tガベージコレクションを実行する();
\r
868 // //-----------------------------
\r
872 // //-----------------------------
\r
876 case CStage.Eステージ.コンフィグ:
\r
878 //-----------------------------
\r
879 if( this.n進行描画の戻り値 != 0 )
\r
881 switch( r直前のステージ.eステージID )
\r
883 case CStage.Eステージ.タイトル:
\r
885 //-----------------------------
\r
887 Trace.TraceInformation( "----------------------" );
\r
888 Trace.TraceInformation( "■ タイトル" );
\r
890 r直前のステージ = r現在のステージ;
\r
891 r現在のステージ = stageタイトル;
\r
893 foreach( STPlugin pg in this.listプラグイン )
\r
895 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
896 pg.plugin.Onステージ変更();
\r
897 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
900 this.tガベージコレクションを実行する();
\r
902 //-----------------------------
\r
905 case CStage.Eステージ.選曲:
\r
907 //-----------------------------
\r
909 Trace.TraceInformation( "----------------------" );
\r
910 Trace.TraceInformation( "■ 選曲" );
\r
912 r直前のステージ = r現在のステージ;
\r
913 r現在のステージ = stage選曲;
\r
915 foreach( STPlugin pg in this.listプラグイン )
\r
917 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
918 pg.plugin.Onステージ変更();
\r
919 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
922 this.tガベージコレクションを実行する();
\r
924 //-----------------------------
\r
928 //-----------------------------
\r
932 case CStage.Eステージ.選曲:
\r
934 //-----------------------------
\r
935 switch( this.n進行描画の戻り値 )
\r
937 case (int) CStage選曲.E戻り値.タイトルに戻る:
\r
939 //-----------------------------
\r
941 Trace.TraceInformation( "----------------------" );
\r
942 Trace.TraceInformation( "■ タイトル" );
\r
944 r直前のステージ = r現在のステージ;
\r
945 r現在のステージ = stageタイトル;
\r
947 foreach( STPlugin pg in this.listプラグイン )
\r
949 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
950 pg.plugin.Onステージ変更();
\r
951 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
954 this.tガベージコレクションを実行する();
\r
956 //-----------------------------
\r
959 case (int) CStage選曲.E戻り値.選曲した:
\r
961 //-----------------------------
\r
963 Trace.TraceInformation( "----------------------" );
\r
964 Trace.TraceInformation( "■ 曲読み込み" );
\r
965 stage曲読み込み.On活性化();
\r
966 r直前のステージ = r現在のステージ;
\r
967 r現在のステージ = stage曲読み込み;
\r
969 foreach( STPlugin pg in this.listプラグイン )
\r
971 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
972 pg.plugin.Onステージ変更();
\r
973 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
976 this.tガベージコレクションを実行する();
\r
978 //-----------------------------
\r
981 // case (int) CStage選曲.E戻り値.オプション呼び出し:
\r
983 // //-----------------------------
\r
984 // r現在のステージ.On非活性化();
\r
985 // Trace.TraceInformation( "----------------------" );
\r
986 // Trace.TraceInformation( "■ オプション" );
\r
987 // stageオプション.On活性化();
\r
988 // r直前のステージ = r現在のステージ;
\r
989 // r現在のステージ = stageオプション;
\r
991 // foreach( STPlugin pg in this.listプラグイン )
\r
993 // Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
994 // pg.plugin.Onステージ変更();
\r
995 // Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
998 // this.tガベージコレクションを実行する();
\r
1000 // //-----------------------------
\r
1003 case (int) CStage選曲.E戻り値.コンフィグ呼び出し:
\r
1005 //-----------------------------
\r
1006 r現在のステージ.On非活性化();
\r
1007 Trace.TraceInformation( "----------------------" );
\r
1008 Trace.TraceInformation( "■ コンフィグ" );
\r
1009 stageコンフィグ.On活性化();
\r
1010 r直前のステージ = r現在のステージ;
\r
1011 r現在のステージ = stageコンフィグ;
\r
1013 foreach( STPlugin pg in this.listプラグイン )
\r
1015 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1016 pg.plugin.Onステージ変更();
\r
1017 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1020 this.tガベージコレクションを実行する();
\r
1022 //-----------------------------
\r
1025 case (int) CStage選曲.E戻り値.スキン変更:
\r
1028 //-----------------------------
\r
1029 r現在のステージ.On非活性化();
\r
1030 Trace.TraceInformation( "----------------------" );
\r
1031 Trace.TraceInformation( "■ スキン切り替え" );
\r
1032 stageChangeSkin.On活性化();
\r
1033 r直前のステージ = r現在のステージ;
\r
1034 r現在のステージ = stageChangeSkin;
\r
1036 //-----------------------------
\r
1039 //-----------------------------
\r
1043 case CStage.Eステージ.曲読み込み:
\r
1045 //-----------------------------
\r
1046 DTXVmode.Refreshed = false; // 曲のリロード中に発生した再リロードは、無視する。
\r
1047 if( this.n進行描画の戻り値 != 0 )
\r
1049 CDTXMania.Pad.st検知したデバイス.Clear(); // 入力デバイスフラグクリア(2010.9.11)
\r
1050 r現在のステージ.On非活性化();
\r
1051 #region [ ESC押下時は、曲の読み込みを中止して選曲画面に戻る ]
\r
1052 if ( this.n進行描画の戻り値 == (int) E曲読込画面の戻り値.読込中止 )
\r
1054 //DTX.t全チップの再生停止();
\r
1056 Trace.TraceInformation( "曲の読み込みを中止しました。" );
\r
1057 this.tガベージコレクションを実行する();
\r
1058 Trace.TraceInformation( "----------------------" );
\r
1059 Trace.TraceInformation( "■ 選曲" );
\r
1061 r直前のステージ = r現在のステージ;
\r
1062 r現在のステージ = stage選曲;
\r
1063 foreach ( STPlugin pg in this.listプラグイン )
\r
1065 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1066 pg.plugin.Onステージ変更();
\r
1067 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1073 if( !ConfigIni.bギタレボモード )
\r
1075 Trace.TraceInformation( "----------------------" );
\r
1076 Trace.TraceInformation( "■ 演奏(ドラム画面)" );
\r
1077 #if false // #23625 2011.1.11 Config.iniからダメージ/回復値の定数変更を行う場合はここを有効にする 087リリースに合わせ機能無効化
\r
1078 for (int i = 0; i < 5; i++)
\r
1080 for (int j = 0; j < 2; j++)
\r
1082 stage演奏ドラム画面.fDamageGaugeDelta[i, j] = ConfigIni.fGaugeFactor[i, j];
\r
1085 for (int i = 0; i < 3; i++) {
\r
1086 stage演奏ドラム画面.fDamageLevelFactor[i] = ConfigIni.fDamageLevelFactor[i];
\r
1089 r直前のステージ = r現在のステージ;
\r
1090 r現在のステージ = stage演奏ドラム画面;
\r
1094 Trace.TraceInformation( "----------------------" );
\r
1095 Trace.TraceInformation( "■ 演奏(ギター画面)" );
\r
1096 #if false // #23625 2011.1.11 Config.iniからダメージ/回復値の定数変更を行う場合はここを有効にする 087リリースに合わせ機能無効化
\r
1097 for (int i = 0; i < 5; i++)
\r
1099 for (int j = 0; j < 2; j++)
\r
1101 stage演奏ギター画面.fDamageGaugeDelta[i, j] = ConfigIni.fGaugeFactor[i, j];
\r
1104 for (int i = 0; i < 3; i++) {
\r
1105 stage演奏ギター画面.fDamageLevelFactor[i] = ConfigIni.fDamageLevelFactor[i];
\r
1108 r直前のステージ = r現在のステージ;
\r
1109 r現在のステージ = stage演奏ギター画面;
\r
1112 foreach( STPlugin pg in this.listプラグイン )
\r
1114 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1115 pg.plugin.Onステージ変更();
\r
1116 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1119 this.tガベージコレクションを実行する();
\r
1121 //-----------------------------
\r
1125 case CStage.Eステージ.演奏:
\r
1127 //-----------------------------
\r
1128 //long n1 = FDK.CSound管理.rc演奏用タイマ.nシステム時刻ms;
\r
1129 //long n2 = FDK.CSound管理.SoundDevice.n経過時間ms;
\r
1130 //long n3 = FDK.CSound管理.SoundDevice.tmシステムタイマ.nシステム時刻ms;
\r
1131 //long n4 = FDK.CSound管理.rc演奏用タイマ.n現在時刻;
\r
1132 //long n5 = FDK.CSound管理.SoundDevice.n経過時間を更新したシステム時刻ms;
\r
1134 //swlist1.Add( Convert.ToInt32(n1) );
\r
1135 //swlist2.Add( Convert.ToInt32(n2) );
\r
1136 //swlist3.Add( Convert.ToInt32( n3 ) );
\r
1137 //swlist4.Add( Convert.ToInt32( n4 ) );
\r
1138 //swlist5.Add( Convert.ToInt32( n5 ) );
\r
1140 #region [ DTXVモード中にDTXCreatorから指示を受けた場合の処理 ]
\r
1141 if ( DTXVmode.Enabled && DTXVmode.Refreshed )
\r
1143 DTXVmode.Refreshed = false;
\r
1145 if ( DTXVmode.Command == CDTXVmode.ECommand.Stop )
\r
1147 if ( !ConfigIni.bギタレボモード )
\r
1149 CDTXMania.stage演奏ドラム画面.t停止();
\r
1153 CDTXMania.stage演奏ギター画面.t停止();
\r
1155 if ( previewSound != null )
\r
1157 this.previewSound.tサウンドを停止する();
\r
1158 this.previewSound.Dispose();
\r
1159 this.previewSound = null;
\r
1164 // for ( int i = 0; i < swlist1.Count; i++ )
\r
1166 // int d1 = swlist1[ i ];
\r
1167 // int d2 = swlist2[ i ];
\r
1168 // int d3 = swlist3[ i ];
\r
1169 // int d4 = swlist4[ i ];
\r
1170 // int d5 = swlist5[ i ];
\r
1172 // int dif = d1 - lastd;
\r
1174 // if ( 16 <= dif && dif <= 17 )
\r
1181 // Trace.TraceInformation( "frame {0:D4}: {1:D3} ( {2:D3}, {3:D3} - {7:D3}, {4:D3} ) {5}, n現在時刻={6}", f, dif, d1, d2, d3, s, d4, d5 );
\r
1185 // swlist1.Clear();
\r
1186 // swlist2.Clear();
\r
1187 // swlist3.Clear();
\r
1188 // swlist4.Clear();
\r
1189 // swlist5.Clear();
\r
1193 else if ( DTXVmode.Command == CDTXVmode.ECommand.Play )
\r
1195 if ( DTXVmode.NeedReload )
\r
1197 if ( !ConfigIni.bギタレボモード )
\r
1199 CDTXMania.stage演奏ドラム画面.t再読込();
\r
1203 CDTXMania.stage演奏ギター画面.t再読込();
\r
1206 CDTXMania.ConfigIni.bDrums有効 = !DTXVmode.GRmode;
\r
1207 CDTXMania.ConfigIni.bGuitar有効 = true;
\r
1208 CDTXMania.ConfigIni.bTimeStretch = DTXVmode.TimeStretch;
\r
1209 CSound管理.bIsTimeStretch = DTXVmode.TimeStretch;
\r
1210 if ( CDTXMania.ConfigIni.b垂直帰線待ちを行う != DTXVmode.VSyncWait )
\r
1212 CDTXMania.ConfigIni.b垂直帰線待ちを行う = DTXVmode.VSyncWait;
\r
1213 CDTXMania.app.b次のタイミングで垂直帰線同期切り替えを行う = true;
\r
1218 if ( !ConfigIni.bギタレボモード )
\r
1220 CDTXMania.stage演奏ドラム画面.t演奏位置の変更( CDTXMania.DTXVmode.nStartBar );
\r
1224 CDTXMania.stage演奏ギター画面.t演奏位置の変更( CDTXMania.DTXVmode.nStartBar );
\r
1231 switch( this.n進行描画の戻り値 )
\r
1233 case (int) E演奏画面の戻り値.再読込_再演奏:
\r
1234 #region [ DTXファイルを再読み込みして、再演奏 ]
\r
1237 r現在のステージ.On非活性化();
\r
1238 stage曲読み込み.On活性化();
\r
1239 r直前のステージ = r現在のステージ;
\r
1240 r現在のステージ = stage曲読み込み;
\r
1241 this.tガベージコレクションを実行する();
\r
1245 //case (int) E演奏画面の戻り値.再演奏:
\r
1246 #region [ 再読み込み無しで、再演奏 ]
\r
1250 case (int) E演奏画面の戻り値.継続:
\r
1253 case (int) E演奏画面の戻り値.演奏中断:
\r
1254 #region [ 演奏キャンセル ]
\r
1255 //-----------------------------
\r
1256 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Play canceled" );
\r
1260 //for (int i = 0; i < swlist1.Count; i++)
\r
1262 // int d1 = swlist1[ i ];
\r
1263 // int d2 = swlist2[ i ];
\r
1264 // int d3 = swlist3[ i ];
\r
1265 // int d4 = swlist4[ i ];
\r
1267 // int dif = d1 - lastd;
\r
1269 // if ( 16 <= dif && dif <= 17 )
\r
1276 // Trace.TraceInformation( "frame {0:D4}: {1:D3} ( {2:D3}, {3:D3}, {4:D3} ) {5}, n現在時刻={6}", f, dif, d1, d2, d3, s, d4 );
\r
1280 //swlist1.Clear();
\r
1281 //swlist2.Clear();
\r
1282 //swlist3.Clear();
\r
1283 //swlist4.Clear();
\r
1285 #region [ プラグイン On演奏キャンセル() の呼び出し ]
\r
1286 //---------------------
\r
1287 foreach( STPlugin pg in this.listプラグイン )
\r
1289 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1290 pg.plugin.On演奏キャンセル( scoreIni );
\r
1291 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1293 //---------------------
\r
1298 r現在のステージ.On非活性化();
\r
1301 base.Window.Close();
\r
1305 Trace.TraceInformation( "----------------------" );
\r
1306 Trace.TraceInformation( "■ 選曲" );
\r
1308 r直前のステージ = r現在のステージ;
\r
1309 r現在のステージ = stage選曲;
\r
1311 #region [ プラグイン Onステージ変更() の呼び出し ]
\r
1312 //---------------------
\r
1313 foreach( STPlugin pg in this.listプラグイン )
\r
1315 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1316 pg.plugin.Onステージ変更();
\r
1317 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1319 //---------------------
\r
1322 this.tガベージコレクションを実行する();
\r
1325 //-----------------------------
\r
1328 case (int) E演奏画面の戻り値.ステージ失敗:
\r
1329 #region [ 演奏失敗(StageFailed) ]
\r
1330 //-----------------------------
\r
1331 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Stage failed" );
\r
1333 #region [ プラグイン On演奏失敗() の呼び出し ]
\r
1334 //---------------------
\r
1335 foreach( STPlugin pg in this.listプラグイン )
\r
1337 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1338 pg.plugin.On演奏失敗( scoreIni );
\r
1339 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1341 //---------------------
\r
1346 r現在のステージ.On非活性化();
\r
1349 base.Window.Close();
\r
1353 Trace.TraceInformation( "----------------------" );
\r
1354 Trace.TraceInformation( "■ 選曲" );
\r
1356 r直前のステージ = r現在のステージ;
\r
1357 r現在のステージ = stage選曲;
\r
1359 #region [ プラグイン Onステージ変更() の呼び出し ]
\r
1360 //---------------------
\r
1361 foreach( STPlugin pg in this.listプラグイン )
\r
1363 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1364 pg.plugin.Onステージ変更();
\r
1365 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1367 //---------------------
\r
1370 this.tガベージコレクションを実行する();
\r
1373 //-----------------------------
\r
1376 case (int) E演奏画面の戻り値.ステージクリア:
\r
1378 //-----------------------------
\r
1379 CScoreIni.C演奏記録 c演奏記録_Drums, c演奏記録_Guitar, c演奏記録_Bass;
\r
1380 CDTX.CChip[] chipArray = new CDTX.CChip[ 10 ];
\r
1381 if( ConfigIni.bギタレボモード )
\r
1383 stage演奏ギター画面.t演奏結果を格納する( out c演奏記録_Drums, out c演奏記録_Guitar, out c演奏記録_Bass );
\r
1387 stage演奏ドラム画面.t演奏結果を格納する( out c演奏記録_Drums, out c演奏記録_Guitar, out c演奏記録_Bass, out chipArray );
\r
1390 if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える
\r
1392 CScoreIni.C演奏記録 t;
\r
1394 c演奏記録_Guitar = c演奏記録_Bass;
\r
1397 CDTXMania.DTX.SwapGuitarBassInfos(); // 譜面情報も元に戻す
\r
1398 CDTXMania.ConfigIni.SwapGuitarBassInfos_AutoFlags(); // #24415 2011.2.27 yyagi
\r
1399 // リザルト集計時のみ、Auto系のフラグも元に戻す。
\r
1400 // これを戻すのは、リザルト集計後。
\r
1401 } // "case CStage.Eステージ.結果:"のところ。
\r
1403 double ps = 0.0, gs = 0.0;
\r
1404 if ( !c演奏記録_Drums.b全AUTOである && c演奏記録_Drums.n全チップ数 > 0) {
\r
1405 ps = c演奏記録_Drums.db演奏型スキル値;
\r
1406 gs = c演奏記録_Drums.dbゲーム型スキル値;
\r
1408 else if ( !c演奏記録_Guitar.b全AUTOである && c演奏記録_Guitar.n全チップ数 > 0) {
\r
1409 ps = c演奏記録_Guitar.db演奏型スキル値;
\r
1410 gs = c演奏記録_Guitar.dbゲーム型スキル値;
\r
1414 ps = c演奏記録_Bass.db演奏型スキル値;
\r
1415 gs = c演奏記録_Bass.dbゲーム型スキル値;
\r
1417 string str = "Cleared";
\r
1418 switch( CScoreIni.t総合ランク値を計算して返す( c演奏記録_Drums, c演奏記録_Guitar, c演奏記録_Bass ) )
\r
1420 case (int)CScoreIni.ERANK.SS:
\r
1421 str = string.Format( "Cleared (SS: {0:F2})", ps );
\r
1424 case (int) CScoreIni.ERANK.S:
\r
1425 str = string.Format( "Cleared (S: {0:F2})", ps );
\r
1428 case (int) CScoreIni.ERANK.A:
\r
1429 str = string.Format( "Cleared (A: {0:F2})", ps );
\r
1432 case (int) CScoreIni.ERANK.B:
\r
1433 str = string.Format( "Cleared (B: {0:F2})", ps );
\r
1436 case (int) CScoreIni.ERANK.C:
\r
1437 str = string.Format( "Cleared (C: {0:F2})", ps );
\r
1440 case (int) CScoreIni.ERANK.D:
\r
1441 str = string.Format( "Cleared (D: {0:F2})", ps );
\r
1444 case (int) CScoreIni.ERANK.E:
\r
1445 str = string.Format( "Cleared (E: {0:F2})", ps );
\r
1448 case (int)CScoreIni.ERANK.UNKNOWN: // #23534 2010.10.28 yyagi add: 演奏チップが0個のとき
\r
1449 str = "Cleared (No chips)";
\r
1453 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( str );
\r
1455 #region [ プラグイン On演奏クリア() の呼び出し ]
\r
1456 //---------------------
\r
1457 foreach( STPlugin pg in this.listプラグイン )
\r
1459 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1460 pg.plugin.On演奏クリア( scoreIni );
\r
1461 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1463 //---------------------
\r
1466 r現在のステージ.On非活性化();
\r
1467 Trace.TraceInformation( "----------------------" );
\r
1468 Trace.TraceInformation( "■ 結果" );
\r
1469 stage結果.st演奏記録.Drums = c演奏記録_Drums;
\r
1470 stage結果.st演奏記録.Guitar = c演奏記録_Guitar;
\r
1471 stage結果.st演奏記録.Bass = c演奏記録_Bass;
\r
1472 stage結果.r空うちドラムチップ = chipArray;
\r
1474 r直前のステージ = r現在のステージ;
\r
1475 r現在のステージ = stage結果;
\r
1477 #region [ プラグイン Onステージ変更() の呼び出し ]
\r
1478 //---------------------
\r
1479 foreach( STPlugin pg in this.listプラグイン )
\r
1481 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1482 pg.plugin.Onステージ変更();
\r
1483 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1485 //---------------------
\r
1489 //-----------------------------
\r
1492 //-----------------------------
\r
1496 case CStage.Eステージ.結果:
\r
1498 //-----------------------------
\r
1499 if( this.n進行描画の戻り値 != 0 )
\r
1501 if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24415 2011.2.27 yyagi Gt/Bsを入れ替えていたなら、Auto状態をリザルト画面終了後に元に戻す
\r
1503 CDTXMania.ConfigIni.SwapGuitarBassInfos_AutoFlags(); // Auto入れ替え
\r
1506 DTX.t全チップの再生一時停止();
\r
1508 r現在のステージ.On非活性化();
\r
1511 Trace.TraceInformation( "----------------------" );
\r
1512 Trace.TraceInformation( "■ 選曲" );
\r
1514 r直前のステージ = r現在のステージ;
\r
1515 r現在のステージ = stage選曲;
\r
1517 foreach( STPlugin pg in this.listプラグイン )
\r
1519 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );
\r
1520 pg.plugin.Onステージ変更();
\r
1521 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
1524 this.tガベージコレクションを実行する();
\r
1528 base.Window.Close();
\r
1531 //-----------------------------
\r
1535 case CStage.Eステージ.ChangeSkin:
\r
1537 //-----------------------------
\r
1538 if ( this.n進行描画の戻り値 != 0 )
\r
1540 r現在のステージ.On非活性化();
\r
1541 Trace.TraceInformation( "----------------------" );
\r
1542 Trace.TraceInformation( "■ 選曲" );
\r
1544 r直前のステージ = r現在のステージ;
\r
1545 r現在のステージ = stage選曲;
\r
1546 this.tガベージコレクションを実行する();
\r
1548 //-----------------------------
\r
1552 case CStage.Eステージ.終了:
\r
1554 //-----------------------------
\r
1555 if( this.n進行描画の戻り値 != 0 )
\r
1559 //-----------------------------
\r
1564 this.Device.EndScene(); // Present()は game.csのOnFrameEnd()に登録された、GraphicsDeviceManager.game_FrameEnd() 内で実行されるので不要
\r
1565 // (つまり、Present()は、Draw()完了後に実行される)
\r
1566 #if !GPUFlushAfterPresent
\r
1567 actFlushGPU.On進行描画(); // Flush GPU // EndScene()~Present()間 (つまりVSync前) でFlush実行
\r
1569 if ( Sound管理.GetCurrentSoundDeviceType() != "DirectSound" )
\r
1571 Sound管理.t再生中の処理をする(); // サウンドバッファの更新; 画面描画と同期させることで、スクロールをスムーズにする
\r
1575 #region [ 全画面・ウインドウ切り替え ]
\r
1576 if ( this.b次のタイミングで全画面_ウィンドウ切り替えを行う)
\r
1578 ConfigIni.b全画面モード = !ConfigIni.b全画面モード;
\r
1579 app.t全画面_ウィンドウモード切り替え();
\r
1580 this.b次のタイミングで全画面_ウィンドウ切り替えを行う = false;
\r
1583 #region [ 垂直基線同期切り替え ]
\r
1584 if ( this.b次のタイミングで垂直帰線同期切り替えを行う )
\r
1586 bool bIsMaximized = this.Window.IsMaximized; // #23510 2010.11.3 yyagi: to backup current window mode before changing VSyncWait
\r
1587 currentClientSize = this.Window.ClientSize; // #23510 2010.11.3 yyagi: to backup current window size before changing VSyncWait
\r
1588 DeviceSettings currentSettings = app.GraphicsDeviceManager.CurrentSettings;
\r
1589 currentSettings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;
\r
1590 app.GraphicsDeviceManager.ChangeDevice( currentSettings );
\r
1591 this.b次のタイミングで垂直帰線同期切り替えを行う = false;
\r
1592 base.Window.ClientSize = new Size(currentClientSize.Width, currentClientSize.Height); // #23510 2010.11.3 yyagi: to resume window size after changing VSyncWait
\r
1595 this.Window.WindowState = FormWindowState.Maximized; // #23510 2010.11.3 yyagi: to resume window mode after changing VSyncWait
\r
1603 #region [ 汎用ヘルパー ]
\r
1604 //-----------------
\r
1605 #region [ tテクスチャの生成 ]
\r
1606 public static CTexture tテクスチャの生成( string fileName )
\r
1608 return tテクスチャの生成( fileName, false );
\r
1610 public static CTexture tテクスチャの生成( string fileName, bool b黒を透過する )
\r
1612 if ( app == null )
\r
1618 return new CTexture( app.Device, fileName, TextureFormat, b黒を透過する );
\r
1620 catch ( CTextureCreateFailedException )
\r
1622 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", fileName );
\r
1625 catch ( FileNotFoundException )
\r
1627 Trace.TraceError( "テクスチャファイルが見つかりませんでした。({0})", fileName );
\r
1631 public static CTextureAf tテクスチャの生成Af( string fileName )
\r
1633 return tテクスチャの生成Af( fileName, false );
\r
1635 public static CTextureAf tテクスチャの生成Af( string fileName, bool b黒を透過する )
\r
1637 if ( app == null )
\r
1643 return new CTextureAf( app.Device, fileName, TextureFormat, b黒を透過する );
\r
1645 catch ( CTextureCreateFailedException )
\r
1647 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", fileName );
\r
1650 catch ( FileNotFoundException )
\r
1652 Trace.TraceError( "テクスチャファイルが見つかりませんでした。({0})", fileName );
\r
1656 public static void tテクスチャの解放( ref CTexture tx )
\r
1658 CDTXMania.t安全にDisposeする( ref tx );
\r
1660 public static void tテクスチャの解放( ref CTextureAf tx )
\r
1662 CDTXMania.t安全にDisposeする( ref tx );
\r
1664 public static CTexture tテクスチャの生成( byte[] txData )
\r
1666 return tテクスチャの生成( txData, false );
\r
1668 public static CTexture tテクスチャの生成( byte[] txData, bool b黒を透過する )
\r
1670 if ( app == null )
\r
1674 if ( txData == null )
\r
1676 Trace.TraceError( "テクスチャの生成に失敗しました。(txData==null)" );
\r
1681 return new CTexture( app.Device, txData, TextureFormat, b黒を透過する );
\r
1683 catch ( CTextureCreateFailedException )
\r
1685 Trace.TraceError( "テクスチャの生成に失敗しました。(txData)" );
\r
1690 public static CTexture tテクスチャの生成( Bitmap bitmap )
\r
1692 return tテクスチャの生成( bitmap, false );
\r
1694 public static CTexture tテクスチャの生成( Bitmap bitmap, bool b黒を透過する )
\r
1696 if ( app == null )
\r
1700 if ( bitmap == null )
\r
1702 Trace.TraceError( "テクスチャの生成に失敗しました。(bitmap==null)" );
\r
1707 return new CTexture( app.Device, bitmap, TextureFormat, b黒を透過する );
\r
1709 catch ( CTextureCreateFailedException )
\r
1711 Trace.TraceError( "テクスチャの生成に失敗しました。(bitmap)" );
\r
1717 /// <summary>プロパティ、インデクサには ref は使用できないので注意。</summary>
\r
1718 public static void t安全にDisposeする<T>( ref T obj )
\r
1720 if ( obj == null )
\r
1723 var d = obj as IDisposable;
\r
1728 obj = default( T );
\r
1730 //-----------------
\r
1733 #region [ private ]
\r
1734 //-----------------
\r
1735 private bool bマウスカーソル表示中 = true;
\r
1736 private bool b終了処理完了済み;
\r
1737 private static CDTX dtx;
\r
1738 private List<CActivity> listトップレベルActivities;
\r
1739 private int n進行描画の戻り値;
\r
1740 private MouseButtons mb = System.Windows.Forms.MouseButtons.Left;
\r
1741 private string strWindowTitle
\r
1745 if ( DTXVmode.Enabled )
\r
1747 return "DTXViewer release " + VERSION;
\r
1751 return "DTXMania .NET style release " + VERSION;
\r
1755 private CSound previewSound;
\r
1757 private void t起動処理()
\r
1759 #region [ strEXEのあるフォルダを決定する ]
\r
1760 //-----------------
\r
1761 // BEGIN #23629 2010.11.13 from: デバッグ時は Application.ExecutablePath が ($SolutionDir)/bin/x86/Debug/ などになり System/ の読み込みに失敗するので、カレントディレクトリを採用する。(プロジェクトのプロパティ→デバッグ→作業ディレクトリが有効になる)
\r
1763 strEXEのあるフォルダ = Environment.CurrentDirectory + @"\";
\r
1764 //strEXEのあるフォルダ = Path.GetDirectoryName( Environment.GetCommandLineArgs()[ 0 ] ) + @"\";
\r
1766 strEXEのあるフォルダ = Path.GetDirectoryName( Application.ExecutablePath ) + @"\"; // #23629 2010.11.9 yyagi: set correct pathname where DTXManiaGR.exe is.
\r
1768 // END #23629 2010.11.13 from
\r
1769 //-----------------
\r
1772 #region [ Config.ini の読込み ]
\r
1773 //---------------------
\r
1774 ConfigIni = new CConfigIni();
\r
1775 string path = strEXEのあるフォルダ + "Config.ini";
\r
1776 if (File.Exists(path))
\r
1780 ConfigIni.tファイルから読み込み(path);
\r
1784 //ConfigIni = new CConfigIni(); // 存在してなければ新規生成
\r
1787 this.Window.EnableSystemMenu = CDTXMania.ConfigIni.bIsEnabledSystemMenu; // #28200 2011.5.1 yyagi
\r
1788 // 2012.8.22 Config.iniが無いときに初期値が適用されるよう、この設定行をifブロック外に移動
\r
1790 //---------------------
\r
1792 #region [ ログ出力開始 ]
\r
1793 //---------------------
\r
1794 Trace.AutoFlush = true;
\r
1795 if (ConfigIni.bログ出力)
\r
1799 Trace.Listeners.Add(new CTraceLogListener(new StreamWriter(System.IO.Path.Combine(strEXEのあるフォルダ, "DTXManiaLog.txt"), false, Encoding.GetEncoding("utf-16"))));
\r
1801 catch (System.UnauthorizedAccessException) // #24481 2011.2.20 yyagi
\r
1803 int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;
\r
1804 string[] mes_writeErr = {
\r
1805 "DTXManiaLog.txtへの書き込みができませんでした。書き込みできるようにしてから、再度起動してください。",
\r
1806 "Failed to write DTXManiaLog.txt. Please set it writable and try again."
\r
1808 MessageBox.Show(mes_writeErr[c], "DTXMania boot error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1809 Environment.Exit(1);
\r
1812 Trace.WriteLine("");
\r
1813 Trace.WriteLine("DTXMania powered by YAMAHA Silent Session Drums");
\r
1814 Trace.WriteLine(string.Format("Release: {0}", VERSION));
\r
1815 Trace.WriteLine("");
\r
1816 Trace.TraceInformation("----------------------");
\r
1817 Trace.TraceInformation("■ アプリケーションの初期化");
\r
1818 Trace.TraceInformation("OS Version: " + Environment.OSVersion);
\r
1819 Trace.TraceInformation("ProcessorCount: " + Environment.ProcessorCount.ToString());
\r
1820 Trace.TraceInformation("CLR Version: " + Environment.Version.ToString());
\r
1821 //---------------------
\r
1823 #region [ DTXVmodeクラス の初期化 ]
\r
1824 //---------------------
\r
1825 //Trace.TraceInformation( "DTXVモードの初期化を行います。" );
\r
1829 DTXVmode = new CDTXVmode();
\r
1830 DTXVmode.Enabled = false;
\r
1831 //Trace.TraceInformation( "DTXVモードの初期化を完了しました。" );
\r
1835 //Trace.Unindent();
\r
1837 //---------------------
\r
1839 #region [ コンパクトモードスイッチの有無、もしくは、DTXViewerとしての起動 ]
\r
1840 //---------------------
\r
1841 bコンパクトモード = false;
\r
1842 strコンパクトモードファイル = "";
\r
1843 string[] commandLineArgs = Environment.GetCommandLineArgs();
\r
1844 if ((commandLineArgs != null) && (commandLineArgs.Length > 1))
\r
1849 for (int i = 1; i < commandLineArgs.Length; i++)
\r
1853 arg += " " + "\"" + commandLineArgs[i] + "\"";
\r
1857 arg += commandLineArgs[i];
\r
1860 DTXVmode.ParseArguments(arg);
\r
1861 if (DTXVmode.Enabled)
\r
1863 DTXVmode.Refreshed = false; // 初回起動時は再読み込みに走らせない
\r
1864 strコンパクトモードファイル = DTXVmode.filename;
\r
1865 switch (DTXVmode.soundDeviceType) // サウンド再生方式の設定
\r
1867 case ESoundDeviceType.DirectSound:
\r
1868 ConfigIni.nSoundDeviceType = 0;
\r
1870 case ESoundDeviceType.ExclusiveWASAPI:
\r
1871 ConfigIni.nSoundDeviceType = 2;
\r
1873 case ESoundDeviceType.ASIO:
\r
1874 ConfigIni.nSoundDeviceType = 1;
\r
1875 ConfigIni.nASIODevice = DTXVmode.nASIOdevice;
\r
1879 CDTXMania.ConfigIni.b垂直帰線待ちを行う = DTXVmode.VSyncWait;
\r
1880 CDTXMania.ConfigIni.bTimeStretch = DTXVmode.TimeStretch;
\r
1881 CDTXMania.ConfigIni.bDrums有効 = !DTXVmode.GRmode;
\r
1882 CDTXMania.ConfigIni.bGuitar有効 = true;
\r
1884 CDTXMania.ConfigIni.nウインドウwidth = CDTXMania.ConfigIni.nViewerウインドウwidth;
\r
1885 CDTXMania.ConfigIni.nウインドウheight = CDTXMania.ConfigIni.nViewerウインドウheight;
\r
1886 CDTXMania.ConfigIni.n初期ウィンドウ開始位置X = CDTXMania.ConfigIni.nViewer初期ウィンドウ開始位置X;
\r
1887 CDTXMania.ConfigIni.n初期ウィンドウ開始位置Y = CDTXMania.ConfigIni.nViewer初期ウィンドウ開始位置Y;
\r
1889 else // 通常のコンパクトモード
\r
1891 strコンパクトモードファイル = commandLineArgs[1];
\r
1894 if (!File.Exists(strコンパクトモードファイル)) // #32985 2014.1.23 yyagi
\r
1896 Trace.TraceError("コンパクトモードで指定されたファイルが見つかりません。DTXManiaを終了します。[{0}]", strコンパクトモードファイル);
\r
1898 Environment.Exit(-1);
\r
1900 if ( strコンパクトモードファイル == "" ) // DTXMania未起動状態で、DTXCで再生停止ボタンを押した場合は、何もせず終了
\r
1902 Environment.Exit( -1 );
\r
1906 throw new FileNotFoundException( "コンパクトモードで指定されたファイルが見つかりません。DTXManiaを終了します。", strコンパクトモードファイル );
\r
1910 if (DTXVmode.Enabled)
\r
1912 Trace.TraceInformation("DTXVモードで起動します。[{0}]", strコンパクトモードファイル);
\r
1916 Trace.TraceInformation("コンパクトモードで起動します。[{0}]", strコンパクトモードファイル);
\r
1919 //---------------------
\r
1923 #region [ Input管理 の初期化 ]
\r
1924 //---------------------
\r
1925 Trace.TraceInformation("DirectInput, MIDI入力の初期化を行います。");
\r
1929 bool bUseMIDIIn = !DTXVmode.Enabled;
\r
1930 Input管理 = new CInput管理(base.Window.Handle, bUseMIDIIn);
\r
1931 foreach (IInputDevice device in Input管理.list入力デバイス)
\r
1933 if ((device.e入力デバイス種別 == E入力デバイス種別.Joystick) && !ConfigIni.dicJoystick.ContainsValue(device.GUID))
\r
1936 while (ConfigIni.dicJoystick.ContainsKey(key))
\r
1940 ConfigIni.dicJoystick.Add(key, device.GUID);
\r
1943 foreach (IInputDevice device2 in Input管理.list入力デバイス)
\r
1945 if (device2.e入力デバイス種別 == E入力デバイス種別.Joystick)
\r
1947 foreach (KeyValuePair<int, string> pair in ConfigIni.dicJoystick)
\r
1949 if (device2.GUID.Equals(pair.Value))
\r
1951 ((CInputJoystick)device2).SetID(pair.Key);
\r
1958 Trace.TraceInformation("DirectInput の初期化を完了しました。");
\r
1960 catch (Exception exception2)
\r
1962 Trace.TraceError(exception2.Message);
\r
1963 Trace.TraceError("DirectInput, MIDI入力の初期化に失敗しました。");
\r
1965 int c = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ? 0 : 1;
\r
1966 string[] mes_writeErr = {
\r
1967 "DirectInputまたはMIDI入力の初期化に失敗しました。DTXManiaGRを終了します。",
\r
1968 "Failed to initialize DirectInput (or MIDI-IN)."
\r
1970 MessageBox.Show(mes_writeErr[c], "DTXMania boot error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
1971 Environment.Exit(1);
\r
1977 //---------------------
\r
1980 #region [ ウィンドウ初期化 ]
\r
1981 //---------------------
\r
1982 base.Window.StartPosition = FormStartPosition.Manual; // #30675 2013.02.04 ikanick add
\r
1983 base.Window.Location = new Point(ConfigIni.n初期ウィンドウ開始位置X, ConfigIni.n初期ウィンドウ開始位置Y); // #30675 2013.02.04 ikanick add
\r
1985 base.Window.Text = this.strWindowTitle; // 事前にDTXVmodeの実体を作っておくこと
\r
1987 base.Window.StartPosition = FormStartPosition.Manual; // #30675 2013.02.04 ikanick add
\r
1988 base.Window.Location = new Point(ConfigIni.n初期ウィンドウ開始位置X, ConfigIni.n初期ウィンドウ開始位置Y); // #30675 2013.02.04 ikanick add
\r
1990 if (ConfigIni.nウインドウwidth <= 0 && ConfigIni.nウインドウheight <= 0) // #34069 2014.7.24 yyagi 初回起動時は1280x720にする
\r
1992 ConfigIni.nウインドウwidth = 1280;
\r
1993 ConfigIni.nウインドウheight = 720;
\r
1994 //w = this.Window.Screen.WorkingArea.Width;
\r
1995 //h = this.Window.Screen.WorkingArea.Height;
\r
1996 //w = base.Window.Screen.Bounds.Width;
\r
1997 //h = base.Window.Screen.Bounds.Height;
\r
1998 //ConfigIni.nウインドウwidth = SampleFramework.GameWindowSize.Width;
\r
1999 //ConfigIni.nウインドウheight = SampleFramework.GameWindowSize.Height;
\r
2002 base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight); // #34510 yyagi 2010.10.31 to change window size got from Config.ini
\r
2003 #if !WindowedFullscreen
\r
2004 if (!ConfigIni.bウィンドウモード) // #23510 2010.11.02 yyagi: add; to recover window size in case bootup with fullscreen mode
\r
2005 { // #30666 2013.02.02 yyagi: currentClientSize should be always made
\r
2007 currentClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);
\r
2008 #if !WindowedFullscreen
\r
2011 base.Window.MaximizeBox = true; // #23510 2010.11.04 yyagi: to support maximizing window
\r
2012 base.Window.FormBorderStyle = FormBorderStyle.Sizable; // #23510 2010.10.27 yyagi: changed from FixedDialog to Sizable, to support window resize
\r
2013 // #30666 2013.02.02 yyagi: moved the code to t全画面・ウインドウモード切り替え()
\r
2014 base.Window.ShowIcon = true;
\r
2015 base.Window.Icon = Properties.Resources.dtx;
\r
2016 base.Window.KeyDown += new KeyEventHandler(this.Window_KeyDown);
\r
2017 base.Window.MouseUp += new MouseEventHandler(this.Window_MouseUp);
\r
2018 base.Window.MouseDoubleClick += new MouseEventHandler(this.Window_MouseDoubleClick); // #23510 2010.11.13 yyagi: to go fullscreen mode
\r
2019 base.Window.ResizeEnd += new EventHandler(this.Window_ResizeEnd); // #23510 2010.11.20 yyagi: to set resized window size in Config.ini
\r
2020 base.Window.ApplicationActivated += new EventHandler(this.Window_ApplicationActivated);
\r
2021 base.Window.ApplicationDeactivated += new EventHandler(this.Window_ApplicationDeactivated);
\r
2022 //---------------------
\r
2024 #region [ Direct3D9Exを使うかどうか判定 ]
\r
2026 #region [ Direct3D9 デバイスの生成 ]
\r
2027 //---------------------
\r
2028 DeviceSettings settings = new DeviceSettings();
\r
2029 #if WindowedFullscreen
\r
2030 settings.Windowed = true; // #30666 2013.2.2 yyagi: Fullscreenmode is "Maximized window" mode
\r
2032 settings.Windowed = ConfigIni.bウィンドウモード;
\r
2034 settings.BackBufferWidth = SampleFramework.GameWindowSize.Width;
\r
2035 settings.BackBufferHeight = SampleFramework.GameWindowSize.Height;
\r
2036 // settings.BackBufferCount = 3;
\r
2037 settings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;
\r
2038 // settings.BackBufferFormat = Format.A8R8G8B8;
\r
2039 // settings.MultisampleType = MultisampleType.FourSamples;
\r
2040 // settings.MultisampleQuality = 4;
\r
2041 // settings.MultisampleType = MultisampleType.None;
\r
2042 // settings.MultisampleQuality = 0;
\r
2046 base.GraphicsDeviceManager.ChangeDevice(settings);
\r
2048 catch (DeviceCreationException e)
\r
2050 Trace.TraceError(e.ToString());
\r
2051 MessageBox.Show(e.Message + e.ToString(), "DTXMania failed to boot: DirectX9 Initialize Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
2052 Environment.Exit(-1);
\r
2055 base.IsFixedTimeStep = false;
\r
2056 // base.TargetElapsedTime = TimeSpan.FromTicks( 10000000 / 75 );
\r
2057 base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight); // #23510 2010.10.31 yyagi: to recover window size. width and height are able to get from Config.ini.
\r
2058 base.InactiveSleepTime = TimeSpan.FromMilliseconds((float)(ConfigIni.n非フォーカス時スリープms)); // #23568 2010.11.3 yyagi: to support valiable sleep value when !IsActive
\r
2059 // #23568 2010.11.4 ikanick changed ( 1 -> ConfigIni )
\r
2060 #if WindowedFullscreen
\r
2061 this.t全画面_ウィンドウモード切り替え(); // #30666 2013.2.2 yyagi: finalize settings for "Maximized window mode"
\r
2063 actFlushGPU = new CActFlushGPU();
\r
2064 //---------------------
\r
2069 #region [ Skin の初期化 ]
\r
2070 //---------------------
\r
2071 Trace.TraceInformation("スキンの初期化を行います。");
\r
2075 Skin = new CSkin(CDTXMania.ConfigIni.strSystemSkinSubfolderFullName, CDTXMania.ConfigIni.bUseBoxDefSkin);
\r
2076 CDTXMania.ConfigIni.strSystemSkinSubfolderFullName = CDTXMania.Skin.GetCurrentSkinSubfolderFullName(true); // 旧指定のSkinフォルダが消滅していた場合に備える
\r
2077 Trace.TraceInformation("スキンの初期化を完了しました。");
\r
2081 Trace.TraceInformation("スキンの初期化に失敗しました。");
\r
2088 //---------------------
\r
2091 #region [ Timer の初期化 ]
\r
2092 //---------------------
\r
2093 Trace.TraceInformation("タイマの初期化を行います。");
\r
2097 Timer = new CTimer(CTimer.E種別.MultiMedia);
\r
2098 Trace.TraceInformation("タイマの初期化を完了しました。");
\r
2104 //---------------------
\r
2108 #region [ FPS カウンタの初期化 ]
\r
2109 //---------------------
\r
2110 Trace.TraceInformation("FPSカウンタの初期化を行います。");
\r
2115 Trace.TraceInformation("FPSカウンタを生成しました。");
\r
2121 //---------------------
\r
2123 #region [ act文字コンソールの初期化 ]
\r
2124 //---------------------
\r
2125 Trace.TraceInformation("文字コンソールの初期化を行います。");
\r
2129 act文字コンソール = new C文字コンソール();
\r
2130 Trace.TraceInformation("文字コンソールを生成しました。");
\r
2131 act文字コンソール.On活性化();
\r
2132 Trace.TraceInformation("文字コンソールを活性化しました。");
\r
2133 Trace.TraceInformation("文字コンソールの初期化を完了しました。");
\r
2135 catch (Exception exception)
\r
2137 Trace.TraceError(exception.Message);
\r
2138 Trace.TraceError("文字コンソールの初期化に失敗しました。");
\r
2144 //---------------------
\r
2146 #region [ Pad の初期化 ]
\r
2147 //---------------------
\r
2148 Trace.TraceInformation("パッドの初期化を行います。");
\r
2152 Pad = new CPad(ConfigIni, Input管理);
\r
2153 Trace.TraceInformation("パッドの初期化を完了しました。");
\r
2155 catch (Exception exception3)
\r
2157 Trace.TraceError(exception3.Message);
\r
2158 Trace.TraceError("パッドの初期化に失敗しました。");
\r
2164 //---------------------
\r
2166 #region [ Sound管理 の初期化 ]
\r
2167 //---------------------
\r
2168 Trace.TraceInformation("サウンドデバイスの初期化を行います。");
\r
2172 ESoundDeviceType soundDeviceType;
\r
2173 switch (CDTXMania.ConfigIni.nSoundDeviceType)
\r
2176 soundDeviceType = ESoundDeviceType.DirectSound;
\r
2179 soundDeviceType = ESoundDeviceType.ASIO;
\r
2182 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
\r
2185 soundDeviceType = ESoundDeviceType.Unknown;
\r
2188 Sound管理 = new CSound管理(base.Window.Handle,
\r
2190 CDTXMania.ConfigIni.nWASAPIBufferSizeMs,
\r
2191 // CDTXMania.ConfigIni.nASIOBufferSizeMs,
\r
2193 CDTXMania.ConfigIni.nASIODevice,
\r
2194 CDTXMania.ConfigIni.bUseOSTimer
\r
2196 //Sound管理 = FDK.CSound管理.Instance;
\r
2197 //Sound管理.t初期化( soundDeviceType, 0, 0, CDTXMania.ConfigIni.nASIODevice, base.Window.Handle );
\r
2199 ShowWindowTitleWithSoundType();
\r
2200 FDK.CSound管理.bIsTimeStretch = CDTXMania.ConfigIni.bTimeStretch;
\r
2201 Sound管理.nMasterVolume = CDTXMania.ConfigIni.nMasterVolume;
\r
2202 //FDK.CSound管理.bIsMP3DecodeByWindowsCodec = CDTXMania.ConfigIni.bNoMP3Streaming;
\r
2203 Trace.TraceInformation("サウンドデバイスの初期化を完了しました。");
\r
2205 catch (Exception e)
\r
2207 Trace.TraceError(e.Message);
\r
2214 //---------------------
\r
2216 #region [ Songs管理 の初期化 ]
\r
2217 //---------------------
\r
2218 Trace.TraceInformation("曲リストの初期化を行います。");
\r
2222 Songs管理 = new CSongs管理();
\r
2223 // Songs管理_裏読 = new CSongs管理();
\r
2224 EnumSongs = new CEnumSongs();
\r
2225 actEnumSongs = new CActEnumSongs();
\r
2226 Trace.TraceInformation("曲リストの初期化を完了しました。");
\r
2228 catch (Exception e)
\r
2230 Trace.TraceError(e.Message);
\r
2231 Trace.TraceError("曲リストの初期化に失敗しました。");
\r
2237 //---------------------
\r
2239 #region [ CAvi の初期化 ]
\r
2240 //---------------------
\r
2242 //---------------------
\r
2244 #region [ Random の初期化 ]
\r
2245 //---------------------
\r
2246 Random = new Random((int)Timer.nシステム時刻);
\r
2247 //---------------------
\r
2249 #region [ ステージの初期化 ]
\r
2250 //---------------------
\r
2253 stage起動 = new CStage起動();
\r
2254 stageタイトル = new CStageタイトル();
\r
2255 // stageオプション = new CStageオプション();
\r
2256 stageコンフィグ = new CStageコンフィグ();
\r
2257 stage選曲 = new CStage選曲();
\r
2258 stage曲読み込み = new CStage曲読み込み();
\r
2259 stage演奏ドラム画面 = new CStage演奏ドラム画面();
\r
2260 stage演奏ギター画面 = new CStage演奏ギター画面();
\r
2261 stage結果 = new CStage結果();
\r
2262 stageChangeSkin = new CStageChangeSkin();
\r
2263 stage終了 = new CStage終了();
\r
2264 this.listトップレベルActivities = new List<CActivity>();
\r
2265 this.listトップレベルActivities.Add(actEnumSongs);
\r
2266 this.listトップレベルActivities.Add(act文字コンソール);
\r
2267 this.listトップレベルActivities.Add(stage起動);
\r
2268 this.listトップレベルActivities.Add(stageタイトル);
\r
2269 // this.listトップレベルActivities.Add( stageオプション );
\r
2270 this.listトップレベルActivities.Add(stageコンフィグ);
\r
2271 this.listトップレベルActivities.Add(stage選曲);
\r
2272 this.listトップレベルActivities.Add(stage曲読み込み);
\r
2273 this.listトップレベルActivities.Add(stage演奏ドラム画面);
\r
2274 this.listトップレベルActivities.Add(stage演奏ギター画面);
\r
2275 this.listトップレベルActivities.Add(stage結果);
\r
2276 this.listトップレベルActivities.Add(stageChangeSkin);
\r
2277 this.listトップレベルActivities.Add(stage終了);
\r
2278 this.listトップレベルActivities.Add(actFlushGPU);
\r
2279 //---------------------
\r
2281 #region [ プラグインの検索と生成 ]
\r
2282 //---------------------
\r
2283 PluginHost = new CPluginHost();
\r
2285 Trace.TraceInformation("プラグインの検索と生成を行います。");
\r
2289 this.tプラグイン検索と生成();
\r
2290 Trace.TraceInformation("プラグインの検索と生成を完了しました。");
\r
2296 //---------------------
\r
2298 #region [ プラグインの初期化 ]
\r
2299 //---------------------
\r
2300 if (this.listプラグイン != null && this.listプラグイン.Count > 0)
\r
2302 Trace.TraceInformation("プラグインの初期化を行います。");
\r
2306 foreach (STPlugin st in this.listプラグイン)
\r
2308 Directory.SetCurrentDirectory(st.strプラグインフォルダ);
\r
2309 st.plugin.On初期化(this.PluginHost);
\r
2310 st.plugin.OnManagedリソースの作成();
\r
2311 st.plugin.OnUnmanagedリソースの作成();
\r
2312 Directory.SetCurrentDirectory(CDTXMania.strEXEのあるフォルダ);
\r
2314 Trace.TraceInformation("すべてのプラグインの初期化を完了しました。");
\r
2318 Trace.TraceError("プラグインのどれかの初期化に失敗しました。");
\r
2327 //---------------------
\r
2330 Trace.TraceInformation("アプリケーションの初期化を完了しました。");
\r
2332 #region [ 最初のステージの起動 ]
\r
2333 //---------------------
\r
2334 Trace.TraceInformation("----------------------");
\r
2335 Trace.TraceInformation("■ 起動");
\r
2337 if (CDTXMania.bコンパクトモード)
\r
2339 r現在のステージ = stage曲読み込み;
\r
2343 r現在のステージ = stage起動;
\r
2346 //---------------------
\r
2350 public void ShowWindowTitleWithSoundType()
\r
2352 string delay = "";
\r
2353 if ( Sound管理.GetCurrentSoundDeviceType() != "DirectSound" )
\r
2355 delay = "(" + Sound管理.GetSoundDelay() + "ms)";
\r
2357 base.Window.Text = strWindowTitle + " (" + Sound管理.GetCurrentSoundDeviceType() + delay + ")";
\r
2360 private void t終了処理()
\r
2362 if( !this.b終了処理完了済み )
\r
2364 Trace.TraceInformation( "----------------------" );
\r
2365 Trace.TraceInformation( "■ アプリケーションの終了" );
\r
2366 #region [ 曲検索の終了処理 ]
\r
2367 //---------------------
\r
2368 if ( actEnumSongs != null )
\r
2370 Trace.TraceInformation( "曲検索actの終了処理を行います。" );
\r
2374 actEnumSongs.On非活性化();
\r
2375 actEnumSongs= null;
\r
2376 Trace.TraceInformation( "曲検索actの終了処理を完了しました。" );
\r
2378 catch ( Exception e )
\r
2380 Trace.TraceError( e.Message );
\r
2381 Trace.TraceError( "曲検索actの終了処理に失敗しました。" );
\r
2388 //---------------------
\r
2390 #region [ 現在のステージの終了処理 ]
\r
2391 //---------------------
\r
2392 if( CDTXMania.r現在のステージ != null && CDTXMania.r現在のステージ.b活性化してる ) // #25398 2011.06.07 MODIFY FROM
\r
2394 Trace.TraceInformation( "現在のステージを終了します。" );
\r
2398 r現在のステージ.On非活性化();
\r
2399 Trace.TraceInformation( "現在のステージの終了処理を完了しました。" );
\r
2406 //---------------------
\r
2408 #region [ プラグインの終了処理 ]
\r
2409 //---------------------
\r
2410 if (this.listプラグイン != null && this.listプラグイン.Count > 0)
\r
2412 Trace.TraceInformation( "すべてのプラグインを終了します。" );
\r
2416 foreach( STPlugin st in this.listプラグイン )
\r
2418 Directory.SetCurrentDirectory( st.strプラグインフォルダ );
\r
2419 st.plugin.OnUnmanagedリソースの解放();
\r
2420 st.plugin.OnManagedリソースの解放();
\r
2422 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );
\r
2424 PluginHost = null;
\r
2425 Trace.TraceInformation( "すべてのプラグインの終了処理を完了しました。" );
\r
2432 //---------------------
\r
2434 #region [ 曲リストの終了処理 ]
\r
2435 //---------------------
\r
2436 if (Songs管理 != null)
\r
2438 Trace.TraceInformation( "曲リストの終了処理を行います。" );
\r
2443 Trace.TraceInformation( "曲リストの終了処理を完了しました。" );
\r
2445 catch( Exception exception )
\r
2447 Trace.TraceError( exception.Message );
\r
2448 Trace.TraceError( "曲リストの終了処理に失敗しました。" );
\r
2456 //---------------------
\r
2458 #region [ スキンの終了処理 ]
\r
2459 //---------------------
\r
2462 Trace.TraceInformation( "スキンの終了処理を行います。" );
\r
2468 Trace.TraceInformation( "スキンの終了処理を完了しました。" );
\r
2470 catch( Exception exception2 )
\r
2472 Trace.TraceError( exception2.Message );
\r
2473 Trace.TraceError( "スキンの終了処理に失敗しました。" );
\r
2480 //---------------------
\r
2482 #region [ DirectSoundの終了処理 ]
\r
2483 //---------------------
\r
2484 if (Sound管理 != null)
\r
2486 Trace.TraceInformation( "DirectSound の終了処理を行います。" );
\r
2490 Sound管理.Dispose();
\r
2492 Trace.TraceInformation( "DirectSound の終了処理を完了しました。" );
\r
2494 catch( Exception exception3 )
\r
2496 Trace.TraceError( exception3.Message );
\r
2497 Trace.TraceError( "DirectSound の終了処理に失敗しました。" );
\r
2504 //---------------------
\r
2506 #region [ パッドの終了処理 ]
\r
2507 //---------------------
\r
2510 Trace.TraceInformation( "パッドの終了処理を行います。" );
\r
2515 Trace.TraceInformation( "パッドの終了処理を完了しました。" );
\r
2517 catch( Exception exception4 )
\r
2519 Trace.TraceError( exception4.Message );
\r
2520 Trace.TraceError( "パッドの終了処理に失敗しました。" );
\r
2527 //---------------------
\r
2529 #region [ DirectInput, MIDI入力の終了処理 ]
\r
2530 //---------------------
\r
2531 if (Input管理 != null)
\r
2533 Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を行います。" );
\r
2537 Input管理.Dispose();
\r
2539 Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を完了しました。" );
\r
2541 catch( Exception exception5 )
\r
2543 Trace.TraceError( exception5.Message );
\r
2544 Trace.TraceError( "DirectInput, MIDI入力の終了処理に失敗しました。" );
\r
2551 //---------------------
\r
2553 #region [ 文字コンソールの終了処理 ]
\r
2554 //---------------------
\r
2555 if (act文字コンソール != null)
\r
2557 Trace.TraceInformation( "文字コンソールの終了処理を行います。" );
\r
2561 act文字コンソール.On非活性化();
\r
2562 act文字コンソール = null;
\r
2563 Trace.TraceInformation( "文字コンソールの終了処理を完了しました。" );
\r
2565 catch( Exception exception6 )
\r
2567 Trace.TraceError( exception6.Message );
\r
2568 Trace.TraceError( "文字コンソールの終了処理に失敗しました。" );
\r
2575 //---------------------
\r
2577 #region [ FPSカウンタの終了処理 ]
\r
2578 //---------------------
\r
2579 Trace.TraceInformation("FPSカウンタの終了処理を行います。");
\r
2587 Trace.TraceInformation( "FPSカウンタの終了処理を完了しました。" );
\r
2593 //---------------------
\r
2595 #region [ タイマの終了処理 ]
\r
2596 //---------------------
\r
2597 Trace.TraceInformation("タイマの終了処理を行います。");
\r
2601 if( Timer != null )
\r
2605 Trace.TraceInformation( "タイマの終了処理を完了しました。" );
\r
2609 Trace.TraceInformation( "タイマは使用されていません。" );
\r
2616 //---------------------
\r
2618 #region [ Config.iniの出力 ]
\r
2619 //---------------------
\r
2620 Trace.TraceInformation("Config.ini を出力します。");
\r
2621 // if ( ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.16 yyagi ギターベースがスワップしているときは元に戻す
\r
2622 if ( ConfigIni.bIsSwappedGuitarBass_AutoFlagsAreSwapped ) // #24415 2011.2.21 yyagi FLIP中かつ演奏中にalt-f4で終了したときは、AUTOのフラグをswapして戻す
\r
2624 ConfigIni.SwapGuitarBassInfos_AutoFlags();
\r
2626 string str = strEXEのあるフォルダ + "Config.ini";
\r
2630 if ( DTXVmode.Enabled )
\r
2632 DTXVmode.tUpdateConfigIni();
\r
2633 Trace.TraceInformation( "DTXVモードの設定情報を、Config.iniに保存しました。" );
\r
2637 ConfigIni.t書き出し( str );
\r
2638 Trace.TraceInformation( "保存しました。({0})", str );
\r
2641 catch( Exception e )
\r
2643 Trace.TraceError( e.Message );
\r
2644 Trace.TraceError( "Config.ini の出力に失敗しました。({0})", str );
\r
2650 //---------------------
\r
2652 #region [ DTXVmodeの終了処理 ]
\r
2653 //---------------------
\r
2654 //Trace.TraceInformation( "DTXVモードの終了処理を行います。" );
\r
2658 if ( DTXVmode != null )
\r
2661 //Trace.TraceInformation( "DTXVモードの終了処理を完了しました。" );
\r
2665 //Trace.TraceInformation( "DTXVモードは使用されていません。" );
\r
2670 //Trace.Unindent();
\r
2672 //---------------------
\r
2674 Trace.TraceInformation( "アプリケーションの終了処理を完了しました。" );
\r
2677 this.b終了処理完了済み = true;
\r
2680 private CScoreIni tScoreIniへBGMAdjustとHistoryとPlayCountを更新(string str新ヒストリ行)
\r
2682 bool bIsUpdatedDrums, bIsUpdatedGuitar, bIsUpdatedBass;
\r
2683 string strFilename = DTX.strファイル名の絶対パス + ".score.ini";
\r
2684 CScoreIni ini = new CScoreIni( strFilename );
\r
2685 if( !File.Exists( strFilename ) )
\r
2687 ini.stファイル.Title = DTX.TITLE;
\r
2688 ini.stファイル.Name = DTX.strファイル名;
\r
2689 ini.stファイル.Hash = CScoreIni.tファイルのMD5を求めて返す( DTX.strファイル名の絶対パス );
\r
2690 for( int i = 0; i < 6; i++ )
\r
2692 ini.stセクション[ i ].nPerfectになる範囲ms = nPerfect範囲ms;
\r
2693 ini.stセクション[ i ].nGreatになる範囲ms = nGreat範囲ms;
\r
2694 ini.stセクション[ i ].nGoodになる範囲ms = nGood範囲ms;
\r
2695 ini.stセクション[ i ].nPoorになる範囲ms = nPoor範囲ms;
\r
2698 ini.stファイル.BGMAdjust = DTX.nBGMAdjust;
\r
2699 CScoreIni.t更新条件を取得する( out bIsUpdatedDrums, out bIsUpdatedGuitar, out bIsUpdatedBass );
\r
2700 if( bIsUpdatedDrums || bIsUpdatedGuitar || bIsUpdatedBass )
\r
2702 if( bIsUpdatedDrums )
\r
2704 ini.stファイル.PlayCountDrums++;
\r
2706 if( bIsUpdatedGuitar )
\r
2708 ini.stファイル.PlayCountGuitar++;
\r
2710 if( bIsUpdatedBass )
\r
2712 ini.stファイル.PlayCountBass++;
\r
2714 ini.tヒストリを追加する( str新ヒストリ行 );
\r
2717 stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;
\r
2718 stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;
\r
2719 stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;
\r
2720 for( int j = 0; j < ini.stファイル.History.Length; j++ )
\r
2722 stage選曲.r現在選択中のスコア.譜面情報.演奏履歴[ j ] = ini.stファイル.History[ j ];
\r
2726 if( ConfigIni.bScoreIniを出力する )
\r
2728 ini.t書き出し( strFilename );
\r
2733 private void tガベージコレクションを実行する()
\r
2736 GC.WaitForPendingFinalizers();
\r
2738 GC.WaitForPendingFinalizers();
\r
2740 private void tプラグイン検索と生成()
\r
2742 this.listプラグイン = new List<STPlugin>();
\r
2744 string strIPluginActivityの名前 = typeof( IPluginActivity ).FullName;
\r
2745 string strプラグインフォルダパス = strEXEのあるフォルダ + "Plugins\\";
\r
2747 this.t指定フォルダ内でのプラグイン検索と生成( strプラグインフォルダパス, strIPluginActivityの名前 );
\r
2749 if( this.listプラグイン.Count > 0 )
\r
2750 Trace.TraceInformation( this.listプラグイン.Count + " 個のプラグインを読み込みました。" );
\r
2752 #region [ Windowイベント処理 ]
\r
2753 private void t指定フォルダ内でのプラグイン検索と生成( string strプラグインフォルダパス, string strプラグイン型名 )
\r
2755 // 指定されたパスが存在しないとエラー
\r
2756 if( !Directory.Exists( strプラグインフォルダパス ) )
\r
2758 Trace.TraceWarning( "プラグインフォルダが存在しません。(" + strプラグインフォルダパス + ")" );
\r
2762 // (1) すべての *.dll について…
\r
2763 string[] strDLLs = System.IO.Directory.GetFiles( strプラグインフォルダパス, "*.dll" );
\r
2764 foreach( string dllName in strDLLs )
\r
2768 // (1-1) dll をアセンブリとして読み込む。
\r
2769 System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom( dllName );
\r
2771 // (1-2) アセンブリ内のすべての型について、プラグインとして有効か調べる
\r
2772 foreach( Type t in asm.GetTypes() )
\r
2774 // (1-3) ↓クラスであり↓Publicであり↓抽象クラスでなく↓IPlugin型のインスタンスが作れる 型を持っていれば有効
\r
2775 if( t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface( strプラグイン型名 ) != null )
\r
2777 // (1-4) クラス名からインスタンスを作成する
\r
2778 var st = new STPlugin() {
\r
2779 plugin = (IPluginActivity) asm.CreateInstance( t.FullName ),
\r
2780 strプラグインフォルダ = Path.GetDirectoryName( dllName ),
\r
2781 strアセンブリ簡易名 = asm.GetName().Name,
\r
2782 Version = asm.GetName().Version,
\r
2785 // (1-5) プラグインリストへ登録
\r
2786 this.listプラグイン.Add( st );
\r
2787 Trace.TraceInformation( "プラグイン {0} ({1}, {2}, {3}) を読み込みました。", t.FullName, Path.GetFileName( dllName ), st.strアセンブリ簡易名, st.Version.ToString() );
\r
2791 catch (Exception e)
\r
2793 Trace.TraceInformation( dllName + " からプラグインを生成することに失敗しました。スキップします。" );
\r
2794 Trace.TraceInformation( e.ToString() );
\r
2795 Trace.TraceInformation( e.Message );
\r
2799 // (2) サブフォルダがあれば再帰する
\r
2800 string[] strDirs = Directory.GetDirectories( strプラグインフォルダパス, "*" );
\r
2801 foreach( string dir in strDirs )
\r
2802 this.t指定フォルダ内でのプラグイン検索と生成( dir + "\\", strプラグイン型名 );
\r
2804 //-----------------
\r
2805 private void Window_ApplicationActivated( object sender, EventArgs e )
\r
2807 this.bApplicationActive = true;
\r
2809 private void Window_ApplicationDeactivated( object sender, EventArgs e )
\r
2811 this.bApplicationActive = false;
\r
2813 private void Window_KeyDown( object sender, KeyEventArgs e )
\r
2815 if ( e.KeyCode == Keys.Menu )
\r
2818 e.SuppressKeyPress = true;
\r
2820 else if ( ( e.KeyCode == Keys.Return ) && e.Alt )
\r
2822 if ( ConfigIni != null )
\r
2824 ConfigIni.bウィンドウモード = !ConfigIni.bウィンドウモード;
\r
2825 this.t全画面_ウィンドウモード切り替え();
\r
2828 e.SuppressKeyPress = true;
\r
2832 for ( int i = 0; i < 0x10; i++ )
\r
2834 if ( ConfigIni.KeyAssign.System.Capture[ i ].コード > 0 &&
\r
2835 e.KeyCode == DeviceConstantConverter.KeyToKeyCode( (SlimDX.DirectInput.Key) ConfigIni.KeyAssign.System.Capture[ i ].コード ) )
\r
2837 // Debug.WriteLine( "capture: " + string.Format( "{0:2x}", (int) e.KeyCode ) + " " + (int) e.KeyCode );
\r
2838 string strFullPath =
\r
2839 Path.Combine( CDTXMania.strEXEのあるフォルダ, "Capture_img" );
\r
2840 strFullPath = Path.Combine( strFullPath, DateTime.Now.ToString( "yyyyMMddHHmmss" ) + ".png" );
\r
2841 SaveResultScreen( strFullPath );
\r
2846 private void Window_MouseUp( object sender, MouseEventArgs e )
\r
2851 private void Window_MouseDoubleClick( object sender, MouseEventArgs e) // #23510 2010.11.13 yyagi: to go full screen mode
\r
2853 if ( mb.Equals(MouseButtons.Left) && ConfigIni.bIsAllowedDoubleClickFullscreen ) // #26752 2011.11.27 yyagi
\r
2855 ConfigIni.bウィンドウモード = false;
\r
2856 this.t全画面_ウィンドウモード切り替え();
\r
2859 private void Window_ResizeEnd(object sender, EventArgs e) // #23510 2010.11.20 yyagi: to get resized window size
\r
2861 if ( ConfigIni.bウィンドウモード )
\r
2863 ConfigIni.n初期ウィンドウ開始位置X = base.Window.Location.X; // #30675 2013.02.04 ikanick add
\r
2864 ConfigIni.n初期ウィンドウ開始位置Y = base.Window.Location.Y; //
\r
2867 ConfigIni.nウインドウwidth = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Width : currentClientSize.Width; // #23510 2010.10.31 yyagi add
\r
2868 ConfigIni.nウインドウheight = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Height : currentClientSize.Height;
\r
2872 //internal sealed class GCBeep // GC発生の度にbeep
\r
2876 // Console.Beep();
\r
2877 // if ( !AppDomain.CurrentDomain.IsFinalizingForUnload()
\r
2878 // && !Environment.HasShutdownStarted )
\r
2885 //-----------------
\r
2887 //Stopwatch sw = new Stopwatch();
\r
2888 //List<int> swlist1, swlist2, swlist3, swlist4, swlist5;
\r