Jypeli  5
The simple game programming library
SplashScreen.cs
Siirry tämän tiedoston dokumentaatioon.
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 
30 using System;
31 using AdvanceMath;
32 using Microsoft.Xna.Framework.Graphics;
33 using Microsoft.Xna.Framework.Input;
34 using Jypeli.Controls;
35 using Jypeli.GameObjects;
36 
37 namespace Jypeli.Widgets
38 {
42  public class SplashScreen : Window
43  {
44  private string _controlHelp = DefaultControlHelp;
45  private string _loadingText = "Loading...";
46 
50  public Label NameLabel { get; private set; }
51 
55  public Label CopyrightLabel { get; private set; }
56 
60  public Label AuthorsLabel { get; private set; }
61 
65  public StringListWidget TextBody { get; private set; }
66 
71  public Label StartLabel { get; private set; }
72 
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 
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 
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 
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 );
212  }
213 
214  Game.Controls.TouchPanel.ListenOn( StartLabel, ButtonState.Pressed, delegate { BeginLoad( StartLabel ); }, 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 
248  kentta.Width = DefaultTextWidth;
249  kentta.Text = text;
250  kentta.TextColor = textColor;
251 
252  return kentta;
253  }
254  }
255 }
HorizontalAlignment
Asemointi vaakasuunnassa.
Definition: View.cs:177
PhoneBackButton PhoneBackButton
Back-nappi (Windows Phone 7)
Definition: Controls.cs:173
static readonly Color Green
Vihreä.
Definition: Color.cs:644
virtual string Text
Teksti.
Definition: Label.cs:94
static readonly Color Black
Musta.
Definition: Color.cs:494
static readonly Color Red
Punainen.
Definition: Color.cs:804
Fontti.
Definition: Font.cs:22
Listener Listen(Button button, ButtonState state, Handler handler, string helpText)
Definition: GamePad.cs:415
static readonly Font DefaultLarge
Suuri oletusfontti.
Definition: Font.cs:37
Aloitusruutu, joka voidaan näyttää ennen pelin käynnistämistä.
Definition: SplashScreen.cs:42
static Jypeli.Controls.Controls Controls
Pelin kontrollit.
Definition: Game.cs:207
Tekstikenttä.
Definition: Label.cs:65
TouchPanel TouchPanel
Kosketusnäyttö (Windows Phone 7)
Definition: Controls.cs:168
ButtonState
Napin (minkä tahansa) asento.
Definition: ButtonState.cs:37
static Game Instance
Definition: Game.cs:149
MouseButton
Hiiren napit.
Definition: MouseButton.cs:11
VerticalAlignment VerticalAlignment
Tekstin sijoitus pystysuunnassa. Vaikuttaa vain, jos tekstikentän koko on suurempi kuin tekstin koko ...
Definition: Label.cs:238
double Height
Näytön korkeus y-suunnassa.
Definition: View.cs:74
static ScreenView Screen
Näytön dimensiot, eli koko ja reunat.
Definition: Game.cs:194
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
static void SingleShot(double seconds, Action onTimeout)
Kutsuu aliohjelmaa onTimeout annetun ajan kuluttua. Ajastin luodaan automaattisesti.
Definition: Timer.cs:186
Listener Listen(Handler handler, string helpText)
Kuuntelee Windows Phonen Back-nappia.
Listener InContext(ListenContext context)
Kuuntelee tapahtumaa vain tietyssä kontekstissa.
Definition: Listeners.cs:239
GamePad [] GameControllers
Peliohjaimet 1-4.
Definition: Controls.cs:180
Button
Definition: Button.cs:34
Asettelee widgetit päällekäin, järjestyksessä ylhäältä alas.
Phone Phone
Phone-olio esim. puhelimen tärisyttämiseen.
Definition: Game.cs:292
Listener Listen(Key k, ButtonState state, Handler handler, String helpText)
Definition: Keyboard.cs:292
static readonly Color Blue
Sininen.
Definition: Color.cs:504
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:39
Väri.
Definition: Color.cs:13
VerticalAlignment
Asemointi pystysuunnassa.
Definition: View.cs:198
Color TextColor
Tekstin väri.
Definition: Label.cs:215
Action GameStarted
Tapahtuu kun ruudusta poistutaan. Tee varsinaiset pelin alustukset tämän tapahtuman käsittelijässä...
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
HorizontalAlignment HorizontalAlignment
Tekstin sijoitus vaakasuunnassa. Vaikuttaa vain, jos tekstikentän koko on suurempi kuin tekstin koko ...
Definition: Label.cs:231
Listener Listen(MouseButton b, ButtonState state, Handler handler, string helpText)
Kuuntelee hiiren nappulan painalluksia.
Definition: Mouse.cs:303
Key
Näppäimistön näppäin.
Definition: Key.cs:37
SplashScreen(string gameName, string authors, string copyright, string textBody)
Alustaa aloitusruudun.
2D-vektori.
Definition: Vector.cs:56
void Exit()
Lopettaa pelin.
Definition: Game.cs:1448
double Width
Näytön leveys x-suunnassa.
Definition: View.cs:66
static readonly Font DefaultSmall
Pieni oletusfontti.
Definition: Font.cs:32
Keyboard Keyboard
Näppäimistö.
Definition: Controls.cs:153
Käyttöliittymäkomponentti, joka näyttää listan merkkijonoja.
Mouse Mouse
Hiiri.
Definition: Controls.cs:158