source: 2012/23/RamiP/YAG2DSSBase/YAG2DSS/YAG2DSS/GUI/AMessageDisplay.cs @ 2826

Revision 2826, 10.3 KB checked in by ramipasa, 9 years ago (diff)
Line 
1// Avaruuslaatikko Graphical User Interface
2// Copyright Rami "Rampastring" Pasanen, 2011
3// Message displayer
4
5using System;
6using System.Collections.Generic;
7using System.Linq;
8using Microsoft.Xna.Framework;
9using Microsoft.Xna.Framework.Audio;
10using Microsoft.Xna.Framework.Content;
11using Microsoft.Xna.Framework.GamerServices;
12using Microsoft.Xna.Framework.Graphics;
13using Microsoft.Xna.Framework.Input;
14using Microsoft.Xna.Framework.Media;
15using Microsoft.Xna.Framework.Net;
16using Microsoft.Xna.Framework.Storage;
17
18namespace ALTK.GUI
19{
20    /// <summary>
21    /// This is a game component that implements IUpdateable.
22    /// </summary>
23    public class AMessageDisplay : DrawableGameComponent
24    {
25        TimeSpan elapsedTime = TimeSpan.Zero;
26        TimeSpan time = TimeSpan.FromMilliseconds(30);
27
28        public int NumSecondsPerMessage;
29
30        public List<AMessage> Messages = new List<AMessage>();
31
32        ContentManager content;
33        SpriteBatch spriteBatch;
34        SpriteFont spriteFont;
35        public bool UseListBoxFont = true;
36
37        public int SelectedItemIndex;
38
39        public int Width = 200;
40        public int Height = 30;
41
42        int MessageHeight = 25;
43
44        public string FontPath = "aMessageFont";
45
46        public Texture2D CommonItemTexture;
47
48        //public double Width;
49        //public double Height;
50
51        public int PositionX = 0;
52        public int PositionY = 0;
53
54        public Color TextColor = Color.Red;
55        public Color BackgroundColor = new Color(new Vector4(255, 180, 180, 75));
56
57        public string Action;
58
59        public bool Locked = false;
60        public bool MousePressed = false;
61
62        public int StartFromItem = 0;
63
64        public float TargetElapsedTime = 15.0f;
65
66        public Color backgroundTextureColor;
67
68        public AMessageDisplay(Game game)
69            : base(game)
70        {
71            content = new ContentManager(game.Services);
72        }
73
74        # region Add/Remove Item functions
75        /// <summary>
76        /// Adds an item to the Listbox. Returns true if succesful, otherwise returns false.
77        /// </summary>
78        /// <param name="ItemText">The item's text.</param>
79        /// <param name="ItemTextColor">The item's text color when idle.</param>
80        /// <param name="ItemTexture">The item's texture when the item isn't selected.</param>
81        /// <param name="ItemHeight">The item's height.</param>
82        /// <param name="ItemWidthAdd">The item's width spacing addition, in pixels.</param>
83        /// <returns>Returns true if succesful, otherwise returns false.</returns>
84        //public bool AddItem(string ItemText, Color ItemTextColor, Texture2D ItemTexture, int ItemHeight, int ItemWidthAdd, int ItemLongevity)
85        //{
86        //    if (soundInstance != null)
87        //        soundInstance.Play();
88
89        //    Messages.Add(new AMessage());
90        //    Messages[Messages.Count - 1].Text = ItemText;
91        //    Messages[Messages.Count - 1].TextColor = ItemTextColor;
92        //    Messages[Messages.Count - 1].Texture = ItemTexture;
93        //    Messages[Messages.Count - 1].Height = ItemHeight;
94        //    Messages[Messages.Count - 1].WidthAdd = ItemWidthAdd;
95        //    Messages[Messages.Count - 1].ItemLongevity = ItemLongevity;
96
97        //    return true;
98        //}
99
100        public void AddItem(string ItemText)
101        {
102            Messages.Add(new AMessage());
103            Messages[Messages.Count - 1].Text = ItemText;
104            Messages[Messages.Count - 1].TextColor = new Color(0, 255, 0, 255);
105            Messages[Messages.Count - 1].Height = MessageHeight;
106            Messages[Messages.Count - 1].ItemLongevity = 5;
107        }
108
109        public void AddItem(string ItemText, Color ItemTextColor)
110        {
111            Messages.Add(new AMessage());
112            Messages[Messages.Count - 1].Text = ItemText;
113            Messages[Messages.Count - 1].TextColor = ItemTextColor;
114            Messages[Messages.Count - 1].Height = MessageHeight;
115            Messages[Messages.Count - 1].ItemLongevity = 5;
116        }
117
118        public bool AddItem(string ItemText, Color ItemTextColor, Texture2D ItemTexture, int ItemHeight, int ItemWidthAdd,
119            double ItemLongevity, SoundEffect aSoundEffect, SoundEffectInstance aSoundInstance)
120        {
121            if (aSoundInstance != null)
122                aSoundInstance.Play();
123
124            Messages.Add(new AMessage());
125            Messages[Messages.Count - 1].Text = ItemText;
126            Messages[Messages.Count - 1].TextColor = ItemTextColor;
127            Messages[Messages.Count - 1].Texture = ItemTexture;
128            Messages[Messages.Count - 1].Height = ItemHeight;
129            Messages[Messages.Count - 1].WidthAdd = ItemWidthAdd;
130
131            return true;
132        }
133
134        public void RemoveItem(int ItemIndex)
135        {
136            Messages.RemoveAt(ItemIndex);
137        }
138        #endregion
139
140        public void ResetMessage(int itemId)
141        {
142            Messages[itemId].Text = "";
143            Messages[itemId].TextColor = Color.Orange;
144            Messages[itemId].Texture = null;
145            Messages[itemId].Height = 20;
146            Messages[itemId].WidthAdd = 0;
147        }
148
149        public void CreateBackgroundTexture(int Width)
150        {
151            if (Width > 2048)
152                Width = 2048;
153
154            CommonItemTexture = new Texture2D(GraphicsDevice, Width, MessageHeight, false, SurfaceFormat.Color);
155
156            Color[] color = new Color[Width * MessageHeight];
157
158            for (int i = 0; i < color.Length; i++)
159            {
160                color[i] = new Color(backgroundTextureColor.R, backgroundTextureColor.G, backgroundTextureColor.B, 75);
161            }
162
163            CommonItemTexture.SetData(color);
164        }
165
166        protected override void LoadContent()
167        {
168            spriteBatch = new SpriteBatch(GraphicsDevice);
169
170            spriteFont = ALTKHandler.Loader.loadFont(FontPath);
171
172            base.LoadContent();
173        }
174
175        int UpdateRate;
176
177        public override void Initialize()
178        {
179            DrawOrder = 24997;
180
181            UpdateRate = Convert.ToInt32(1000.0f / TargetElapsedTime);
182
183            base.Initialize();
184        }
185
186        public void UpdateFont(string Modpath)
187        {
188            spriteFont = ALTKHandler.Loader.loadFont("aMainFont");
189        }
190
191        int updateCount;
192        public override void Update(GameTime gameTime)
193        {
194            updateCount = updateCount + 1;
195
196            // Update the list of items
197
198            if (updateCount >= UpdateRate)
199            {
200                for (int ItemNumber = StartFromItem; ItemNumber < Messages.Count; ItemNumber++)
201                {
202                    Messages[ItemNumber].Lifetime = Messages[ItemNumber].Lifetime + 1;
203                    if (Messages[ItemNumber].Lifetime > Messages[ItemNumber].ItemLongevity)
204                    {
205                        RemoveItem(ItemNumber);
206                    }
207                }
208                updateCount = 0;
209            }
210        }
211
212        public override void Draw(GameTime gameTime)
213        {
214            spriteBatch.Begin();
215
216            int HeightDistance = PositionY;
217            for (int ItemNumber = StartFromItem; ItemNumber < Messages.Count; ItemNumber++)
218            {
219                //Console.WriteLine("Drawing item " + ItemNumber);
220                if (CommonItemTexture != null)
221                {
222                    spriteBatch.Draw(CommonItemTexture, new Rectangle(PositionX, HeightDistance, Width, Messages[ItemNumber].Height + 5), Color.White);
223                }
224
225                if (Messages[ItemNumber].Texture != null)
226                {
227                    spriteBatch.Draw(Messages[ItemNumber].Texture, new Rectangle(PositionX + 3 + Messages[ItemNumber].WidthAdd, HeightDistance , Width - Messages[ItemNumber].WidthAdd, Messages[ItemNumber].Height), BackgroundColor);
228                }
229
230                if (UseListBoxFont == true || Messages[ItemNumber].SpriteFont == null)
231                {
232                    spriteBatch.DrawString(spriteFont, Messages[ItemNumber].Text, new Vector2(PositionX + 5 + Messages[ItemNumber].WidthAdd + 1, HeightDistance ), Color.Black);
233                    spriteBatch.DrawString(spriteFont, Messages[ItemNumber].Text, new Vector2(PositionX + 5 + Messages[ItemNumber].WidthAdd, HeightDistance - 1), Messages[ItemNumber].TextColor);
234                }
235                else
236                {
237                    spriteBatch.DrawString(Messages[ItemNumber].SpriteFont, Messages[ItemNumber].Text, new Vector2(PositionX + 5 + Messages[ItemNumber].WidthAdd + 1, HeightDistance), Color.Black);
238                    spriteBatch.DrawString(Messages[ItemNumber].SpriteFont, Messages[ItemNumber].Text, new Vector2(PositionX + 5 + Messages[ItemNumber].WidthAdd, HeightDistance - 1), Messages[ItemNumber].TextColor);
239                }
240                HeightDistance = HeightDistance + Messages[ItemNumber].Height + 4;
241            }
242
243            if (Messages.Count != 0)
244                spriteBatch.Draw(CommonItemTexture, new Rectangle(PositionX, HeightDistance, Width, 2), Color.White);
245
246            spriteBatch.End();
247        }
248    }
249
250    public class AMessage
251    {
252        int aHeight = 20;
253        int aWidthAdd = 0;
254        public int ItemLongevity = 3;
255        public string aText = "";
256        Color aTextColor = Color.Orange;
257        Texture2D aTexture2D;
258        SpriteFont aSpriteFont;
259        public int Lifetime;
260
261        public int Height
262        {
263            get { return aHeight; }
264            set { aHeight = value; }
265        }
266
267        public int WidthAdd
268        {
269            get { return aWidthAdd; }
270            set { aWidthAdd = value; }
271        }
272
273        public string Text
274        {
275            get { return aText; }
276            set { aText = value; }
277        }
278
279        public Color TextColor
280        {
281            get { return aTextColor; }
282            set { aTextColor = value; }
283        }
284
285        public Texture2D Texture
286        {
287            get { return aTexture2D; }
288            set { aTexture2D = value; }
289        }
290
291        public SpriteFont SpriteFont
292        {
293            get { return aSpriteFont; }
294            set { aSpriteFont = value; }
295        }
296    }
297}
Note: See TracBrowser for help on using the repository browser.