Jypeli  5
The simple game programming library
MeterAddOperation.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 
6 namespace Jypeli
7 {
12  {
13  IntMeter meter;
14  Timer timer;
15  int dx;
16 
17  public bool Active
18  {
19  get { return timer.Enabled; }
20  }
21 
22  internal IntMeterAddOperation( IntMeter meter, int change, double seconds )
23  {
24  this.meter = meter;
25  this.dx = Math.Sign( change );
26  int times = (int)Math.Abs( change );
27 
28  timer = new Timer();
29  timer.Times.LowerLimit += OnFinished;
30  timer.Interval = Math.Abs( seconds / change );
31  timer.Timeout += Tick;
32  timer.Start( times );
33  }
34 
35  private void Tick()
36  {
37  meter.Value += dx;
38  }
39 
40  public void Stop()
41  {
42  timer.Stop();
43  if ( Stopped != null ) Stopped();
44  }
45 
46  public event Action Finished;
47  public event Action Stopped;
48 
49  private void OnFinished()
50  {
51  if ( Finished != null )
52  Finished();
53  }
54  }
55 
60  {
61  DoubleMeter meter;
62  Timer timer;
63  double dx;
64 
65  public bool Active
66  {
67  get { return timer.Enabled; }
68  }
69 
70  internal DoubleMeterAddOperation( DoubleMeter meter, double change, double seconds )
71  {
72  this.meter = meter;
73 
74  double dt = findDt( seconds );
75  this.dx = dt * change / seconds;
76  int times = (int)( seconds / dt );
77 
78  timer = new Timer();
79  timer.Times.LowerLimit += OnFinished;
80  timer.Interval = dt;
81  timer.Timeout += Tick;
82  timer.Start( times );
83  }
84 
85  private double findDt( double seconds )
86  {
87  double dt = seconds;
88  while ( dt > 0.05 ) dt /= 2;
89  return dt;
90  }
91 
92  private void Tick()
93  {
94  meter.Value += dx;
95  }
96 
97  public void Stop()
98  {
99  timer.Stop();
100  if ( Stopped != null ) Stopped();
101  }
102 
103  public event Action Finished;
104  public event Action Stopped;
105 
106  private void OnFinished()
107  {
108  if ( Finished != null )
109  Finished();
110  }
111  }
112 }
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Definition: Timer.cs:99
void Stop()
Pysäyttää tehtävän.
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.
Definition: Timer.cs:143
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Definition: Timer.cs:255
Action Timeout
Tapahtuu väliajoin.
Definition: Timer.cs:46
bool Enabled
Ajastin päällä/pois päältä.
Definition: Timer.cs:78
Käynnissä oleva tehtävä
Definition: Operation.cs:11
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:515
void Stop()
Pysäyttää tehtävän.
Tehtävä mittarin arvon kasvattamiselle.
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:387
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:39
Tehtävä mittarin arvon kasvattamiselle.
void Start()
Käynnistää ajastimen.
Definition: Timer.cs:220