source: 2013/30/MiskaK/MW2(My Warfare 2)/Paranneltu Jypeli/Widgets/BarGauge.cs @ 4507

Revision 4507, 6.0 KB checked in by anlakane, 6 years ago (diff)

Talletus.

Line 
1#region MIT License
2/*
3 * Copyright (c) 2009-2011 University of Jyväskylä, Department of Mathematical
4 * Information Technology.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#endregion
25
26/*
27 * Authors: Tero Jäntti, Tomi Karppinen, Janne Nikkanen.
28 */
29
30using System;
31using System.ComponentModel;
32using Microsoft.Xna.Framework;
33
34namespace Jypeli.Widgets
35{
36    /// <summary>
37    /// Palkki, jonka korkeutta voi säätää.
38    /// </summary>
39    [Obsolete("Use ProgressBar instead")]
40    public class BarGauge : Widget
41    {
42        /// <summary>
43        /// Mihin suuntaa liut piirretään
44        /// </summary>
45        public enum BarDirection
46        {
47            /// <summary>
48            /// Liuku liikuu pystysuuntaan ylös
49            /// </summary>
50            BarVerticalUp,
51            /// <summary>
52            /// Liuku liikkuu vaakasuuntaan oikealle
53            /// </summary>
54            BarHorizontalRight,
55            /// <summary>
56            /// Liuku liikuu pystysuuntaan alas
57            /// </summary>
58            BarVerticalDown,
59            /// <summary>
60            /// Liuku liikkuu vaakasuuntaan vasemmalle
61            /// </summary>
62            BarHorizontalLeft
63        };
64
65
66        private double h = -1;
67        private double w = -1;
68        private BarDirection direction = BarDirection.BarVerticalUp;
69
70        /// <summary>
71        /// Liun suunta pystyyn vai vaakaan ja mihin suuntaa.
72        /// Älä käytä yhdessä Anglen kanssa.
73        /// </summary>
74        public BarDirection Direction
75        {
76            get { return direction; }
77            set
78            {
79                direction = value;
80                if (h == -1 && w == -1) { h = Height; w = Width; };
81                switch (value)
82                {
83                    case BarDirection.BarVerticalUp:
84                        Angle = Angle.FromDegrees(0); 
85                        Height = h; Width = w;
86                        return;
87                    case BarDirection.BarVerticalDown: 
88                        Angle = Angle.FromDegrees(180); 
89                        Height = h; Width = w;
90                        return;
91                    case BarDirection.BarHorizontalLeft:
92                        Angle = Angle.FromDegrees(-90);
93                        Height = w; Width = h;
94                        return;
95                    case BarDirection.BarHorizontalRight:
96                        Angle = Angle.FromDegrees(90);
97                        Height = w; Width = h;
98                        return;
99                }
100
101            }
102        }
103
104        private static readonly Vector[] barVertices = new Vector[]
105        {
106            new Vector(-0.5, 0),
107            new Vector(0.5, 0),
108            new Vector(0.5, 1.0),
109            new Vector(-0.5, 1.0)
110        };
111
112        private static readonly IndexTriangle[] barIndices = new IndexTriangle[]
113        {
114            new IndexTriangle(0, 3, 2),
115            new IndexTriangle(0, 2, 1)
116        };
117
118        private static readonly ShapeCache shapeCache = new ShapeCache(barVertices, barIndices);
119
120        private static readonly DoubleMeter defaultMeter = new DoubleMeter( 0, 0, 100 );
121
122        private Meter boundMeter = defaultMeter;
123
124        /// <summary>
125        /// Palkin väri.
126        /// </summary>
127        public Color BarColor { get; set; }
128
129        /// <summary>
130        /// Palkin rakentaja.
131        /// </summary>
132        public BarGauge(double width, double height)
133            : base(width, height)
134        {
135            Color = Color.Transparent;
136            BarColor = Color.Red;
137        }
138
139        /// <summary>
140        /// Asettaa palkin näyttämään <c>meter</c>-olion arvoa.
141        /// Palkin maksimiarvoksi tulee olion <c>meter</c> maksimiarvo.
142        /// </summary>
143        public void BindTo(Meter meter)
144        {
145            boundMeter = meter;
146        }
147
148        protected override void Draw(Matrix parentTransformation, Matrix transformation)
149        {
150            double barLength = Size.Y * boundMeter.RelativeValue;
151            Matrix m =
152                Matrix.CreateScale((float)Size.X, (float)barLength, 1f)
153                * Matrix.CreateTranslation(0, (float)(-Height / 2), 0)
154                * Matrix.CreateRotationZ((float)(Angle).Radians)
155                * Matrix.CreateTranslation((float)Position.X, (float)Position.Y, 0.0f)
156                * parentTransformation;
157
158            Renderer.DrawFilledShape(shapeCache, ref m, BarColor);
159
160            Vector[] borderVertices = new Vector[]
161            {
162                new Vector(-0.5, 0.5),
163                new Vector(-0.5, -0.5),
164                new Vector(0.5, -0.5),
165                new Vector(0.5, 0.5),
166            };
167
168            // The border that is drawn by base class gets obscured by the bar.
169            // Let's draw it again.
170            Renderer.DrawPolygon(borderVertices, ref transformation, BorderColor);
171
172            base.Draw(parentTransformation, transformation);
173
174        }
175    }
176}
Note: See TracBrowser for help on using the repository browser.