31 using System.Collections.Generic;
32 using System.ComponentModel;
60 private static Dictionary<Action, Timer> limiters =
new Dictionary<Action, Timer>();
62 private bool _enabled =
false;
64 private TimeSpan timeToTrigger = TimeSpan.MaxValue;
65 private TimeSpan trigInterval =
new TimeSpan( 0, 0, 1 );
66 private TimeSpan savedTrigger = TimeSpan.Zero;
68 private TimeSpan timeToCount = TimeSpan.MaxValue;
69 private TimeSpan countInterval = TimeSpan.FromMilliseconds( 10 );
70 private TimeSpan savedCount = TimeSpan.Zero;
79 get {
return _enabled; }
82 if ( value == _enabled )
return;
100 get {
return trigInterval.TotalSeconds; }
103 if ( value <= 0 )
throw new ArgumentException(
"Interval cannot be zero or negative!" );
104 trigInterval = TimeSpan.FromSeconds( value );
106 timeToTrigger = trigInterval;
151 get {
return Times.MinValue == 0; }
154 Times.MinValue = value ? 0 : 1;
162 public object Tag {
get;
set; }
166 #region Public methods 186 public static void SingleShot(
double seconds, Action onTimeout )
200 public static void Limit( Action action,
double seconds )
202 Timer limiter = limiters.ContainsKey( action ) ? limiters[action] : null;
204 if ( limiter == null )
207 limiters.
Add( action, limiter );
223 timeToTrigger = trigInterval;
224 timeToCount = countInterval;
236 timeToTrigger = trigInterval - savedTrigger;
237 timeToCount = countInterval - savedCount;
247 savedTrigger = trigInterval - timeToTrigger;
248 savedCount = countInterval - timeToCount;
258 savedTrigger = TimeSpan.Zero;
259 savedCount = TimeSpan.Zero;
272 timeToTrigger = trigInterval;
275 private void LimitTimes(
int numTimes )
278 Times.DefaultValue = numTimes;
279 Times.MaxValue = numTimes;
280 Times.Value = numTimes;
286 internal static void ClearAll()
291 private static void UpdateTimer(
Timer timer, TimeSpan dt )
296 timer.timeToCount -= dt;
298 while ( timer.timeToCount.TotalSeconds <= 0 )
301 timer.timeToCount += timer.countInterval;
302 timer.
SecondCounter.Value += timer.countInterval.TotalSeconds;
307 timer.timeToTrigger -= dt;
309 while ( timer.timeToTrigger.TotalSeconds <= 0 )
312 timer.timeToTrigger += timer.trigInterval;
316 if ( --timer.
Times.Value <= 0 )
329 internal static void UpdateAll(
Time time )
335 internal static void UpdateAll(
Time time, Predicate<Timer> isUpdated )
339 foreach ( var timer
in timers )
341 if ( isUpdated( timer ) )
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
void Start(int times)
Käynnistää ajastimen, rajoittaa suorituskerrat.
IntMeter Times
Määrää, kuinka monta kertaa tapahtuma suoritetaan. Kun tapahtumaa on suoritettu tarpeeksi, Enabled saa automaattisesti arvon false, jolloin ajastin pysähtyy. Kun laskuri nollataan, myös Times palautuu oletusarvoonsa. Huomaa, että TimesLimited tulee olla true, että arvo otetaan huomioon.
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Action Timeout
Tapahtuu väliajoin.
void Update(Time time)
Lisää ja poistaa jonossa olevat elementit sekä kutsuu niiden Update-metodia.
double CurrentTime
Menossa oleva hetki nollasta väliaikaan (Interval).
DoubleMeter SecondCounter
Ajastimen käynnistysaika.
void ForEach(Action< T > action)
Suorittaa annetun toimenpiteen kaikille (nykyisille) listan alkioille.
void Pause()
Pysäyttää ajastimen tallentaen sen tilan.
void Reset()
Nollaa ajastimen tilan. Myös suorituskerrat nollataan.
Timer()
Alustaa uuden ajastinluokan.
bool Enabled
Ajastin päällä/pois päältä.
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
static void SingleShot(double seconds, Action onTimeout)
Kutsuu aliohjelmaa onTimeout annetun ajan kuluttua. Ajastin luodaan automaattisesti.
object Tag
Vapaasti asetettava muuttuja. Arvo ei muutu, jos sitä ei muuteta.
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
double SecondCounterStep
Kuinka monta sekuntia sekuntilaskuri laskee yhden sekunnin aikana. Oletus on 1. Arvolla 2 laskuri las...
bool TimesLimited
Ajastimen suorituskertojen rajoitus päälle/pois.
Synkroninen lista, eli lista joka päivittyy vasta kun sen Update-metodia kutsutaan. Jos listalle lisätään IUpdatable-rajapinnan toteuttavia olioita, kutsutaan myös niiden Update-metodeja samalla.
void Start()
Käynnistää ajastimen.
bool IgnorePause
Ajastin ei pysähdy vaikka peli pysäytettäisiin.
static void Limit(Action action, double seconds)
Rajoittaa toimintaa niin, että se voidaan suorittaa vain tietyin väliajoin. Huom. älä käytä delegaatt...