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

Revision 4507, 7.0 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: Tomi Karppinen, Tero Jäntti
28 */
29
30
31using System;
32using System.Collections.Generic;
33using System.Linq;
34using System.Text;
35using Jypeli;
36using System.ComponentModel;
37
38namespace Jypeli.Widgets
39{
40    /// <summary>
41    /// Parhaiden pisteiden ikkuna.
42    /// </summary>
43    public class HighScoreWindow : CustomQueryWindow<ScoreListWidget>
44    {
45        InputWindow _inputWindow;
46        double lastScore;
47        string nameStr = "";
48
49        /// <summary>
50        /// Viesti.
51        /// </summary>
52        public string Message { get; set; }
53
54        /// <summary>
55        /// Nimensyöttöikkuna.
56        /// </summary>
57        public InputWindow NameInputWindow
58        {
59            get { return _inputWindow; }
60        }
61
62        /// <summary>
63        /// Listakomponentti.
64        /// </summary>
65        public ScoreListWidget List
66        {
67            get { return QueryWidget; }
68        }
69
70        /// <summary>
71        /// Pisin mahdollinen nimi, jonka listaan voi syöttää.
72        /// </summary>
73        public int MaxNameLength
74        {
75            get { return _inputWindow.MaxCharacters; }
76            set { _inputWindow.MaxCharacters = value; }
77        }
78
79        internal override bool OkButtonOnPhone { get { return true; } }
80
81        /// <summary>
82        /// Luo uuden parhaiden pisteiden ikkunan.
83        /// </summary>
84        /// <param name="message">Viesti</param>
85        /// <param name="list">Lista</param>
86        public HighScoreWindow( string message, ScoreList list )
87            : base( message )
88        {
89            Initialize( list );
90        }
91
92        /// <summary>
93        /// Luo uuden parhaiden pisteiden ikkunan.
94        /// </summary>
95        /// <param name="width">Leveys</param>
96        /// <param name="height">Korkeus</param>
97        /// <param name="message">Viesti</param>
98        /// <param name="list">Lista</param>
99        public HighScoreWindow( double width, double height, string message, ScoreList list )
100            : base( width, height, message )
101        {
102            Initialize( list );
103        }
104
105        private void Initialize( ScoreList list )
106        {
107            this.List.Bind( list );
108            _inputWindow = new InputWindow( "Congratulations, you got a high score of %p points! Please enter your name." );
109            AddedToGame += AddControls;
110        }
111
112        /// <summary>
113        /// Luo uuden parhaiden pisteiden ikkunan.
114        /// Tämä versio antaa pelaajan kirjoittaa nimensä listalle jos tulos
115        /// on tarpeeksi hyvä.
116        /// </summary>
117        /// <param name="normalMessage">Normaalisti näytettävä viesti</param>
118        /// <param name="nameMessage">Viesti joka näytetään kun pelaaja pääsee listalle</param>
119        /// <param name="list">Lista</param>
120        /// <param name="newScore">Viimeisimmän pelin pistemäärä</param>
121        public HighScoreWindow( string normalMessage, string nameMessage, ScoreList list, double newScore )
122            : base( normalMessage )
123        {
124            Initialize( list );
125            _inputWindow.Message.Text = nameMessage;
126            ShowNameInput( newScore );
127        }
128
129        /// <summary>
130        /// Luo uuden parhaiden pisteiden ikkunan.
131        /// Tämä versio antaa pelaajan kirjoittaa nimensä listalle jos tulos
132        /// on tarpeeksi hyvä.
133        /// </summary>
134        /// <param name="width">Leveys</param>
135        /// <param name="height">Korkeus</param>
136        /// <param name="normalMessage">Normaalisti näytettävä viesti</param>
137        /// <param name="nameMessage">Viesti joka näytetään kun pelaaja pääsee listalle</param>
138        /// <param name="list">Lista</param>
139        /// <param name="newScore">Viimeisimmän pelin pistemäärä</param>
140        public HighScoreWindow( double width, double height, string normalMessage, string nameMessage, ScoreList list, double newScore )
141            : base( width, height, normalMessage )
142        {
143            Initialize( list );
144            NameInputWindow.Message.Text = nameMessage;
145            ShowNameInput( newScore );
146        }
147
148        /// <summary>
149        /// Näyttää nimensyöttöikkunan.
150        /// </summary>
151        /// <param name="newScore"></param>
152        public void ShowNameInput( double newScore )
153        {
154            this.lastScore = newScore;
155
156            if ( ( this.List.Items as ScoreList).Qualifies( newScore ) )
157            {
158                if ( IsAddedToGame ) showNameWindow();
159                else AddedToGame += showNameWindow;
160            }
161        }
162
163        void AddControls()
164        {
165#if WINDOWS_PHONE
166            Jypeli.Game.Instance.PhoneBackButton.Listen( Close, null ).InContext( this );
167#endif
168        }
169
170        void showNameWindow()
171        {
172            AddedToGame -= showNameWindow;
173            IsVisible = false;
174
175            nameStr = NameInputWindow.Message.Text;
176            NameInputWindow.Message.Text = String.Format( NameInputWindow.Message.Text.Replace( "%p", "{0}" ), lastScore );
177            NameInputWindow.InputBox.Text = ( List.Items as ScoreList ).LastEnteredName;
178            NameInputWindow.TextEntered += nameEntered;
179            Game.Add( NameInputWindow );
180        }
181
182        void nameEntered( InputWindow sender )
183        {
184            sender.TextEntered -= nameEntered;
185            NameInputWindow.Message.Text = nameStr;
186
187            string newName = sender.InputBox.Text.Trim();
188            if ( !string.IsNullOrEmpty( newName ) )
189                ( List.Items as ScoreList ).Add( newName, lastScore );
190
191            IsVisible = true;
192        }
193
194        protected override ScoreListWidget CreateQueryWidget()
195        {
196            return new ScoreListWidget() { Color = Color.Transparent };
197        }
198    }
199}
Note: See TracBrowser for help on using the repository browser.