source: 2013/30/MiskaK/MW2(My Warfare 2)/Paranneltu Jypeli/Widgets/SplashScreen.cs @ 4507

Revision 4507, 8.4 KB checked in by anlakane, 6 years ago (diff)

Talletus.

Line 
1#region MIT License
2/*
3 * Copyright (c) 2009-2011 University of Jyväskylä, Department of Mathematical
4 * Information Technology.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#endregion
25
26/*
27 * Authors: Tero Jäntti, Tomi Karppinen, Janne Nikkanen.
28 */
29
30using System;
31using AdvanceMath;
32using Microsoft.Xna.Framework.Graphics;
33using Microsoft.Xna.Framework.Input;
34using Jypeli.Controls;
35using Jypeli.GameObjects;
36
37namespace Jypeli.Widgets
38{
39    /// <summary>
40    /// Aloitusruutu, joka voidaan näyttää ennen pelin käynnistämistä.
41    /// </summary>
42    public class SplashScreen : Window
43    {
44        private string _controlHelp = DefaultControlHelp;
45        private string _loadingText = "Loading...";
46
47        /// <summary>
48        /// Pelin nimen näyttävä tekstikenttä.
49        /// </summary>
50        public Label NameLabel { get; private set; }
51
52        /// <summary>
53        /// Pelin tekijänoikeudet näyttävä tekstikenttä.
54        /// </summary>
55        public Label CopyrightLabel { get; private set; }
56
57        /// <summary>
58        /// Pelin tekijät näyttävä tekstikenttä.
59        /// </summary>
60        public Label AuthorsLabel { get; private set; }
61
62        /// <summary>
63        /// Päätekstikenttä.
64        /// </summary>
65        public StringListWidget TextBody { get; private set; }
66
67        /// <summary>
68        /// Aloita peli painamalla... -tekstin näyttävä tekstikenttä.
69        /// Käytä ominaisuuksia ControlHelp ja LoadingText jos haluat muuttaa itse tekstiä.
70        /// </summary>
71        public Label StartLabel { get; private set; }
72
73        /// <summary>
74        /// Kontrolliohje (Aloita peli painamalla Enter / Xbox A).
75        /// </summary>
76        public string ControlHelp
77        {
78            get { return _controlHelp; }
79            set
80            {
81                if ( StartLabel.Text == _controlHelp ) StartLabel.Text = value;
82                _controlHelp = value;
83            }
84        }
85
86        /// <summary>
87        /// Latausteksti.
88        /// </summary>
89        public string LoadingText
90        {
91            get { return _loadingText; }
92            set
93            {
94                if ( StartLabel.Text == _loadingText ) StartLabel.Text = value;
95                _loadingText = value;
96            }
97        }
98
99        /// <summary>
100        /// Tapahtuu kun ruudusta poistutaan.
101        /// Tee varsinaiset pelin alustukset tämän tapahtuman käsittelijässä.
102        /// </summary>
103        public event Action GameStarted;
104
105        #region Default dimensions
106
107        private static double DefaultWidth
108        {
109            get
110            {
111#if WINDOWS_PHONE
112                return Game.Screen.Width;
113#else
114                return 600;
115#endif
116            }
117        }
118
119        private static double DefaultTextWidth
120        {
121            get
122            {
123#if WINDOWS_PHONE
124                return Game.Instance.Phone.DisplayResolution == WP7.DisplayResolution.Small ? 300 : 500;
125#else
126                return 500;
127#endif
128            }
129        }
130
131        private static double DefaultHeight
132        {
133            get
134            {
135#if WINDOWS_PHONE
136                return Game.Screen.Height;
137#else
138                return 600;
139#endif
140            }
141        }
142
143        private static double DefaultSpacing
144        {
145            get
146            {
147#if WINDOWS_PHONE
148                return Game.Instance.Phone.DisplayResolution == WP7.DisplayResolution.Small ? 0 : 20;
149#else
150                return 50;
151#endif
152            }
153        }
154
155        private static string DefaultControlHelp
156        {
157            get
158            {
159#if WINDOWS_PHONE
160                return "Start the game by tapping here";
161#elif XBOX
162                return "Start the game by pressing A";
163#else
164                return "Start the game by pressing Enter";
165#endif
166            }
167        }
168
169        #endregion
170
171        /// <summary>
172        /// Alustaa aloitusruudun.
173        /// </summary>
174        public SplashScreen( string gameName, string authors, string copyright, string textBody )
175            : base( DefaultWidth, DefaultHeight )
176        {
177            Layout = new VerticalLayout() { Spacing = DefaultSpacing };
178
179            NameLabel = InitializeTextDisplay( gameName, Color.Red );
180            CopyrightLabel = InitializeTextDisplay( copyright, Color.Blue );
181            AuthorsLabel = InitializeTextDisplay( authors, Color.Blue );
182            StartLabel = InitializeTextDisplay( ControlHelp, Color.Green );
183           
184            double targetWidth = 2 * this.Width / 3;
185            NameLabel.TextScale = new Vector( targetWidth / NameLabel.TextSize.X, 2 );
186            NameLabel.SizeMode = TextSizeMode.Wrapped;
187            CopyrightLabel.SizeMode = TextSizeMode.Wrapped;
188
189            TextBody = new StringListWidget();
190            TextBody.ItemAligment = HorizontalAlignment.Center;
191            TextBody.Width = DefaultTextWidth;
192            TextBody.TextColor = Color.Black;
193            TextBody.Color = new Color( 0, 0, 255, 4 );
194#if WINDOWS_PHONE
195            if ( DefaultTextWidth < 500 )
196                TextBody.Font = Font.DefaultSmall;
197            else 
198                TextBody.Font = Font.DefaultLarge;
199#endif
200            TextBody.Text = textBody;
201
202            StartLabel.SizeMode = TextSizeMode.Wrapped;
203
204            Game.Controls.Keyboard.Listen( Key.Enter, ButtonState.Pressed, BeginLoad, null,StartLabel ).InContext( this );
205            Game.Controls.Keyboard.Listen( Key.Escape, ButtonState.Pressed, Game.Instance.Exit, null ).InContext( this ); ;
206            Game.Controls.Mouse.Listen( MouseButton.Left, ButtonState.Down, BeginLoad, null, StartLabel ).InContext( this );
207           
208            for ( int i = 0; i < Game.Controls.GameControllers.Length; i++ )
209            {
210                Game.Controls.GameControllers[i].Listen( Button.A, ButtonState.Pressed, BeginLoad, null, StartLabel ).InContext( this );
211                Game.Controls.GameControllers[i].Listen( Button.B, ButtonState.Pressed, Game.Instance.Exit, null ).InContext( this );
212            }
213
214            Game.Controls.TouchPanel.ListenOn( StartLabel, ButtonState.Pressed, delegate { BeginLoad( StartLabel ); }, null ).InContext( this );
215            Game.Controls.PhoneBackButton.Listen( Game.Instance.Exit, null ).InContext( this );
216
217            Add( NameLabel );
218            Add( CopyrightLabel );
219            Add( AuthorsLabel );
220            Add( TextBody );
221            Add( StartLabel );
222        }
223
224        private void BeginLoad( Label aloitusohje )
225        {
226            // Don't trigger twice
227            if ( aloitusohje.Text == LoadingText )
228                return;
229
230            aloitusohje.TextColor = Color.Red;
231            aloitusohje.Text = LoadingText;
232            Timer.SingleShot( 0.1, ResumeLoad );
233        }
234
235        private void ResumeLoad()
236        {
237            Close();
238            if ( GameStarted != null )
239                GameStarted();
240        }
241
242        private Label InitializeTextDisplay( string text, Color textColor )
243        {
244            Label kentta = new Label(text);
245
246            kentta.HorizontalAlignment = HorizontalAlignment.Center;
247            kentta.VerticalAlignment = VerticalAlignment.Top;
248            kentta.Width = DefaultTextWidth;
249            kentta.Text = text;
250            kentta.TextColor = textColor;
251
252            return kentta;
253        }
254    }
255}
Note: See TracBrowser for help on using the repository browser.