source: 2012/23/RamiP/YAG2DSSBase/YAG2DSS/YAG2DSS/GUI/ATextBox.cs @ 2811

Revision 2811, 8.7 KB checked in by ramipasa, 9 years ago (diff)
Line 
1// Avaruuslaatikko Graphical User Interface
2// Copyright Rami "Rampastring" Pasanen, 2012
3
4using System;
5using System.Collections.Generic;
6using System.Linq;
7using Microsoft.Xna.Framework;
8using Microsoft.Xna.Framework.Audio;
9using Microsoft.Xna.Framework.Content;
10using Microsoft.Xna.Framework.GamerServices;
11using Microsoft.Xna.Framework.Graphics;
12using Microsoft.Xna.Framework.Input;
13using Microsoft.Xna.Framework.Media;
14using Microsoft.Xna.Framework.Net;
15using Microsoft.Xna.Framework.Storage;
16
17namespace ALTK.GUI
18{
19    /// <summary>
20    /// This is a game component that implements IUpdateable.
21    /// </summary>
22    public class ATextBox : DrawableGameComponent
23    {
24        TimeSpan elapsedTime = TimeSpan.Zero;
25        TimeSpan time = TimeSpan.FromMilliseconds(30);
26
27        ContentManager content;
28        SpriteBatch spriteBatch;
29        SpriteFont spriteFont;
30        public bool UseListBoxFont = true;
31
32        public int SelectedItemIndex = -1;
33
34        public int Width = 200;
35        public int Height = 30;
36
37        public string FontPath = "aMainFont";
38
39        public Texture2D Texture;
40        public Texture2D SelectedTexture;
41
42        //public double Width;
43        //public double Height;
44
45        public Vector2 Position = new Vector2(0, 0);
46
47        public Color TextColor = Color.Red;
48        public Color TextColorPressed = Color.Green;
49        public Color TextColorCurrent = Color.Red;
50        public Color BackgroundColor = new Color(new Vector4(255, 180, 180, 75));
51
52        public bool Locked = false;
53        public bool MousePressed = false;
54
55        public int Spacing;
56
57        public bool Selected = false;
58        public bool EnterPressed = false;
59
60        public string Text = String.Empty;
61
62        public ATextBox(Game game)
63            : base(game)
64        {
65            content = new ContentManager(game.Services);
66        }
67
68        //public Texture2D CreateBackgroundTexture(int Width, Color BackgroundColor)
69        //{
70        //    Texture2D texture = new Texture2D(GraphicsDevice, Width, Height, false, SurfaceFormat.Color);
71
72        //    Color[] color = new Color[Width * ALTKMod.GUIControls.MessageHeight];
73
74        //    for (int i = 0; i < color.Length; i++)
75        //    {
76        //        color[i] = BackgroundColor;
77        //    }
78
79        //    texture.SetData(color);
80
81        //    return texture;
82        //}
83
84        TextParseReturnValue korjaaTeksti(string text)
85        {
86            string rivi = String.Empty;
87            TextParseReturnValue palautusarvo = new TextParseReturnValue();
88            palautusarvo.text = String.Empty;
89            string[] wordArray = text.Split(' ');
90
91            foreach (string sana in wordArray)
92            {
93                if (spriteFont.MeasureString(rivi + sana).Length() > Width)
94                {
95                    palautusarvo.text = palautusarvo.text + rivi + '\n';
96                    palautusarvo.lineAmount = palautusarvo.lineAmount + 1;
97                    rivi = String.Empty;
98                }
99
100                rivi = rivi + sana + " ";
101            }
102
103            palautusarvo.text = palautusarvo.text + rivi;
104            return palautusarvo;
105        }
106
107        protected override void LoadContent()
108        {
109            spriteBatch = new SpriteBatch(GraphicsDevice);
110
111            spriteFont = ALTKHandler.Loader.loadFont("aMainFont");
112
113            base.LoadContent();
114        }
115
116        public override void Initialize()
117        {
118            KeyboardEventInput.CharEntered += new CharEnteredHandler(KeyboardEventInput_CharEntered);
119
120            base.Initialize();
121
122            BackgroundColor = new Color(128, 255, 128, 255);
123
124            Texture = ALTKHandler.Loader.CreateBackgroundTexture(Width, Height, BackgroundColor);
125        }
126
127        private void KeyboardEventInput_CharEntered(object sender, KeyboardEventArgs e)
128        {
129            if (Selected)
130            {
131                if (e.Character == '\r')
132                    EnterPressed = true;
133                else if (e.Character == '\b')
134                {
135                    if (Text.Length > 0)
136                        Text = Text.Remove(Text.Length - 1);
137                }
138                else
139                {
140                    Text = Text + e.Character;
141
142                    if (spriteFont.MeasureString(Text + "  ").X > Width)
143                    {
144                        EnterPressed = true;
145                    }
146                }
147
148            }
149        }
150
151        public void UpdateFont(string Modpath)
152        {
153            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
154        }
155
156        public override void Update(GameTime gameTime)
157        {
158            int mpX = Cursor.PosX;
159            int mpY = Cursor.PosY;
160
161            if (!Locked)
162            {
163                if (mpX > Position.X && mpX < (Position.X + Width))
164                {
165                    if (mpY > Position.Y && mpY < (Position.Y + Height))
166                    {
167                        if (Cursor.leftClicked)
168                            Selected = true;
169                    }
170                    else if (Cursor.leftClicked)
171                        Selected = false;
172                }
173                else if (Cursor.leftClicked)
174                    Selected = false;
175            }
176        }
177
178        public void Update(GameTime gameTime, int baseY, int baseX)
179        {
180            int mpX = Cursor.SecPosX;
181            int mpY = Cursor.SecPosY;
182
183            if (!Locked)
184            {
185                if (mpX > Position.X + baseX && mpX < (Position.X + baseX + Width))
186                {
187                    if (mpY > Position.Y + baseY && mpY < (Position.Y + baseY + Height))
188                    {
189                        if (Cursor.SecLeftClicked)
190                            Selected = true;
191                    }
192                    else if (Cursor.SecLeftClicked)
193                        Selected = false;
194                }
195                else if (Cursor.SecLeftClicked)
196                    Selected = false;
197            }
198        }
199
200        int NumDrawsSinceBlink = 0;
201
202        public override void Draw(GameTime gameTime)
203        {
204            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied);
205            if (Texture != null)
206            {
207                spriteBatch.Draw(Texture, new Rectangle(Convert.ToInt32(Position.X), Convert.ToInt32(Position.Y), Width, Height), BackgroundColor);
208            }
209
210            if (!String.IsNullOrEmpty(Text))
211            {
212                spriteBatch.DrawString(spriteFont, Text, new Vector2(Position.X + 6, Position.Y + 6), Color.Black);
213                spriteBatch.DrawString(spriteFont, Text, new Vector2(Position.X + 5, Position.Y + 5), TextColor);
214            }
215
216            if (!Locked && Selected && NumDrawsSinceBlink < 30)
217            {
218                Vector2 stringSize = spriteFont.MeasureString(Text);
219                spriteBatch.DrawString(spriteFont, "|", new Vector2(Position.X + stringSize.X + 11, Position.Y + 6), Color.Black);
220                spriteBatch.DrawString(spriteFont, "|", new Vector2(Position.X + stringSize.X + 10, Position.Y + 5), TextColor);
221
222                if (NumDrawsSinceBlink < 1)
223                    NumDrawsSinceBlink = 90;
224            }
225
226            NumDrawsSinceBlink--;
227
228            spriteBatch.End();
229        }
230
231        public void Draw(GameTime gameTime, int baseX, int baseY)
232        {
233            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied);
234            if (Texture != null)
235            {
236                spriteBatch.Draw(Texture, new Rectangle(Convert.ToInt32(Position.X + baseX), Convert.ToInt32(Position.Y + baseY), Width, Height), BackgroundColor);
237            }
238
239            if (!String.IsNullOrEmpty(Text))
240            {
241                spriteBatch.DrawString(spriteFont, Text, new Vector2(Position.X + baseX + 6, Position.Y + baseY + 6), Color.Black);
242                spriteBatch.DrawString(spriteFont, Text, new Vector2(Position.X + baseX + 5, Position.Y + baseY + 5), TextColor);
243            }
244
245            if (!Locked && Selected && NumDrawsSinceBlink < 30)
246            {
247                Vector2 stringSize = spriteFont.MeasureString(Text);
248                spriteBatch.DrawString(spriteFont, "|", new Vector2(Position.X + stringSize.X + baseX + 11, Position.Y + baseY + 6), Color.Black);
249                spriteBatch.DrawString(spriteFont, "|", new Vector2(Position.X + stringSize.X + baseX + 10, Position.Y + baseY + 5), TextColor);
250
251                if (NumDrawsSinceBlink < 1)
252                    NumDrawsSinceBlink = 90;
253            }
254
255            NumDrawsSinceBlink--;
256
257            spriteBatch.End();
258        }
259    }
260}
Note: See TracBrowser for help on using the repository browser.