Jypeli  5
The simple game programming library
Controls.cs
Siirry tämän tiedoston dokumentaatioon.
1 #region MIT License
2 /*
3  * Copyright (c) 2009 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 System.Collections.Generic;
32 using Microsoft.Xna.Framework;
33 using Microsoft.Xna.Framework.Input;
34 using Physics2DDotNet;
35 using Jypeli.WP7;
36 
37 using XnaKeyboard = Microsoft.Xna.Framework.Input.Keyboard;
38 using XnaMouse = Microsoft.Xna.Framework.Input.Mouse;
39 using XnaGamePad = Microsoft.Xna.Framework.Input.GamePad;
40 
41 namespace Jypeli.Controls
42 {
46  public delegate void Handler();
47 
51  public delegate void Handler<T1>( T1 p1 );
52 
56  public delegate void Handler<T1, T2>( T1 p1, T2 p2 );
57 
61  public delegate void Handler<T1, T2, T3>( T1 p1, T2 p2, T3 p3 );
62 
66  public delegate void Handler<T1, T2, T3, T4>( T1 p1, T2 p2, T3 p3, T4 p4 );
67 
71  public delegate void MultiKeyHandler( List<Key> keys );
72 
76  public delegate void MultiKeyHandler<T1>( List<Key> keys, T1 p1 );
77 
81  public delegate void MultiKeyHandler<T1, T2>( List<Key> keys, T1 p1, T2 p2 );
82 
86  public delegate void MultiKeyHandler<T1, T2, T3>( List<Key> keys, T1 p1, T2 p2, T3 p3 );
87 
91  public delegate void MultiKeyHandler<T1, T2, T3, T4>( List<Key> keys, T1 p1, T2 p2, T3 p3, T4 p4 );
92 
96  public delegate void AnalogHandler( AnalogState analogState );
97 
101  public delegate void AnalogHandler<T1>( AnalogState analogState, T1 p1 );
102 
106  public delegate void AnalogHandler<T1, T2>( AnalogState analogState, T1 p1, T2 p2 );
107 
111  public delegate void AnalogHandler<T1, T2, T3>( AnalogState analogState, T1 p1, T2 p2, T3 p3 );
112 
116  public delegate void AnalogHandler<T1, T2, T3, T4>( AnalogState analogState, T1 p1, T2 p2, T3 p3, T4 p4 );
117 
121  public delegate void TouchHandler(Touch touch);
122 
126  public delegate void TouchHandler<T1>(Touch touch, T1 p1);
127 
131  public delegate void TouchHandler<T1, T2>(Touch touch, T1 p1, T2 p2);
132 
136  public delegate void TouchHandler<T1, T2, T3>(Touch touch, T1 p1, T2 p2, T3 p3);
137 
141  public delegate void TouchHandler<T1, T2, T3, T4>(Touch touch, T1 p1, T2 p2, T3 p3, T4 p4);
142 
146  public class Controls
147  {
148  List<Controller> controllers = new List<Controller>();
149 
153  public Keyboard Keyboard { get; private set; }
154 
158  public Mouse Mouse { get; private set; }
159 
163  public Accelerometer Accelerometer { get; private set; }
164 
168  public TouchPanel TouchPanel { get; private set; }
169 
173  public PhoneBackButton PhoneBackButton { get; private set; }
174 
175  public bool Enabled { get; set; }
176 
180  public GamePad[] GameControllers { get; private set; }
181 
186  internal bool BufferEmpty
187  {
188  get
189  {
190  // TODO: Apply to game pads and mouse as well
191  return !Keyboard.Enabled || Microsoft.Xna.Framework.Input.Keyboard.GetState().GetPressedKeys().Length == 0;
192  }
193  }
194 
199  public Controls()
200  {
201  Enabled = true;
202  Mouse = new Mouse();
203  Keyboard = new Keyboard();
205  TouchPanel = new TouchPanel();
207 
208  GameControllers = new GamePad[]
209  {
210  new GamePad( PlayerIndex.One ),
211  new GamePad( PlayerIndex.Two ),
212  new GamePad( PlayerIndex.Three ),
213  new GamePad( PlayerIndex.Four ),
214  };
215 
216  controllers.Add( Keyboard );
217 #if WINDOWS
218  controllers.Add( Mouse );
219 #elif WINDOWS_PHONE
220  controllers.Add( Accelerometer );
221  controllers.Add( TouchPanel );
222  controllers.Add( PhoneBackButton );
223 #endif
224 
225 #if WINDOWS || XBOX
226  controllers.AddRange( GameControllers );
227 #endif
228  }
229 
230  internal void Update()
231  {
232  if ( !Enabled )
233  {
234  return;
235  }
236 
237  foreach ( Controller controller in controllers )
238  {
239  controller.Update();
240  }
241  }
242 
247  public void PurgeBuffer()
248  {
249  foreach ( Controller controller in controllers )
250  {
251  controller.PurgeBuffer();
252  }
253  }
254 
259  public List<String> GetHelpTexts()
260  {
261  var texts = new List<string>();
262 
263  foreach ( Controller controller in controllers )
264  {
265  if ( controller is GamePad )
266  continue;
267 
268  controller.GetHelpTexts( texts );
269  }
270 
271  // Assuming here that the other three gamepads would have the same texts.
272  GameControllers[0].GetHelpTexts( texts );
273 
274  return texts;
275  }
276 
280  public void Clear()
281  {
282  foreach ( Controller controller in controllers )
283  {
284  controller.Clear();
285  }
286 
287  // helpTexts.Clear();
288  }
289  }
290 }
delegate void TouchHandler< T1, T2, T3 >(Touch touch, T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
delegate void MultiKeyHandler< T1 >(List< Key > keys, T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
delegate void MultiKeyHandler< T1, T2, T3, T4 >(List< Key > keys, T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
Sisältää ohjaimet.
Definition: Controls.cs:146
Kosketuspaneelin kosketus.
Definition: Touch.cs:16
List< String > GetHelpTexts()
Palauttaa kaikki ohjaimien ohjetekstit listana.
Definition: Controls.cs:259
delegate void AnalogHandler< T1, T2 >(AnalogState analogState, T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
delegate void TouchHandler< T1 >(Touch touch, T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
Kosketuspaneeli.
Definition: TouchPanel.cs:48
delegate void MultiKeyHandler< T1, T2 >(List< Key > keys, T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
Controls()
Luo uuden kontrolli-olion. Jos mahdollista, käytä mieluummin peliluokan omaa Controls-ominaisuutta.
Definition: Controls.cs:199
Puhelimen kiihtyvyysanturi.
void Clear()
Tyhjentää kaikki kontrollit.
Definition: Controls.cs:280
Näppäimistö peliohjaimena.
Definition: Keyboard.cs:41
delegate void Handler< T1, T2, T3 >(T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
delegate void TouchHandler< T1, T2 >(Touch touch, T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
delegate void AnalogHandler(AnalogState analogState)
Ohjaintapahtumankäsittelijä ilman parametreja.
delegate void Handler< T1 >(T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
Hiiri peliohjaimena.
Definition: Mouse.cs:46
Xbox-peliohjain.
Definition: GamePad.cs:43
delegate void TouchHandler(Touch touch)
Ohjaintapahtumankäsittelijä ilman parametreja.
delegate void MultiKeyHandler(List< Key > keys)
Ohjaintapahtumankäsittelijä ilman parametreja.
delegate void MultiKeyHandler< T1, T2, T3 >(List< Key > keys, T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
delegate void Handler()
Ohjaintapahtumankäsittelijä ilman parametreja.
void PurgeBuffer()
Tyhjentää kaikkien peliohjaimien ohjauspuskurit, eli jonossa odottavat näppäimenpainallukset ja muut ...
Definition: Controls.cs:247
delegate void Handler< T1, T2 >(T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
delegate void AnalogHandler< T1, T2, T3 >(AnalogState analogState, T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
delegate void Handler< T1, T2, T3, T4 >(T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
Windows Phonen Back-nappi
delegate void AnalogHandler< T1 >(AnalogState analogState, T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
delegate void TouchHandler< T1, T2, T3, T4 >(Touch touch, T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
delegate void AnalogHandler< T1, T2, T3, T4 >(AnalogState analogState, T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
Yleinen peliohjainluokka.
Definition: Controller.cs:40