28 using System.Collections.Generic;
30 using Microsoft.Xna.Framework;
33 using Microsoft.Xna.Framework.Input.Touch;
35 using XnaTouchPanel = Microsoft.Xna.Framework.Input.Touch.TouchPanel;
36 using XnaGestureType = Microsoft.Xna.Framework.Input.Touch.GestureType;
57 public int ActiveChannels
59 get {
return newState.ActiveTouches.Count + newState.ActiveGestures.Count; }
67 get {
return newState.ActiveTouches.Count; }
73 public int NumGestures
75 get {
return newState.ActiveGestures.Count; }
78 internal override bool IsBufferEmpty()
86 public bool FollowSnipping
88 get {
return _snipContext != null; }
92 ContextHandler op = delegate(
ListenContext ctx ) { Listen(
ButtonState.Down, handler,
"Move around" ).InContext( ctx ); };
93 setContext( ref _snipContext, value, op );
100 public bool FollowPinching
102 get {
return _pinchContext != null; }
111 setContext( ref _pinchContext, value, op );
119 public bool EmulateKeyboard
121 get {
return _keyEmulationContext != null; }
124 ContextHandler op = delegate(
ListenContext ctx ) { Listen(
ButtonState.Down, DoEmulateKeyboard, null ).InContext( ctx ); };
125 setContext( ref _keyEmulationContext, value, op );
131 private void setContext( ref
ListenContext context,
bool enable, ContextHandler operation )
133 if ( ( context != null ) == enable )
return;
138 operation( context );
149 bool pinch = this.FollowPinching;
150 bool snip = this.FollowSnipping;
151 bool kbem = this.EmulateKeyboard;
153 this.FollowPinching =
false;
154 this.FollowSnipping =
false;
155 this.EmulateKeyboard =
false;
159 this.FollowPinching = pinch;
160 this.FollowSnipping = snip;
161 this.EmulateKeyboard = kbem;
170 base.Enable( listener => ( listener.State == state ) );
179 base.Disable( listener => ( listener.State == state ) );
182 internal override string GetControlText(
Listener listener )
185 Debug.Assert(
false,
"Bad listener type for touch panel" );
186 return "Touch panel";
192 List<GestureSample> samples =
new List<GestureSample>();
193 if ( XnaTouchPanel.EnabledGestures != XnaGestureType.None )
195 while ( XnaTouchPanel.IsGestureAvailable )
196 samples.Add( XnaTouchPanel.ReadGesture() );
200 return new TouchPanelState( XnaTouchPanel.GetState(), samples, newState );
211 if ( !listener.Context.
Active )
214 if ( listener.gestureType == null )
217 if ( newState.ActiveTouches.Count <= channel )
220 if ( listener.GameObject != null )
222 Vector touchOnScreen = newState.ActiveTouches[channel].PositionOnScreen;
225 if ( !listener.GameObject.
IsInside( touchOnWorld ) )
229 switch ( newState.ActiveTouches[channel].State )
231 case TouchLocationState.Moved:
234 case TouchLocationState.Pressed:
237 case TouchLocationState.Released:
244 int gIndex = channel - newState.ActiveTouches.Count;
245 if ( gIndex < 0 || newState.ActiveGestures.Count <= gIndex )
248 if ( listener.GameObject != null && !listener.GameObject.
IsInside( newState.ActiveGestures[gIndex].PositionOnWorld ) )
251 return newState.samples.Any( s => s.GestureType == (XnaGestureType)listener.gestureType.Value );
258 private void DoEmulateKeyboard(
Touch touch )
293 #region Listen with no parameters 311 l.gestureType = type;
313 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
325 l.gestureType = type;
327 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
349 #region Listen with 1 parameter 367 l.gestureType = type;
369 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
381 l.gestureType = type;
383 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
405 #region Listen with 2 parameters 423 l.gestureType = type;
425 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
437 l.gestureType = type;
439 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
461 #region Listen with 3 parameters 479 l.gestureType = type;
481 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
488 public Listener ListenGestureOn<T1, T2, T3>(
GameObject o,
GestureType type,
TouchHandler<T1, T2, T3> handler,
string helpText, T1 p1, T2 p2, T3 p3 )
493 l.gestureType = type;
495 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
502 public Listener ListenOn<T1, T2, T3>(
IGameObject o,
ButtonState state,
TouchHandler<T1, T2, T3> handler, String helpText, T1 p1, T2 p2, T3 p3 )
517 #region Listen with 4 parameters 519 public Listener Listen<T1, T2, T3, T4>(
ButtonState state,
TouchHandler<T1, T2, T3, T4> handler,
string helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
522 Listener l =
new TouchListener<T1, T2, T3, T4>(
this,
ListeningType.Touch, helpText, handler, p1, p2, p3, p4 );
531 public Listener ListenGesture<T1, T2, T3, T4>(
GestureType type,
TouchHandler<T1, T2, T3, T4> handler,
string helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
534 Listener l =
new TouchListener<T1, T2, T3, T4>(
this,
ListeningType.TouchGesture, helpText, handler, p1, p2, p3, p4 );
535 l.gestureType = type;
537 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
544 public Listener ListenGestureOn<T1, T2, T3, T4>(
GameObject o,
GestureType type,
TouchHandler<T1, T2, T3, T4> handler,
string helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
547 Listener l =
new TouchListener<T1, T2, T3, T4>(
this,
ListeningType.TouchGesture, helpText, handler, p1, p2, p3, p4 );
549 l.gestureType = type;
551 XnaTouchPanel.EnabledGestures |= (XnaGestureType)type;
558 public Listener ListenOn<T1, T2, T3, T4>(
IGameObject o,
ButtonState state,
TouchHandler<T1, T2, T3, T4> handler, String helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
561 Listener l =
new TouchListener<T1, T2, T3, T4>(
this,
ListeningType.Touch, helpText, handler, p1, p2, p3, p4 );
Vector PositionOnScreen
Kosketuksen paikka ruudulla.
delegate void TouchHandler< T1, T2, T3 >(Touch touch, T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
ListenContext CreateSubcontext()
double Magnitude
Vektorin pituus.
bool IsTriggeredOnChannel(int channel, Listener listener)
Listener ListenOn(IGameObject o, ButtonState state, TouchHandler handler, String helpText)
void Enable(ButtonState state)
Ottaa käytöstä poistetun kosketuskontrollin k takaisin käyttöön.
Kosketuspaneelin kosketus.
static Jypeli.Controls.Controls Controls
Pelin kontrollit.
Vector WorldDistanceAfter
Sormien etäisyysvektori maailmassa eleen lopussa.
delegate void TouchHandler< T1 >(Touch touch, T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
ButtonState
Napin (minkä tahansa) asento.
void Zoom(double zoom)
Zoomaa.
double Height
Näytön korkeus y-suunnassa.
static ScreenView Screen
Näytön dimensiot, eli koko ja reunat.
Vector Position
Kameran sijainti.
void Disable(ButtonState state)
Poistaa kosketuskontrollin k käytöstä.
Peliluokka reaaliaikaisille peleille.
delegate void TouchHandler< T1, T2 >(Touch touch, T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
Listener ListenGestureOn(GameObject o, GestureType type, TouchHandler handler, string helpText)
Listener Listen(ButtonState state, TouchHandler handler, string helpText)
GestureType
Kosketuseleen tyyppi.
Vector WorldDistanceBefore
Sormien etäisyysvektori maailmassa eleen alussa.
ListenContext ControlContext
Pelin pääohjainkonteksti.
delegate void TouchHandler(Touch touch)
Ohjaintapahtumankäsittelijä ilman parametreja.
Listener ListenGesture(GestureType type, TouchHandler handler, string helpText)
Vector MovementOnWorld
Kosketuksen liike pelimaailmassa.
Yhteinen rajapinta kaikille peliolioille.
bool IsInside(Vector point)
Camera Camera
Kamera, joka näyttää ruudulla näkyvän osan kentästä. Kameraa voidaan siirtää, zoomata tai asettaa seu...
delegate void TouchHandler< T1, T2, T3, T4 >(Touch touch, T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
double Width
Näytön leveys x-suunnassa.
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
Vector ScreenToWorld(Vector point)
Muuntaa annetun pisteen ruutukoordinaateista maailmankoordinaatteihin.
Keyboard Keyboard
Näppäimistö.
Yleinen peliohjainluokka.