32 using System.Collections.Generic;
35 using Microsoft.Xna.Framework.Graphics;
36 using Microsoft.Xna.Framework;
37 using Microsoft.Xna.Framework.GamerServices;
50 private static int InputBoxes = 0;
51 const long eraseDelay = 1000000;
53 long remainingDelay = 0;
56 Timer cursorBlinkTimer;
57 Color cursorColor =
new Color( 255, 0, 0, 100 );
62 public int WidthInCharacters {
get;
set; }
67 public int MaxCharacters {
get;
set; }
74 public override Vector PreferredSize
82 public override Vector Size
84 get {
return base.Size; }
89 UpdateCursorPosition();
93 public override string Text
95 get {
return base.Text; }
98 if ( value.Length <= MaxCharacters )
105 base.Text = value.Substring( 0, MaxCharacters );
107 UpdateCursorPosition();
118 if ( TextChanged != null )
132 MaxCharacters =
int.MaxValue;
133 WidthInCharacters = characters;
135 HorizontalSizing =
Sizing.Expanding;
140 BorderColor =
new Color( 200, 200, 200 );
142 Size = PreferredSize;
145 Cursor.Color = cursorColor;
147 AddedToGame += UpdateCursorPosition;
149 cursorBlinkTimer =
new Timer();
151 cursorBlinkTimer.
Timeout += blinkCursor;
153 AddedToGame += onAdded;
154 Removed += onRemoved;
157 AddedToGame += AddTouchListener;
161 private void onAdded()
163 cursorBlinkTimer.
Start();
167 Keyboard.Buffer.BackspaceEnabled =
true;
169 Keyboard.Buffer.TextChanged += updateText;
173 private void onRemoved()
175 cursorBlinkTimer.
Stop();
178 Keyboard.Buffer.Enabled = InputBoxes > 0;
179 Keyboard.Buffer.TextChanged -= updateText;
183 private void blinkCursor()
185 Cursor.Color = ( Cursor.Color != cursorColor ) ? cursorColor :
Color.
Transparent;
188 void UpdateCursorPosition()
190 Cursor.Left = Math.Min( -Width / 2 + XMargin + TextSize.X, Width / 2 -
Font.
CharacterWidth );
194 private void updateText()
196 if ( !ControlContext.Active )
return;
197 if (
Keyboard.Buffer.TextLength == 0 ||
Keyboard.Buffer.Text.Length == 0 )
return;
199 bool changed =
false;
201 if (
Keyboard.Buffer.Text[0] ==
'\b' )
204 if ( remainingDelay <= 0 )
206 if ( Text.Length > 0 )
208 Text = Text.Remove( Text.Length - 1 );
211 remainingDelay =
InputBox.eraseDelay;
214 else if ( Text.Length < MaxCharacters )
223 UpdateCursorPosition();
231 void AddTouchListener()
236 void ShowTouchKeyboard(
Touch touch )
238 if ( !Guide.IsVisible )
239 Guide.BeginShowKeyboardInput( PlayerIndex.One,
"",
"",
"", TouchTextEntered,
this );
242 void TouchTextEntered( IAsyncResult result )
244 string typedText = Guide.EndShowKeyboardInput( result );
245 if ( typedText != null )
247 Text = ( typedText.Length <= MaxCharacters ) ? typedText : typedText.Substring( 0, MaxCharacters );
248 UpdateCursorPosition();
265 if ( remainingDelay > 0 )
274 protected override void Draw( Matrix parentTransformation, Matrix transformation )
277 base.Draw( parentTransformation, transformation, Text );
280 String shownText =
"";
282 for (
int i = Text.Length - 1; i >= 0; i-- )
284 String newText = Text[i] + shownText.ToString();
286 if (
Font.XnaFont.MeasureString( newText ).X >= Width )
292 base.Draw( parentTransformation, transformation, shownText );
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
HorizontalAlignment
Asemointi vaakasuunnassa.
static readonly Color Black
Musta.
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Action Timeout
Tapahtuu väliajoin.
double CharacterHeight
Merkin korkeus.
Listener ListenOn(IGameObject o, ButtonState state, TouchHandler handler, String helpText)
double CharacterWidth
Merkin leveys.
Kosketuspaneelin kosketus.
Sizing
Olion koon asettaminen asettelijan sisällä.
ButtonState
Napin (minkä tahansa) asento.
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Näppäimistö peliohjaimena.
static readonly Color Transparent
Läpinäkyvä väri.
Peliluokka reaaliaikaisille peleille.
Listener InContext(ListenContext context)
Kuuntelee tapahtumaa vain tietyssä kontekstissa.
TouchPanel TouchPanel
Kosketusnäyttö. Vain kännykässä.
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
void Start()
Käynnistää ajastimen.