Jypeli  9
The simple game programming library
Accelerometer.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using Jypeli.Controls;
4 
5 namespace Jypeli
6 {
8  {
9  }
10 
11  public abstract class Accelerometer : Controller<Vector3, AccelerometerDirection>
12  {
13  protected bool started = false;
14 
19 
23  public Vector Reading
24  {
25  get
26  {
27  return Project2d( CurrentState );
28  }
29  }
30 
35  {
36  get
37  {
38  return Project2d( PrevState );
39  }
40  }
41 
42  public Vector3 Reading3d
43  {
44  get
45  {
46  return CurrentState;
47  }
48  }
49 
50  public Vector3 PreviousReading3d
51  {
52  get
53  {
54  return PrevState;
55  }
56  }
57 
62  {
63  get { return Game.Device.DisplayOrientation; }
64  }
65 
69  public double DefaultSensitivity { get; private set; }
70 
74  public double DefaultAnalogSensitivity { get; private set; }
75 
79  public bool GesturesEnabled { get; set; }
80 
84  public int TimeBetweenTaps { get; set; }
85 
89  public int TimeBetweenShakes { get; set; }
90 
91  public Accelerometer()
92  {
93  Calibration = AccelerometerCalibration.HalfRightAngle;
94  DefaultSensitivity = 0.2;
96  GesturesEnabled = true;
97  TimeBetweenTaps = 300;
98  TimeBetweenShakes = 500;
99  }
100 
101  internal static Accelerometer Create()
102  {
103 #if ANDROID
104  return new Jypeli.Android.AndroidAccelerometer();
105 #else
106  return new DummyAccelerometer();
107 #endif
108  }
109 
110  internal virtual Vector Project2d( Vector3 spaceVector )
111  {
112  switch ( Calibration )
113  {
114  case AccelerometerCalibration.ZeroAngle:
115  return new Vector( spaceVector.X, spaceVector.Y );
116  case AccelerometerCalibration.HalfRightAngle:
117  return new Vector( spaceVector.X, spaceVector.Y - spaceVector.Z );
118  case AccelerometerCalibration.RightAngle:
119  return new Vector( spaceVector.X, -spaceVector.Z );
120  default:
121  return new Vector( spaceVector.X, spaceVector.Y );
122  }
123  }
124 
128  public virtual void Start()
129  {
130  if ( started )
131  return;
132 
133  started = true;
134  }
135 
139  public virtual void Stop()
140  {
141  if ( !started )
142  return;
143 
144  started = false;
145  }
146 
147  internal override Vector3 GetState()
148  {
149  return Vector3.Zero;
150  }
151 
156  public void PauseForDuration( double seconds )
157  {
158  Stop();
159  Timer.SingleShot( seconds, Start );
160  }
161 
162  private string GetDirectionName( AccelerometerDirection direction )
163  {
164  switch (direction)
165  {
166  case AccelerometerDirection.Up:
167  return "Tilt up";
168  case AccelerometerDirection.Down:
169  return "Tilt down";
170  case AccelerometerDirection.Left:
171  return "Tilt left";
172  case AccelerometerDirection.Right:
173  return "Tilt right";
174  case AccelerometerDirection.Tap:
175  return "Tap device";
176  case AccelerometerDirection.Shake:
177  return "Shake";
178  default:
179  return "Accelerometer";
180  }
181  }
182 
183  private ChangePredicate<Vector3> MakeTriggerRule( AccelerometerDirection direction, double trigger )
184  {
185  switch ( direction )
186  {
187  case AccelerometerDirection.Any:
188  return ( Vector3 prev, Vector3 curr ) => Project2d(curr).Magnitude > trigger;
189  case AccelerometerDirection.Left:
190  return ( Vector3 prev, Vector3 curr ) => Project2d( curr ).X < -trigger;
191  case AccelerometerDirection.Right:
192  return ( Vector3 prev, Vector3 curr ) => Project2d( curr ).X > trigger;
193  case AccelerometerDirection.Up:
194  return ( Vector3 prev, Vector3 curr ) => Project2d( curr ).Y > trigger;
195  case AccelerometerDirection.Down:
196  return ( Vector3 prev, Vector3 curr ) => Project2d( curr ).Y < -trigger;
197  /*case AccelerometerDirection.Shake:
198  return GestureTriggered( direction, trigger, 3 );
199  case AccelerometerDirection.Tap:
200  return GestureTriggered( direction, trigger, 1 );*/
201  default:
202  return NeverTrigger;
203  }
204  }
205 
206 #region Listen with no parameters
207 
208  public void Listen( AccelerometerDirection direction, Action handler, string helpText )
209  {
210  this.Listen( direction, DefaultSensitivity, handler, helpText );
211  }
212 
213  public void ListenAnalog( Action<AnalogState> handler, string helpText )
214  {
215  this.ListenAnalog( DefaultAnalogSensitivity, handler, helpText );
216  }
217 
218  public void Listen( AccelerometerDirection direction, AccelerometerSensitivity sensitivity, Action handler, string helpText )
219  {
220  this.Listen( direction, (int)sensitivity / 100, handler, helpText );
221  }
222 
223  public void ListenAnalog( AccelerometerSensitivity sensitivity, Action<AnalogState> handler, string helpText )
224  {
225  this.ListenAnalog( (int)sensitivity / 100, handler, helpText );
226  }
227 
228  public Listener Listen( AccelerometerDirection direction, double trigger, Action handler, string helpText )
229  {
230  Start();
231  ChangePredicate<Vector3> rule = MakeTriggerRule(direction, trigger);
232  return AddListener( rule, direction, GetDirectionName( direction ), helpText, handler );
233  }
234 
235  public Listener ListenAnalog( double trigger, Action<AnalogState> handler, string helpText )
236  {
237  Start();
238  ChangePredicate<Vector3> rule = ( Vector3 prev, Vector3 curr ) => Project2d(curr).Magnitude >= trigger;
239  Action analogHandler = delegate { handler( new AccelerometerAnalogState( this.Reading, this.PreviousReading ) ); };
240  return AddListener( rule, AccelerometerDirection.Any, "Accelerometer", helpText, analogHandler );
241  }
242 
243 #endregion
244  }
245 }
Jypeli.Accelerometer.MakeTriggerRule
ChangePredicate< Vector3 > MakeTriggerRule(AccelerometerDirection direction, double trigger)
Definition: Accelerometer.cs:183
Jypeli.Accelerometer.started
bool started
Definition: Accelerometer.cs:13
Jypeli.Timer.SingleShot
static void SingleShot(double seconds, Action onTimeout)
Kutsuu aliohjelmaa onTimeout annetun ajan kuluttua. Ajastin luodaan automaattisesti.
Definition: Timer.cs:220
Microsoft.Xna
Definition: JypeliContentManager.cs:6
Jypeli.Accelerometer.GetDirectionName
string GetDirectionName(AccelerometerDirection direction)
Definition: Accelerometer.cs:162
Jypeli.Listener
Ohjaintapahtumien kuuntelija.
Definition: Listener.cs:50
Jypeli.Accelerometer.ListenAnalog
void ListenAnalog(AccelerometerSensitivity sensitivity, Action< AnalogState > handler, string helpText)
Definition: Accelerometer.cs:223
Jypeli.Vector.X
double X
Definition: Vector.cs:312
Jypeli
Definition: Automobile.cs:5
Jypeli.Accelerometer.DefaultSensitivity
double DefaultSensitivity
Herkkyys jos kuunnellaan suuntia ja eleitä ilman erikseen annettua herkkyyttä.
Definition: Accelerometer.cs:69
Jypeli.Game.Device
static Device Device
Laite jolla peliä pelataan.
Definition: Game.cs:95
Jypeli.Accelerometer.Listen
void Listen(AccelerometerDirection direction, AccelerometerSensitivity sensitivity, Action handler, string helpText)
Definition: Accelerometer.cs:218
Microsoft
Definition: JypeliContentManager.cs:6
Jypeli.Accelerometer.ListenAnalog
void ListenAnalog(Action< AnalogState > handler, string helpText)
Definition: Accelerometer.cs:213
Microsoft.Xna.Framework
Definition: JypeliContentManager.cs:6
Jypeli.Accelerometer.Project2d
virtual Vector Project2d(Vector3 spaceVector)
Definition: Accelerometer.cs:110
Jypeli.AccelerometerAnalogState
Definition: AccelerometerAnalogState.cs:4
Jypeli.Accelerometer.Listen
void Listen(AccelerometerDirection direction, Action handler, string helpText)
Definition: Accelerometer.cs:208
Jypeli.AccelerometerCalibration
AccelerometerCalibration
Kalibrointi puhelimen kallistuksen nollakohdalle. (Asento missä puhelinta ei ole kallistettu yhtään)
Definition: AccelerometerCalibration.cs:8
Jypeli.AccelerometerDirection
AccelerometerDirection
Suunta/ele joka tunnistetaan.
Definition: AccelerometerDirection.cs:7
Jypeli.Accelerometer.PreviousReading
Vector PreviousReading
Kallistuksen edellinen suunta.
Definition: Accelerometer.cs:35
Jypeli.Accelerometer.GesturesEnabled
bool GesturesEnabled
Määrittää onko Shake ja Tap käytössä.
Definition: Accelerometer.cs:79
Jypeli.AccelerometerSensitivity
AccelerometerSensitivity
Herkkyys jolla kallistus/ele halutaan tunnistaa.
Definition: AccelerometerSensitivity.cs:7
Jypeli.Accelerometer.DefaultAnalogSensitivity
double DefaultAnalogSensitivity
Herkkyys jos kuunnellaan suuntia analogisesti ilman erikseen annettua herkkyyttä.
Definition: Accelerometer.cs:74
Jypeli.Controls
Definition: Controller.cs:34
Jypeli.Accelerometer.ListenAnalog
Listener ListenAnalog(double trigger, Action< AnalogState > handler, string helpText)
Definition: Accelerometer.cs:235
Jypeli.DisplayOrientation
Näytön asemointi.
Definition: DisplayOrientation.cs:9
Jypeli.Accelerometer.TimeBetweenShakes
int TimeBetweenShakes
Aika millisekunteina joka pitää kulua ravistusten välissä.
Definition: Accelerometer.cs:89
Jypeli.Accelerometer.Calibration
AccelerometerCalibration Calibration
Puhelimen kallistuksen nollakohta.
Definition: Accelerometer.cs:18
Jypeli.Accelerometer.Accelerometer
Accelerometer()
Definition: Accelerometer.cs:91
Jypeli.Accelerometer.Reading
Vector Reading
Kallistuksen tämänhetkinen suunta.
Definition: Accelerometer.cs:24
Jypeli.Accelerometer.TimeBetweenTaps
int TimeBetweenTaps
Aika millisekunteina joka pitää kulua napautusten välissä.
Definition: Accelerometer.cs:84
Jypeli.Accelerometer.Create
static Accelerometer Create()
Definition: Accelerometer.cs:101
Jypeli.Accelerometer.GetState
override Vector3 GetState()
Definition: Accelerometer.cs:147
Jypeli.Vector.Magnitude
double Magnitude
Vektorin pituus.
Definition: Vector.cs:319
Jypeli.Vector
2D-vektori.
Definition: Vector.cs:59
System
Definition: CFFauxAttributes.cs:29
Jypeli.Timer
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:38
Jypeli.Accelerometer
Definition: Accelerometer.cs:12
Jypeli.Accelerometer.Listen
Listener Listen(AccelerometerDirection direction, double trigger, Action handler, string helpText)
Definition: Accelerometer.cs:228
Jypeli.DummyAccelerometer
Definition: Accelerometer.cs:8
Jypeli.Game
Definition: Content.cs:46
Jypeli.Accelerometer.Stop
virtual void Stop()
Pysäyttää kiihtyvyysanturin.
Definition: Accelerometer.cs:139
Jypeli.Accelerometer.Start
virtual void Start()
Käynnistää kiihtyvyysanturin.
Definition: Accelerometer.cs:128
Jypeli.Accelerometer.Reading3d
Vector3 Reading3d
Definition: Accelerometer.cs:43
Jypeli.Controls.Controller
Ohjainlaite.
Definition: Controller.cs:39
Jypeli.Accelerometer.PauseForDuration
void PauseForDuration(double seconds)
Pysäyttää kiihtyvyysanturin annetuksi ajaksi.
Definition: Accelerometer.cs:156
Jypeli.Vector.Y
double Y
Definition: Vector.cs:313
Jypeli.Accelerometer.PreviousReading3d
Vector3 PreviousReading3d
Definition: Accelerometer.cs:51