Jypeli  5
The simple game programming library
HighScoreWindow.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: Tomi Karppinen, Tero Jäntti
28  */
29 
30 
31 using System;
32 using System.Collections.Generic;
33 using System.Linq;
34 using System.Text;
35 using Jypeli;
36 using System.ComponentModel;
37 
38 namespace Jypeli.Widgets
39 {
43  public class HighScoreWindow : CustomQueryWindow<ScoreListWidget>
44  {
45  InputWindow _inputWindow;
46  double lastScore;
47  string nameStr = "";
48 
52  public InputWindow NameInputWindow
53  {
54  get { return _inputWindow; }
55  }
56 
60  public ScoreListWidget List
61  {
62  get { return QueryWidget; }
63  }
64 
68  public int MaxNameLength
69  {
70  get { return _inputWindow.MaxCharacters; }
71  set { _inputWindow.MaxCharacters = value; }
72  }
73 
74  internal override bool OkButtonOnPhone { get { return true; } }
75 
81  public HighScoreWindow( string message, ScoreList list )
82  : base( message )
83  {
84  Initialize( list );
85  }
86 
94  public HighScoreWindow( double width, double height, string message, ScoreList list )
95  : base( width, height, message )
96  {
97  Initialize( list );
98  }
99 
100  private void Initialize( ScoreList list )
101  {
102  this.List.Bind( list );
103  _inputWindow = new InputWindow( "Congratulations, you got a high score of %p points! Please enter your name." );
104  AddedToGame += AddControls;
105  }
106 
116  public HighScoreWindow( string normalMessage, string nameMessage, ScoreList list, double newScore )
117  : base( normalMessage )
118  {
119  Initialize( list );
120  _inputWindow.Message.Text = nameMessage;
121  ShowNameInput( newScore );
122  }
123 
135  public HighScoreWindow( double width, double height, string normalMessage, string nameMessage, ScoreList list, double newScore )
136  : base( width, height, normalMessage )
137  {
138  Initialize( list );
139  NameInputWindow.Message.Text = nameMessage;
140  ShowNameInput( newScore );
141  }
142 
147  public void ShowNameInput( double newScore )
148  {
149  this.lastScore = newScore;
150 
151  if ( ( this.List.Items as ScoreList).Qualifies( newScore ) )
152  {
153  if ( IsAddedToGame ) showNameWindow();
154  else AddedToGame += showNameWindow;
155  }
156  }
157 
158  void AddControls()
159  {
160 #if WINDOWS_PHONE
161  Jypeli.Game.Instance.PhoneBackButton.Listen( Close, null ).InContext( this );
162 #endif
163  }
164 
165  void showNameWindow()
166  {
167  AddedToGame -= showNameWindow;
168  IsVisible = false;
169 
170  nameStr = NameInputWindow.Message.Text;
171  NameInputWindow.Message.Text = String.Format( NameInputWindow.Message.Text.Replace( "%p", "{0}" ), lastScore );
172  NameInputWindow.InputBox.Text = ( List.Items as ScoreList ).LastEnteredName;
173  NameInputWindow.TextEntered += nameEntered;
174  Game.Add( NameInputWindow );
175  }
176 
177  void nameEntered( InputWindow sender )
178  {
179  sender.TextEntered -= nameEntered;
180  NameInputWindow.Message.Text = nameStr;
181 
182  string newName = sender.InputBox.Text.Trim();
183  if ( !string.IsNullOrEmpty( newName ) )
184  ( List.Items as ScoreList ).Add( newName, lastScore );
185 
186  IsVisible = true;
187  }
188 
189  protected override ScoreListWidget CreateQueryWidget()
190  {
191  return new ScoreListWidget() { Color = Color.Transparent };
192  }
193  }
194 }
int MaxCharacters
Suurin määrä merkkejä joita tekstilaatikkoon voi kirjoittaa.
Definition: InputWindow.cs:56
HighScoreWindow(string normalMessage, string nameMessage, ScoreList list, double newScore)
Luo uuden parhaiden pisteiden ikkunan. Tämä versio antaa pelaajan kirjoittaa nimensä listalle jos tulos ...
PhoneBackButton PhoneBackButton
Definition: Game.cs:260
InputBox InputBox
Vastauslaatikko.
Definition: InputWindow.cs:65
HighScoreWindow(double width, double height, string normalMessage, string nameMessage, ScoreList list, double newScore)
Luo uuden parhaiden pisteiden ikkunan. Tämä versio antaa pelaajan kirjoittaa nimensä listalle jos tulos ...
virtual string Text
Teksti.
Definition: Label.cs:94
static Game Instance
Definition: Game.cs:149
HighScoreWindow(string message, ScoreList list)
Luo uuden parhaiden pisteiden ikkunan.
Käyttöliittymäkomponentti, joka näyttää parhaat pisteet.
void Add(IGameObject o)
Lisää olion peliin. Tavalliset oliot tulevat automaattisesti kerrokselle 0 ja ruutuoliot päällimmäise...
Definition: Game.cs:691
Ikkuna, joka sisältää käyttäjän määrittelemän kysymyksen, tekstinsyöttökentän ja OK-painikkeen. Ikkunan koko määräytyy automaattisesti tekstin ja ruudun koon mukaan.
Definition: InputWindow.cs:48
override string Text
Definition: InputBox.cs:94
static readonly Color Transparent
Läpinäkyvä väri.
Definition: Color.cs:869
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
Parhaiden pisteiden ikkuna.
Parhaiden pisteiden lista.
Definition: ScoreList.cs:41
Väri.
Definition: Color.cs:13
override ScoreListWidget CreateQueryWidget()
void ShowNameInput(double newScore)
Näyttää nimensyöttöikkunan.
HighScoreWindow(double width, double height, string message, ScoreList list)
Luo uuden parhaiden pisteiden ikkunan.
Label Message
Viesti tai kysymys.
InputWindowHandler TextEntered
Tapahtuu kun käyttäjä on syöttänyt tekstin ja painanut OK / sulkenut ikkunan.
Definition: InputWindow.cs:83