Jypeli  5
The simple game programming library
BindableWidget.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Reflection;
6 using Jypeli.GameObjects;
7 
8 namespace Jypeli.Widgets
9 {
13  public abstract class BindableWidget : Widget
14  {
15  private bool updateSet = false;
16 
21  public Meter Meter { get; private set; }
22 
26  public bool Bound { get; private set; }
27 
32  public BindableWidget( Animation animation )
33  : base( animation )
34  {
35  CreateInnerMeter();
36  }
37 
43  public BindableWidget( double width, double height )
44  : base( width, height )
45  {
46  CreateInnerMeter();
47  }
48 
55  public BindableWidget( double width, double height, Shape shape )
56  : base( width, height, shape )
57  {
58  CreateInnerMeter();
59  }
60 
65  public BindableWidget( ILayout layout )
66  : base( layout )
67  {
68  CreateInnerMeter();
69  }
70 
71  private void CreateInnerMeter()
72  {
73  Bound = false;
74  UnsetChangedEvent();
75  Meter = new DoubleMeter( 0, 0, 100 );
76  SetChangedEvent();
77  Game.AssertInitialized( UpdateValue );
78  }
79 
83  protected void SetChangedEvent()
84  {
85  if ( updateSet ) return;
86 
87  if ( Meter is IntMeter ) ( (IntMeter)Meter ).Changed += UpdateIntValue;
88  else if ( Meter is DoubleMeter ) ( (DoubleMeter)Meter ).Changed += UpdateDoubleValue;
89  else throw new InvalidOperationException( "Meter is of unknown type!" );
90 
91  updateSet = true;
92  }
93 
99  protected void UnsetChangedEvent()
100  {
101  if ( !updateSet ) return;
102 
103  if ( Meter is IntMeter ) ( (IntMeter)Meter ).Changed -= UpdateIntValue;
104  else if ( Meter is DoubleMeter ) ( (DoubleMeter)Meter ).Changed -= UpdateDoubleValue;
105  else throw new InvalidOperationException( "Meter is of unknown type!" );
106 
107  updateSet = false;
108  }
109 
113  public virtual void BindTo( Meter meter )
114  {
115  UnsetChangedEvent();
116  Meter = meter;
117  Bound = true;
118  SetChangedEvent();
119  UpdateValue();
120  }
121 
125  public virtual void Unbind()
126  {
127  CreateInnerMeter();
128  }
129 
130  private void UpdateIntValue( int oldValue, int newValue )
131  {
132  UpdateValue();
133  }
134 
135  private void UpdateDoubleValue( double oldValue, double newValue )
136  {
137  UpdateValue();
138  }
139 
144  protected abstract void UpdateValue();
145  }
146 }
virtual void BindTo(Meter meter)
Asettaa kontrollin seuraamaan mittarin arvoa.
BindableWidget(Animation animation)
Alustaa widgetin.
Kuvio.
Definition: Shapes.cs:48
BindableWidget(double width, double height)
Alustaa widgetin.
Rajapinta asettelijalle. Asettelija asettelee widgetin lapsioliot siten, että ne mahtuvat widgetin si...
Definition: ILayout.cs:83
Widget, joka voidaan asettaa näyttämään halutun mittarin arvoa.
void SetChangedEvent()
Asettaa tapahtuman, joka reagoi Meter.Value muutokseen kutsumalla UpdateValue-metodia.
Käyttöliittymän komponentti.
Definition: Appearance.cs:9
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:515
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:387
void UnsetChangedEvent()
Poistaa käytöstä tapahtuman, joka reagoi Meter.Value muutokseen kutsumalla UpdateValue-metodia. Käytä tätä, kun haluat asettaa mittarin arvon kontrollin sisällä. Älä unohda kutsua SetChangedEvent muutoksen jälkeen!
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
Definition: Animation.cs:56
virtual void Unbind()
Lopettaa mittarin arvon seuraamisen.
BindableWidget(ILayout layout)
Alustaa widgetin.
static void AssertInitialized(Action actionMethod)
Suorittaa aliohjelman kun peli on varmasti alustettu.
Definition: Game.cs:630
Mittari, joka mittaa erityyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:60
BindableWidget(double width, double height, Shape shape)
Alustaa widgetin.