Jypeli  5
The simple game programming library
ProgressBar.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 Microsoft.Xna.Framework;
6 
7 namespace Jypeli.Widgets
8 {
12  public class ProgressBar : BindableWidget
13  {
14  private double h = -1;
15  private double w = -1;
16 
17  private static readonly Vector[] barVertices = new Vector[]
18  {
19  new Vector(-0.5, 0),
20  new Vector(0.5, 0),
21  new Vector(0.5, 1.0),
22  new Vector(-0.5, 1.0)
23  };
24 
25  private static readonly IndexTriangle[] barIndices = new IndexTriangle[]
26  {
27  new IndexTriangle(0, 3, 2),
28  new IndexTriangle(0, 2, 1)
29  };
30 
31  private static readonly Vector[] borderVertices = new Vector[]
32  {
33  new Vector(-0.5, 0.5),
34  new Vector(-0.5, -0.5),
35  new Vector(0.5, -0.5),
36  new Vector(0.5, 0.5),
37  };
38 
39  private static readonly ShapeCache shapeCache = new ShapeCache( barVertices, barIndices );
40 
45  public Image BarImage { get; set; }
46 
50  public Color BarColor { get; set; }
51 
57  public ProgressBar( double width, double height )
58  : base( width, height )
59  {
61  BarColor = Color.Red;
62  BarImage = null;
63  }
64 
71  public ProgressBar(double width, double height, Meter meter)
72  : this(width, height)
73  {
74  BindTo(meter);
75  }
76 
77  Matrix imgFull;
78  Matrix imgPart;
79  Matrix colorPart;
80 
81  protected override void UpdateValue()
82  {
83  double barLength = Size.X * Meter.RelativeValue;
84 
85  imgPart =
86  Matrix.CreateScale( (float)barLength, (float)Size.Y, 1f )
87  * Matrix.CreateTranslation( (float)( barLength / 2 ), 0, 0 )
88  * Matrix.CreateTranslation( (float)( -Width / 2 ), 0, 0 )
89  * Matrix.CreateRotationZ( (float)( Angle ).Radians )
90  * Matrix.CreateTranslation( (float)Position.X, (float)Position.Y, 0.0f );
91 
92  imgFull =
93  Matrix.CreateScale( (float)Size.X, (float)Size.Y, 1f )
94  * Matrix.CreateRotationZ( (float)( Angle ).Radians )
95  * Matrix.CreateTranslation( (float)Position.X, (float)Position.Y, 0.0f );
96 
97  colorPart =
98  Matrix.CreateScale( (float)barLength, (float)Size.Y, 1f )
99  * Matrix.CreateTranslation( (float)( barLength / 2 ), 0, 0 )
100  * Matrix.CreateTranslation( (float)( -Width / 2 ), (float)( -Height / 2 ), 0 )
101  * Matrix.CreateRotationZ( (float)( Angle ).Radians )
102  * Matrix.CreateTranslation( (float)Position.X, (float)Position.Y, 0.0f );
103  }
104 
105  protected override void Draw( Matrix parentTransformation, Matrix transformation )
106  {
107  // TODO: Optimization?
108  UpdateValue();
109 
110  if ( BarImage != null )
111  {
112  Matrix imp = imgPart * parentTransformation;
113  Matrix imf = imgFull * parentTransformation;
114 
116  Renderer.DrawImage( BarImage, ref imf, TextureWrapSize );
118  }
119  else
120  {
121  Matrix m = colorPart * parentTransformation;
122  Renderer.DrawFilledShape( shapeCache, ref m, BarColor );
123  }
124 
125  // The border that is drawn by base class gets obscured by the bar.
126  // Let's draw it again.
127  Renderer.DrawPolygon( borderVertices, ref transformation, BorderColor );
128 
129  base.Draw( parentTransformation, transformation );
130  }
131  }
132 }
override void Draw(Matrix parentTransformation, Matrix transformation)
Definition: ProgressBar.cs:105
Kuvio.
Definition: Shapes.cs:48
static readonly Color Red
Punainen.
Definition: Color.cs:804
static void DrawImage(Image texture, ref Matrix matrix, Vector wrapSize)
Definition: Renderer.cs:126
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
static readonly Rectangle Rectangle
Suorakulmio.
Definition: Shapes.cs:72
Widget, joka voidaan asettaa näyttämään halutun mittarin arvoa.
Palkki, jolla voidaan ilmaista mittarin arvoa graafisesti.
Definition: ProgressBar.cs:12
Kuva.
Definition: Image.cs:24
ProgressBar(double width, double height, Meter meter)
Palkin rakentaja. Sitoo palkin arvon mittarin arvoon.
Definition: ProgressBar.cs:71
static void EndDrawingInsideShape()
Definition: Renderer.cs:257
Sisältää valmiiksi lasketut kolmiot, joiden avulla piirtäminen on suoraviivaista. ...
Definition: Shapes.cs:577
static readonly Color Transparent
Läpinäkyvä väri.
Definition: Color.cs:869
ProgressBar(double width, double height)
Palkin rakentaja.
Definition: ProgressBar.cs:57
override void UpdateValue()
Kutsutaan automaattisesti, kun mittarin arvo on muuttunut. Ylikirjoita tämä koodilla, joka muuttaa widgetin ulkonäköä asianmukaisesti.
Definition: ProgressBar.cs:81
Väri.
Definition: Color.cs:13
Luokka, joka sisältää metodeita kuvioiden ja tekstuurien piirtämiseen 2D-tasossa. ...
Definition: Renderer.cs:51
static void DrawPolygon(Vector[] vertices, ref Matrix matrix, Color color)
Definition: Renderer.cs:389
2D-vektori.
Definition: Vector.cs:56
Muotojen määrityksessä käytettävä kolmio.
Definition: Shapes.cs:547
Mittari, joka mittaa erityyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:60
static void BeginDrawingInsideShape(Shape shape, ref Matrix transformation)
Makes all the subsequent draw calls until EndDrawingInsideShape limit the drawing inside shape (trans...
Definition: Renderer.cs:239