source: 2012/23/RamiP/YAG2DSSBase/YAG2DSS/YAG2DSS/GUI/AChoiceButton.cs @ 2883

Revision 2883, 7.8 KB checked in by ramipasa, 9 years ago (diff)
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
14
15namespace ALTK.GUI
16{
17    public delegate void ChangedEventHandler(object sender, EventArgs e);
18
19
20    // A multichoice button which allows you to switch the button's item by clicking on it.
21    public class AChoiceButton : DrawableGameComponent
22    {
23        TimeSpan elapsedTime = TimeSpan.Zero;
24        TimeSpan time = TimeSpan.FromMilliseconds(30);
25
26        ContentManager content;
27        SpriteBatch spriteBatch;
28        SpriteFont spriteFont;
29
30        public int Width = 200;
31        public int Height = 30;
32
33        public string AlignX;
34        public string AlignY;
35
36        public string FontPath = "aMainFont";
37
38        public Texture2D Texture;
39
40        //public double Width;
41        //public double Height;
42
43        public float PositionX = 0.0F;
44        public float PositionY = 0.0F;
45
46        public string ButtonText = "";
47        public Color TextColor = Color.Red;
48        public Color TextColorPressed = Color.Green;
49        public Color TextColorCurrent = Color.Red;
50
51        public string Action;
52
53        public bool Locked = false;
54        public bool Pressed = false;
55        bool LeftPressed = false;
56
57        public int NumItems;
58        public int CurrentIndex;
59        public List<string> Items = new List<string>();
60
61        public event ChangedEventHandler Changed;
62
63        public bool HasChanged;
64
65        public int MaximumAllowedIndex = 33;
66
67        public AChoiceButton(Game game)
68            : base(game)
69        {
70            content = new ContentManager(game.Services);
71        }
72
73        protected override void LoadContent()
74        {
75            spriteBatch = new SpriteBatch(GraphicsDevice);
76
77            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
78        }
79
80        public void UpdateFont(string Modpath)
81        {
82            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
83        }
84
85        protected virtual void OnChanged(EventArgs e)
86        {
87            if (Changed != null)
88                Changed(this, e);
89        }
90
91        public override void Update(GameTime gameTime)
92        {
93            int mpX = Cursor.SecPosX;
94            int mpY = Cursor.SecPosY;
95
96            if (mpX > this.PositionX &&
97                mpX < this.PositionX + this.Width &&
98                mpY > this.PositionY &&
99                mpY < this.PositionY + this.Height &&
100                Locked == false)
101            {
102                this.TextColorCurrent = TextColorPressed;
103                if (Cursor.leftPressed)
104                {
105                    LeftPressed = true;
106                    Pressed = true;
107                }
108                else if (Cursor.rightPressed)
109                {
110                    LeftPressed = false;
111                    Pressed = true;
112                }
113                else
114                {
115                    if (Pressed == true)
116                    {
117                        if (LeftPressed == true)
118                        {
119                            int NextItem = CurrentIndex + 1;
120                            do
121                            {
122                                if (NextItem == NumItems)
123                                {
124                                    CurrentIndex = 0;
125                                    OnChanged(EventArgs.Empty);
126                                    HasChanged = true;
127                                    break;
128                                }
129                                else
130                                {
131                                    if (NextItem < MaximumAllowedIndex)
132                                    {
133                                        CurrentIndex = NextItem;
134                                        OnChanged(EventArgs.Empty);
135                                        HasChanged = true;
136                                    }
137                                    break;
138                                }
139                            }
140                            while (true);
141                        }
142                        else if (LeftPressed == false)
143                        {
144                            int NextItem = CurrentIndex - 1;
145                            do
146                            {
147                                if (NextItem == -1)
148                                {
149                                    if ((MaximumAllowedIndex == 0 | MaximumAllowedIndex > NumItems - 1))
150                                    {
151                                        CurrentIndex = NumItems - 1;
152                                        OnChanged(EventArgs.Empty);
153                                        HasChanged = true;
154                                    }
155                                    break;
156                                }
157                                else
158                                {
159                                    CurrentIndex = NextItem;
160                                    OnChanged(EventArgs.Empty);
161                                    HasChanged = true;
162                                    break;
163                                }
164                            }
165                            while (true);
166                        }
167                    }
168                    LeftPressed = false;
169                    Pressed = false;
170                }
171            }
172            else
173            {
174                this.TextColorCurrent = TextColor;
175                Pressed = false;
176            }
177        }
178
179        public void Update(GameTime gameTime, int baseY, int baseX)
180        {
181            int mpX = Cursor.SecPosX;
182            int mpY = Cursor.SecPosY;
183
184            if (mpX > this.PositionX + baseX &&
185                mpX < this.PositionX + this.Width + baseX &&
186                mpY > this.PositionY + baseY &&
187                mpY < this.PositionY + this.Height + baseY &&
188                Locked == false)
189            {
190                this.TextColorCurrent = TextColorPressed;
191                if (Cursor.SecLeftClicked)
192                {
193                    if (CurrentIndex == 1)
194                        CurrentIndex = 0;
195                    else
196                        CurrentIndex = 1;
197                }
198            }
199            else
200            {
201                this.TextColorCurrent = TextColor;
202                Pressed = false;
203            }
204        }
205
206        public override void Draw(GameTime gameTime)
207        {
208            spriteBatch.Begin();
209            Vector2 pos = new Vector2(PositionX, PositionY);
210            if (Texture != null)
211            {
212                spriteBatch.Draw(Texture, pos, Color.White);
213            }
214            spriteBatch.DrawString(spriteFont, Items[CurrentIndex], new Vector2(pos.X + 1, pos.Y + 1), Color.Black);
215            spriteBatch.DrawString(spriteFont, Items[CurrentIndex], pos, TextColorCurrent);
216            spriteBatch.End();
217        }
218
219        public void Draw(GameTime gameTime, int baseX, int baseY)
220        {
221            spriteBatch.Begin();
222            Vector2 pos = new Vector2(PositionX + baseX, PositionY + baseY);
223            if (Texture != null)
224            {
225                spriteBatch.Draw(Texture, pos, Color.White);
226            }
227            spriteBatch.DrawString(spriteFont, Items[CurrentIndex], new Vector2(pos.X + 1, pos.Y + 1), Color.Black);
228            spriteBatch.DrawString(spriteFont, Items[CurrentIndex], pos, TextColorCurrent);
229            spriteBatch.End();
230        }
231    }
232
233}
Note: See TracBrowser for help on using the repository browser.