1
0
mirror of synced 2024-12-01 02:27:21 +01:00
OpenTaiko/FDK19/コード/00.共通/CTimerBase.cs
2021-09-21 00:16:38 +02:00

180 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace FDK
{
/// <summary>
/// <para>タイマの抽象クラス。</para>
/// <para>このクラスを継承し、override したクラスを作成することで、任意のクロックを持つタイマを作成できる。</para>
/// </summary>
public abstract class CTimerBase : IDisposable
{
public const long n未使用 = -1;
// この2つを override する。
public abstract long nシステム時刻ms
{
get;
}
public double dbシステム時刻ms
{
get;
set;
}
public abstract void Dispose();
#region [ DTXMania用にmsのつかない宣言を追加 ]
public long nシステム時刻
{
get { return nシステム時刻ms; }
}
public long n現在時刻
{
get { return n現在時刻ms; }
set { n現在時刻ms = value; }
}
public long n前回リセットした時のシステム時刻
{
get { return n前回リセットした時のシステム時刻ms; }
}
//double
public double dbシステム時刻
{
get { return dbシステム時刻ms; }
}
public double db現在時刻
{
get { return db現在時刻ms; }
set { db現在時刻ms = value; }
}
public double db前回リセットした時のシステム時刻
{
get { return db前回リセットした時のシステム時刻ms; }
}
#endregion
public long n現在時刻ms
{
get
{
if( this.n停止数 > 0 )
return ( this.n一時停止システム時刻ms - this.n前回リセットした時のシステム時刻ms );
return ( this.n更新システム時刻ms - this.n前回リセットした時のシステム時刻ms );
}
set
{
if( this.n停止数 > 0 )
this.n前回リセットした時のシステム時刻ms = this.n一時停止システム時刻ms - value;
else
this.n前回リセットした時のシステム時刻ms = this.n更新システム時刻ms - value;
}
}
public long nリアルタイム現在時刻ms
{
get
{
if( this.n停止数 > 0 )
return ( this.n一時停止システム時刻ms - this.n前回リセットした時のシステム時刻ms );
return ( this.nシステム時刻ms - this.n前回リセットした時のシステム時刻ms );
}
}
public long n前回リセットした時のシステム時刻ms
{
get;
protected set;
}
public double db現在時刻ms
{
get
{
if( this.n停止数 > 0 )
return ( this.db一時停止システム時刻ms - this.db前回リセットした時のシステム時刻ms );
return ( this.db更新システム時刻ms - this.db前回リセットした時のシステム時刻ms );
}
set
{
if( this.n停止数 > 0 )
this.db前回リセットした時のシステム時刻ms = this.db一時停止システム時刻ms - value;
else
this.db前回リセットした時のシステム時刻ms = this.db更新システム時刻ms - value;
}
}
public double dbリアルタイム現在時刻ms
{
get
{
if( this.n停止数 > 0 )
return ( this.db一時停止システム時刻ms - this.db前回リセットした時のシステム時刻ms );
return ( this.dbシステム時刻ms - this.db前回リセットした時のシステム時刻ms );
}
}
public double db前回リセットした時のシステム時刻ms
{
get;
protected set;
}
public bool b停止していない
{
get
{
return ( this.n停止数 == 0 );
}
}
public void tリセット()
{
this.t更新();
this.n前回リセットした時のシステム時刻ms = this.n更新システム時刻ms;
this.n一時停止システム時刻ms = this.n更新システム時刻ms;
this.n停止数 = 0;
}
public void t一時停止()
{
if( this.n停止数 == 0 )
{
this.n一時停止システム時刻ms = this.n更新システム時刻ms;
this.db一時停止システム時刻ms = this.db更新システム時刻ms;
}
this.n停止数++;
}
public void t更新()
{
this.n更新システム時刻ms = this.nシステム時刻ms;
this.db更新システム時刻ms = this.dbシステム時刻ms;
}
public void t再開()
{
if( this.n停止数 > 0 )
{
this.n停止数--;
if( this.n停止数 == 0 )
{
this.t更新();
this.n前回リセットした時のシステム時刻ms += this.n更新システム時刻ms - this.n一時停止システム時刻ms;
this.db前回リセットした時のシステム時刻ms += this.db更新システム時刻ms - this.db一時停止システム時刻ms;
}
}
}
#region [ protected ]
//-----------------
protected long n一時停止システム時刻ms = 0;
protected long n更新システム時刻ms = 0;
protected double db一時停止システム時刻ms = 0;
protected double db更新システム時刻ms = 0;
protected int n停止数 = 0;
//-----------------
#endregion
}
}