OSDN Git Service

#24820 選択画面などで、キーリピートがきくよう修正。(CCounterをDTXManiaのFDKのものにrevertしただけ)
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 20 Dec 2012 16:58:13 +0000 (16:58 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 20 Dec 2012 16:58:13 +0000 (16:58 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/branches/120724(DTXMania%20with%20%2324820)@465 16f42ceb-6dc6-49c8-ba94-f2d53467949d

FDK17プロジェクト/コード/00.共通/CCounter.cs

index f1d3015..7351aa2 100644 (file)
@@ -4,19 +4,22 @@ using System.Text;
 \r
 namespace FDK\r
 {\r
-       public class CCounter : IDisposable\r
+       /// <summary>\r
+       /// 一定間隔で単純増加する整数(カウント値)を扱う。\r
+       /// </summary>\r
+       public class CCounter\r
        {\r
-               // プロパティ(1) 値系\r
+               // 値プロパティ\r
 \r
                public int n開始値\r
                {\r
                        get;\r
-                       protected set;\r
+                       private set;\r
                }\r
                public int n終了値\r
                {\r
                        get;\r
-                       protected set;\r
+                       private set;\r
                }\r
                public int n現在の値\r
                {\r
@@ -30,7 +33,7 @@ namespace FDK
                }\r
 \r
 \r
-               // プロパティ(2) 状態系\r
+               // 状態プロパティ\r
 \r
                public bool b進行中\r
                {\r
@@ -52,96 +55,90 @@ namespace FDK
 \r
                // コンストラクタ\r
 \r
-               /// <summary>\r
-               /// <para>生成のみ行い、開始はしない。</para>\r
-               /// </summary>\r
                public CCounter()\r
                {\r
-                       this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
+                       this.timer = null;\r
                        this.n開始値 = 0;\r
                        this.n終了値 = 0;\r
                        this.n間隔ms = 0;\r
                        this.n現在の値 = 0;\r
                        this.n現在の経過時間ms = CTimer.n未使用;\r
-                       this.m一定間隔処理 = null;\r
-               }\r
-\r
-               /// <summary>\r
-               /// <para>生成と同時に開始する。</para>\r
-               /// </summary>\r
-               public CCounter( int n最初のカウント値, int n最後のカウント値, int nカウント値を1増加させるのにかける時間ms )\r
-                       : this()\r
-               {\r
-                       this.t開始( n最初のカウント値, n最後のカウント値, nカウント値を1増加させるのにかける時間ms );\r
                }\r
 \r
-               #region [ DTXMania用の変換 ]\r
+               /// <summary>生成と同時に開始する。</summary>\r
                public CCounter( int n開始値, int n終了値, int n間隔ms, CTimer timer )\r
                        : this()\r
                {\r
-//                     this.timer = timer;\r
-                       this.t開始( n開始値, n終了値, n間隔ms );\r
-               }\r
-               public void t開始( int n最初のカウント値, int n最後のカウント値, int nカウント値を1増加させるのにかける時間ms, CTimer timer )\r
-               {\r
-//                     this.timer = timer;\r
-                       this.t開始( n最初のカウント値, n最後のカウント値, nカウント値を1増加させるのにかける時間ms );\r
+                       this.t開始( n開始値, n終了値, n間隔ms, timer );\r
                }\r
-               #endregion\r
+\r
 \r
                // 状態操作メソッド\r
 \r
                /// <summary>\r
-               /// <para>カウントを開始する。</para>\r
+               /// カウントを開始する。\r
                /// </summary>\r
-               public void t開始( int n最初のカウント値, int n最後のカウント値, int nカウント値を1増加させるのにかける時間ms )\r
+               /// <param name="n開始値">最初のカウント値。</param>\r
+               /// <param name="n終了値">最後のカウント値。</param>\r
+               /// <param name="n間隔ms">カウント値を1増加させるのにかける時間(ミリ秒単位)。</param>\r
+               /// <param name="timer">カウントに使用するタイマ。</param>\r
+               public void t開始( int n開始値, int n終了値, int n間隔ms, CTimer timer )\r
                {\r
-                       this.timer.tリセット();\r
-                       this.n開始値 = n最初のカウント値;\r
-                       this.n終了値 = n最後のカウント値;\r
-                       this.n間隔ms = nカウント値を1増加させるのにかける時間ms;\r
-                       this.n現在の経過時間ms = this.timer.n現在時刻ms;\r
-                       this.n現在の値 = n最初のカウント値;\r
-                       this.m一定間隔処理 = new C一定間隔処理();\r
+                       this.n開始値 = n開始値;\r
+                       this.n終了値 = n終了値;\r
+                       this.n間隔ms = n間隔ms;\r
+                       this.timer = timer;\r
+                       this.n現在の経過時間ms = this.timer.n現在時刻;\r
+                       this.n現在の値 = n開始値;\r
                }\r
 \r
                /// <summary>\r
-               /// <para>前回の t進行() の呼び出しからの経過時間をもとに、必要なだけカウント値を増加させる。</para>\r
-               /// <para>カウント値が終了値に達している場合は、それ以上増加しない(終了値を維持する)。</para>\r
-               /// <para>戻り値として自分自身を返す。</para>\r
+               /// 前回の t進行() の呼び出しからの経過時間をもとに、必要なだけカウント値を増加させる。\r
+               /// カウント値が終了値に達している場合は、それ以上増加しない(終了値を維持する)。\r
                /// </summary>\r
-               public CCounter t進行()\r
+               public void t進行()\r
                {\r
-                       if ( this.m一定間隔処理 != null )\r
+                       if ( ( this.timer != null ) && ( this.n現在の経過時間ms != CTimer.n未使用 ) )\r
                        {\r
-                               this.m一定間隔処理.t進行( this.n間隔ms, () =>\r
+                               long num = this.timer.n現在時刻;\r
+                               if ( num < this.n現在の経過時間ms )\r
+                                       this.n現在の経過時間ms = num;\r
+\r
+                               while ( ( num - this.n現在の経過時間ms ) >= this.n間隔ms )\r
                                {\r
                                        if ( ++this.n現在の値 > this.n終了値 )\r
                                                this.n現在の値 = this.n終了値;\r
-                               } );\r
-                       }\r
 \r
-                       return this;\r
+                                       this.n現在の経過時間ms += this.n間隔ms;\r
+                               }\r
+                       }\r
                }\r
 \r
                /// <summary>\r
-               /// <para>前回の t進行Loop() の呼び出しからの経過時間をもとに、必要なだけカウント値を増加させる。</para>\r
-               /// <para>カウント値が終了値に達している場合は、次の増加タイミングで開始値に戻る(値がループする)。</para>\r
-               /// <para>戻り値として自分自身を返す。</para>\r
+               /// 前回の t進行Loop() の呼び出しからの経過時間をもとに、必要なだけカウント値を増加させる。\r
+               /// カウント値が終了値に達している場合は、次の増加タイミングで開始値に戻る(値がループする)。\r
                /// </summary>\r
-               public CCounter t進行Loop()\r
+               public void t進行Loop()\r
                {\r
-                       this.m一定間隔処理.t進行( this.n間隔ms, () => {\r
-                               if( ++this.n現在の値 > this.n終了値 )\r
-                                       this.n現在の値 = this.n開始値;\r
-                       } );\r
+                       if ( ( this.timer != null ) && ( this.n現在の経過時間ms != CTimer.n未使用 ) )\r
+                       {\r
+                               long num = this.timer.n現在時刻;\r
+                               if ( num < this.n現在の経過時間ms )\r
+                                       this.n現在の経過時間ms = num;\r
 \r
-                       return this;\r
+                               while ( ( num - this.n現在の経過時間ms ) >= this.n間隔ms )\r
+                               {\r
+                                       if ( ++this.n現在の値 > this.n終了値 )\r
+                                               this.n現在の値 = this.n開始値;\r
+\r
+                                       this.n現在の経過時間ms += this.n間隔ms;\r
+                               }\r
+                       }\r
                }\r
 \r
                /// <summary>\r
-               /// <para>カウントを停止する。</para>\r
-               /// <para>これ以降に t進行() や t進行Loop() を呼び出しても何も処理されない。</para>\r
+               /// カウントを停止する。\r
+               /// これ以降に t進行() や t進行Loop() を呼び出しても何も処理されない。\r
                /// </summary>\r
                public void t停止()\r
                {\r
@@ -151,16 +148,6 @@ namespace FDK
 \r
                // その他\r
 \r
-               #region [ IDisposable 実装 ]\r
-               //-----------------\r
-               public void Dispose()\r
-               {\r
-                       C共通.tDisposeする( ref this.timer );\r
-                       C共通.tDisposeする( ref this.m一定間隔処理 );\r
-               }\r
-               //-----------------\r
-               #endregion\r
-\r
                #region [ 応用:キーの反復入力をエミュレーションする ]\r
                //-----------------\r
 \r
@@ -177,33 +164,33 @@ namespace FDK
                        const int n2回目 = 1;\r
                        const int n3回目以降 = 2;\r
 \r
-                       if( bキー押下 )\r
+                       if ( bキー押下 )\r
                        {\r
-                               switch( this.n現在の値 )\r
+                               switch ( this.n現在の値 )\r
                                {\r
                                        case n1回目:\r
 \r
                                                tキー処理();\r
                                                this.n現在の値 = n2回目;\r
-                                               this.n現在の経過時間ms = this.timer.n現在時刻ms;\r
+                                               this.n現在の経過時間ms = this.timer.n現在時刻;\r
                                                return;\r
 \r
                                        case n2回目:\r
 \r
-                                               if( ( this.timer.n現在時刻ms - this.n現在の経過時間ms ) > 200 )\r
+                                               if ( ( this.timer.n現在時刻 - this.n現在の経過時間ms ) > 200 )\r
                                                {\r
                                                        tキー処理();\r
-                                                       this.n現在の経過時間ms = this.timer.n現在時刻ms;\r
+                                                       this.n現在の経過時間ms = this.timer.n現在時刻;\r
                                                        this.n現在の値 = n3回目以降;\r
                                                }\r
                                                return;\r
 \r
                                        case n3回目以降:\r
 \r
-                                               if( ( this.timer.n現在時刻ms - this.n現在の経過時間ms ) > 30 )\r
+                                               if ( ( this.timer.n現在時刻 - this.n現在の経過時間ms ) > 30 )\r
                                                {\r
                                                        tキー処理();\r
-                                                       this.n現在の経過時間ms = this.timer.n現在時刻ms;\r
+                                                       this.n現在の経過時間ms = this.timer.n現在時刻;\r
                                                }\r
                                                return;\r
                                }\r
@@ -218,11 +205,10 @@ namespace FDK
                //-----------------\r
                #endregion\r
 \r
-               #region [ protected ]\r
+               #region [ private ]\r
                //-----------------\r
-               protected CTimer timer;\r
-               protected int n間隔ms;\r
-               protected C一定間隔処理 m一定間隔処理;\r
+               private CTimer timer;\r
+               private int n間隔ms;\r
                //-----------------\r
                #endregion\r
        }\r