source: 2012/23/RamiP/YAG2DSSBase/YAG2DSS/YAG2DSS/GUI/AUIButton.cs @ 2778

Revision 2778, 14.0 KB checked in by ramipasa, 9 years ago (diff)

korjauksia

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Microsoft.Xna.Framework;
5using Microsoft.Xna.Framework.Audio;
6using Microsoft.Xna.Framework.Content;
7using Microsoft.Xna.Framework.GamerServices;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Microsoft.Xna.Framework.Net;
12using Microsoft.Xna.Framework.Storage;
13
14namespace ALTK.GUI
15{
16    public class AUIButton : DrawableGameComponent
17    {
18        TimeSpan elapsedTime = TimeSpan.Zero;
19        TimeSpan time = TimeSpan.FromMilliseconds(30);
20
21        public bool AdaptiveSize = true;
22
23        ContentManager content;
24        SpriteBatch spriteBatch;
25        SpriteFont spriteFont;
26
27        public int Width = 200;
28        public int Height = 30;
29        public int TextXAdd = 0;
30        public int TextYAdd = 0;
31
32        public string AlignX;
33        public string AlignY;
34
35        public string FontPath = "aMainFont";
36
37        public Texture2D IdleTexture;
38        public Texture2D HoverTexture;
39
40        //bool drawIdleTexture = true;
41        //bool drawHoverTexture = false;
42
43        public float AlphaRate = 0.02f;
44        float idleTextureAlpha = 1.0f;
45        float hoverTextureAlpha = 0.0f;
46
47        public bool AnimationMode;
48        //bool animationFinished;
49        bool isAnimEnterDirection;
50
51        //public double Width;
52        //public double Height;
53
54        public float PositionX = 0.0F;
55        public float PositionY = 0.0F;
56
57        public string ButtonText = "";
58        public Color TextColor = Color.Red;
59        public Color TextColorPressed = Color.Green;
60        public Color TextColorCurrent = Color.Red;
61
62        public string Action;
63        public string ClassName;
64
65        public bool Locked = false;
66
67        public int TextPosXAdd;
68
69        public bool isVisible = true;
70        public bool isAnimated = true;
71
72        /// <summary>
73        /// Checks whether the button has been pressed. Change to false after checking and performing the wanted actions.
74        /// </summary>
75        public bool NeedsUpdating = false;
76        bool Pressed;
77
78        public AUIButton(Game game)
79            : base(game)
80        {
81            content = new ContentManager(game.Services);
82        }
83
84        public override void Initialize()
85        {
86            base.Initialize();
87            spriteBatch = new SpriteBatch(GraphicsDevice);
88
89            UpdateTextPosition();
90            //spriteFont = ALTK.Loader.loadFont(FontPath);
91        }
92
93        protected override void LoadContent()
94        {
95            spriteBatch = new SpriteBatch(GraphicsDevice);
96
97            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
98        }
99
100        public void UpdateTextPosition()
101        {
102            if (AdaptiveSize)
103            {
104                Vector2 textSize = spriteFont.MeasureString(ButtonText);
105                if (textSize.X < Width)
106                {
107                    TextXAdd = Convert.ToInt32((Width - textSize.X) / 2);
108                    //TextXAdd = Convert.ToInt32((textSize.X - Width) / -2);
109                }
110                else if (textSize.X > Width)
111                {
112                    TextXAdd = Convert.ToInt32((textSize.X - Width) / -2);
113                }
114
115                if (textSize.Y < Height)
116                {
117                    TextYAdd = Convert.ToInt32((Height - textSize.Y) / 2);
118                }
119                else if (textSize.Y > Height)
120                {
121                    TextYAdd = Convert.ToInt32((textSize.Y - Height) / -2);
122                }
123            }
124        }
125
126        public void UpdateFont(string Modpath)
127        {
128            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
129        }
130
131        public bool CursoronButton = false;
132        public override void Update(GameTime gameTime)
133        {
134            int mpX = Cursor.PosX;
135            int mpY = Cursor.PosY;
136
137            if (Locked == false)
138            {
139                    if (mpX > this.PositionX &&
140                    mpX < this.PositionX + this.Width &&
141                    mpY > this.PositionY &&
142                    mpY < this.PositionY + this.Height &&
143                    Locked == false)
144                    {
145                        if (CursoronButton == false && isAnimated)
146                        {
147                            // enter animation mode
148                            isAnimEnterDirection = true;
149                            AnimationMode = true;
150                            idleTextureAlpha = 0.5f;
151                            hoverTextureAlpha = 0.75f;
152                        }
153                        CursoronButton = true;
154                    }
155                    else
156                    {
157                        if (CursoronButton == true && isAnimated)
158                        {
159                            AnimationMode = true;
160                            isAnimEnterDirection = false;
161                            idleTextureAlpha = 0.75f;
162                            hoverTextureAlpha = 0.5f;
163                        }
164                        CursoronButton = false;
165                    }
166                //}
167
168                if (CursoronButton == true)
169                {
170                    this.TextColorCurrent = TextColorPressed;
171                    if (Cursor.leftPressed)
172                    {
173                        Pressed = true;
174                    }
175                    else
176                    {
177                        if (Pressed == true)
178                        {
179                            Pressed = false;
180                            NeedsUpdating = true;
181                        }
182                    }
183                }
184                else
185                {
186                    this.TextColorCurrent = TextColor;
187                    Pressed = false;
188                    CursoronButton = false;
189                }
190
191                ProcessAnims();
192            }
193        }
194
195        public void Update(GameTime gameTime, int baseX, int baseY)
196        {
197            int mpX = Cursor.SecPosX;
198            int mpY = Cursor.SecPosY;
199
200            if (Locked == false)
201            {
202                if (mpX > this.PositionX + baseX &&
203                mpX < this.PositionX + baseX + this.Width &&
204                mpY > this.PositionY + baseY + this.Height / 2 &&
205                mpY < this.PositionY + baseY + this.Height * 1.5 &&
206                Locked == false)
207                {
208                    if (CursoronButton == false && isAnimated)
209                    {
210                        // enter animation mode
211                        isAnimEnterDirection = true;
212                        AnimationMode = true;
213                        idleTextureAlpha = 0.5f;
214                        hoverTextureAlpha = 0.75f;
215                    }
216                    CursoronButton = true;
217                }
218                else
219                {
220                    if (CursoronButton == true && isAnimated)
221                    {
222                        AnimationMode = true;
223                        isAnimEnterDirection = false;
224                        idleTextureAlpha = 0.75f;
225                        hoverTextureAlpha = 0.5f;
226                    }
227                    CursoronButton = false;
228                }
229                //}
230
231                if (CursoronButton == true)
232                {
233                    this.TextColorCurrent = TextColorPressed;
234                    if (Cursor.SecLeftPressed)
235                    {
236                        Pressed = true;
237                    }
238                    else
239                    {
240                        if (Pressed == true)
241                        {
242                            Pressed = false;
243                            NeedsUpdating = true;
244                        }
245                    }
246                }
247                else
248                {
249                    this.TextColorCurrent = TextColor;
250                    Pressed = false;
251                    CursoronButton = false;
252                }
253
254                ProcessAnims();
255            }
256        }
257
258        private void ProcessAnims()
259        {
260            if (AnimationMode && isAnimated)
261            {
262                bool idleTextureReady = false;
263                bool hoverTextureReady = false;
264
265                if (isAnimEnterDirection)
266                {
267                    idleTextureAlpha = idleTextureAlpha - AlphaRate;
268                    if (idleTextureAlpha < 0.0f)
269                    {
270                        idleTextureAlpha = 0.0f;
271                        idleTextureReady = true;
272                    }
273
274                    hoverTextureAlpha = hoverTextureAlpha + AlphaRate;
275                    if (hoverTextureAlpha >= 1.0f)
276                    {
277                        hoverTextureAlpha = 1.0f;
278                        hoverTextureReady = true;
279                    }
280
281                    if (idleTextureReady && hoverTextureReady)
282                        AnimationMode = false;
283                }
284                else
285                {
286                    hoverTextureAlpha = hoverTextureAlpha - AlphaRate;
287                    if (hoverTextureAlpha < 0.0f)
288                    {
289                        hoverTextureAlpha = 0.0f;
290                        hoverTextureReady = true;
291                    }
292
293                    idleTextureAlpha = idleTextureAlpha + AlphaRate;
294                    if (idleTextureAlpha >= 1.0f)
295                    {
296                        idleTextureAlpha = 1.0f;
297                        idleTextureReady = true;
298                    }
299
300                    if (idleTextureReady && hoverTextureReady)
301                        AnimationMode = false;
302                }
303            }
304        }
305
306        public override void Draw(GameTime gameTime)
307        {
308            if (isVisible)
309            {
310                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);
311                if (IdleTexture != null)
312                {
313                    if (HoverTexture == null)
314                    {
315                        spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
316                    }
317                    else
318                    {
319                        if (CursoronButton == true)
320                        {
321                            spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
322                            spriteBatch.Draw(HoverTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
323                        }
324                        else
325                        {
326                            spriteBatch.Draw(HoverTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
327                            spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
328                        }
329                    }
330                }
331                spriteBatch.End();
332
333                spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
334                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + 1 + TextXAdd, PositionY + 1 + TextYAdd), Color.Black); // varjo
335                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + TextXAdd, PositionY + TextYAdd), TextColorCurrent);
336                spriteBatch.End();
337            }
338        }
339
340        public void Draw(GameTime gameTime, int baseX, int baseY)
341        {
342            if (isVisible)
343            {
344                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);
345                if (IdleTexture != null)
346                {
347                    int xPos = Convert.ToInt32(PositionX + baseX) - 10;
348                    int yPos = Convert.ToInt32(PositionY + baseY);
349
350                    Console.WriteLine("xPos: " + xPos + "; yPos: " + yPos);
351
352                    if (HoverTexture == null)
353                    {
354                        spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX + baseX), Convert.ToInt32(PositionY + baseY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
355                    }
356                    else
357                    {
358                        if (CursoronButton == true)
359                        {
360                            spriteBatch.Draw(IdleTexture, new Rectangle(xPos, yPos, Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
361                            spriteBatch.Draw(HoverTexture, new Rectangle(xPos, yPos, Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
362                        }
363                        else
364                        {
365                            spriteBatch.Draw(HoverTexture, new Rectangle(xPos, yPos, Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
366                            spriteBatch.Draw(IdleTexture, new Rectangle(xPos, yPos, Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
367                        }
368                    }
369                }
370                spriteBatch.End();
371
372                spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
373                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + 1 + TextXAdd + baseX, PositionY + 1 + TextYAdd + baseY), Color.Black); // varjo
374                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + TextXAdd + baseX, PositionY + TextYAdd + baseY), TextColorCurrent);
375                spriteBatch.End();
376            }
377        }
378    }
379}
Note: See TracBrowser for help on using the repository browser.