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

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

Muutettu ALTK-logiikoita toimimaan Jypelin kanssa.

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                }
109                else if (textSize.X > Width)
110                {
111                    TextXAdd = Convert.ToInt32((textSize.X - Width) / -2);
112                }
113
114                if (textSize.Y < Height)
115                {
116                    TextYAdd = Convert.ToInt32((Height - textSize.Y) / 2);
117                }
118                else if (textSize.Y > Height)
119                {
120                    TextYAdd = Convert.ToInt32((textSize.Y - Height) / -2);
121                }
122            }
123        }
124
125        public void UpdateFont(string Modpath)
126        {
127            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
128        }
129
130        public bool CursoronButton = false;
131        public override void Update(GameTime gameTime)
132        {
133            int mpX = Cursor.PosX;
134            int mpY = Cursor.PosY;
135
136            if (Locked == false)
137            {
138                    if (mpX > this.PositionX &&
139                    mpX < this.PositionX + this.Width &&
140                    mpY > this.PositionY &&
141                    mpY < this.PositionY + this.Height &&
142                    Locked == false)
143                    {
144                        if (CursoronButton == false && isAnimated)
145                        {
146                            // enter animation mode
147                            isAnimEnterDirection = true;
148                            AnimationMode = true;
149                            idleTextureAlpha = 0.5f;
150                            hoverTextureAlpha = 0.75f;
151                        }
152                        CursoronButton = true;
153                    }
154                    else
155                    {
156                        if (CursoronButton == true && isAnimated)
157                        {
158                            AnimationMode = true;
159                            isAnimEnterDirection = false;
160                            idleTextureAlpha = 0.75f;
161                            hoverTextureAlpha = 0.5f;
162                        }
163                        CursoronButton = false;
164                    }
165                //}
166
167                if (CursoronButton == true)
168                {
169                    this.TextColorCurrent = TextColorPressed;
170                    if (Cursor.leftPressed)
171                    {
172                        Pressed = true;
173                    }
174                    else
175                    {
176                        if (Pressed == true)
177                        {
178                            Pressed = false;
179                            NeedsUpdating = true;
180                        }
181                    }
182                }
183                else
184                {
185                    this.TextColorCurrent = TextColor;
186                    Pressed = false;
187                    CursoronButton = false;
188                }
189
190                ProcessAnims();
191            }
192        }
193
194        public void Update(GameTime gameTime, int baseX, int baseY)
195        {
196            int mpX = Cursor.SecPosX;
197            int mpY = Cursor.SecPosY;
198
199            if (Locked == false)
200            {
201                if (mpX > this.PositionX + baseX &&
202                mpX < this.PositionX + baseX + this.Width &&
203                mpY > this.PositionY + baseY &&
204                mpY < this.PositionY + baseY + this.Height &&
205                Locked == false)
206                {
207                    if (CursoronButton == false && isAnimated)
208                    {
209                        // enter animation mode
210                        isAnimEnterDirection = true;
211                        AnimationMode = true;
212                        idleTextureAlpha = 0.5f;
213                        hoverTextureAlpha = 0.75f;
214                    }
215                    CursoronButton = true;
216                }
217                else
218                {
219                    if (CursoronButton == true && isAnimated)
220                    {
221                        AnimationMode = true;
222                        isAnimEnterDirection = false;
223                        idleTextureAlpha = 0.75f;
224                        hoverTextureAlpha = 0.5f;
225                    }
226                    CursoronButton = false;
227                }
228                //}
229
230                if (CursoronButton == true)
231                {
232                    this.TextColorCurrent = TextColorPressed;
233                    if (Cursor.SecLeftPressed)
234                    {
235                        Pressed = true;
236                    }
237                    else
238                    {
239                        if (Pressed == true)
240                        {
241                            Pressed = false;
242                            NeedsUpdating = true;
243                        }
244                    }
245                }
246                else
247                {
248                    this.TextColorCurrent = TextColor;
249                    Pressed = false;
250                    CursoronButton = false;
251                }
252
253                ProcessAnims();
254            }
255        }
256
257        private void ProcessAnims()
258        {
259            if (AnimationMode && isAnimated)
260            {
261                bool idleTextureReady = false;
262                bool hoverTextureReady = false;
263
264                if (isAnimEnterDirection)
265                {
266                    idleTextureAlpha = idleTextureAlpha - AlphaRate;
267                    if (idleTextureAlpha < 0.0f)
268                    {
269                        idleTextureAlpha = 0.0f;
270                        idleTextureReady = true;
271                    }
272
273                    hoverTextureAlpha = hoverTextureAlpha + AlphaRate;
274                    if (hoverTextureAlpha >= 1.0f)
275                    {
276                        hoverTextureAlpha = 1.0f;
277                        hoverTextureReady = true;
278                    }
279
280                    if (idleTextureReady && hoverTextureReady)
281                        AnimationMode = false;
282                }
283                else
284                {
285                    hoverTextureAlpha = hoverTextureAlpha - AlphaRate;
286                    if (hoverTextureAlpha < 0.0f)
287                    {
288                        hoverTextureAlpha = 0.0f;
289                        hoverTextureReady = true;
290                    }
291
292                    idleTextureAlpha = idleTextureAlpha + AlphaRate;
293                    if (idleTextureAlpha >= 1.0f)
294                    {
295                        idleTextureAlpha = 1.0f;
296                        idleTextureReady = true;
297                    }
298
299                    if (idleTextureReady && hoverTextureReady)
300                        AnimationMode = false;
301                }
302            }
303        }
304
305        public override void Draw(GameTime gameTime)
306        {
307            if (isVisible)
308            {
309                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);
310                if (IdleTexture != null)
311                {
312                    if (HoverTexture == null)
313                    {
314                        spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
315                    }
316                    else
317                    {
318                        if (CursoronButton == true)
319                        {
320                            spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
321                            spriteBatch.Draw(HoverTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
322                        }
323                        else
324                        {
325                            spriteBatch.Draw(HoverTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
326                            spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX), Convert.ToInt32(PositionY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
327                        }
328                    }
329                }
330                spriteBatch.End();
331
332                spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
333                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + 1 + TextXAdd, PositionY + 1 + TextYAdd), Color.Black); // varjo
334                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + TextXAdd, PositionY + TextYAdd), TextColorCurrent);
335                spriteBatch.End();
336            }
337        }
338
339        public void Draw(GameTime gameTime, int baseX, int baseY)
340        {
341            if (isVisible)
342            {
343                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied);
344                if (IdleTexture != null)
345                {
346                    if (HoverTexture == null)
347                    {
348                        spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX + baseX), Convert.ToInt32(PositionY + baseY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
349                    }
350                    else
351                    {
352                        if (CursoronButton == true)
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                            spriteBatch.Draw(HoverTexture, new Rectangle(Convert.ToInt32(PositionX + baseX), Convert.ToInt32(PositionY + baseY), Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
356                        }
357                        else
358                        {
359                            spriteBatch.Draw(HoverTexture, new Rectangle(Convert.ToInt32(PositionX + baseX), Convert.ToInt32(PositionY + baseY), Width, Height), new Color(new Vector4(128, 128, 128, hoverTextureAlpha)));
360                            spriteBatch.Draw(IdleTexture, new Rectangle(Convert.ToInt32(PositionX + baseX), Convert.ToInt32(PositionY + baseY), Width, Height), new Color(new Vector4(128, 128, 128, idleTextureAlpha)));
361                        }
362                    }
363                }
364                spriteBatch.End();
365
366                spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
367                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + 1 + TextXAdd + baseX, PositionY + 1 + TextYAdd + baseY), Color.Black); // varjo
368                spriteBatch.DrawString(spriteFont, ButtonText, new Vector2(PositionX + TextXAdd + baseX, PositionY + TextYAdd + baseY), TextColorCurrent);
369                spriteBatch.End();
370            }
371        }
372    }
373}
Note: See TracBrowser for help on using the repository browser.