31 using System.ComponentModel;
32 using System.Collections.Generic;
34 using Microsoft.Xna.Framework.Input;
35 using Microsoft.Xna.Framework.Graphics;
37 using XnaMouse = Microsoft.Xna.Framework.Input.Mouse;
48 private static int wcx = 800;
49 private static int wcy = 600;
54 public int ActiveChannels {
get {
return 1; } }
63 public bool IsCursorVisible
76 internal static Viewport Viewport
80 wcx = value.X + value.Width / 2;
81 wcy = value.Y + value.Height / 2;
88 public Vector PositionOnScreen
92 return newState.Position;
96 newState.Position = value;
97 XnaMouse.SetPosition( wcx + (
int)value.X, wcy - (
int)value.Y );
104 public Vector PositionOnWorld
119 public int WheelState
123 return newState.Wheel / 120;
131 public int WheelChange
135 return (newState.Wheel - oldState.Wheel) / 120;
144 internal override bool IsBufferEmpty()
147 return newState.AnyButtonDown;
152 base.Enable( listener => ( listener.MouseButton == button ) );
157 base.Disable( listener => ( listener.MouseButton == button ) );
162 return IsTriggered( listener );
174 return IsWheelTriggered( listener );
179 return IsButtonTriggered( listener );
182 return base.IsTriggered( listener );
189 return IsMotionTriggered(listener, out state);
192 return base.IsAnalogTriggered(listener, out state);
195 private bool IsButtonTriggered(
Listener listener )
200 if ( listener.GameObject != null && !IsCursorOn( listener.GameObject ) )
203 return listener.State ==
ButtonState.Irrelevant ||
MouseState.GetButtonState( oldState, newState, button ) == listener.State;
206 private bool IsWheelTriggered(
Listener listener )
208 return WheelChange != 0;
213 Debug.Assert( listener.Type ==
ListeningType.MouseMovement );
214 double xMovement = newState.X - oldState.X;
215 double yMovement = newState.Y - oldState.Y;
218 if ( movement.
Magnitude < listener.MovementTrigger )
224 state =
new AnalogState( listener.State, movement );
228 internal override MouseState GetCurrentState()
232 if ( !IsCursorVisible )
235 state.
X += oldState.X;
236 state.
Y += oldState.Y;
247 state.
X = xnaState.X - wcx;
248 state.
Y = -( xnaState.Y - wcy );
254 state.
Wheel = xnaState.ScrollWheelValue;
256 if ( !IsCursorVisible )
265 internal override string GetControlText(
Listener listener )
267 switch ( listener.Type )
270 return listener.MouseButton.ToString() +
" mouse";
274 return "Mouse wheel";
276 Debug.Assert(
false,
"Bad listener type for mouse" );
294 #region Listen with no parameters 348 l.MovementTrigger = trigger;
374 #region Listen with 1 parameter 418 l.MovementTrigger = trigger;
428 #region Listen with 2 parameters 472 l.MovementTrigger = trigger;
482 #region Listen with 3 parameters 484 public Listener Listen<T1, T2, T3>(
MouseButton b,
ButtonState state,
Handler<T1, T2, T3> handler,
string helpText, T1 p1, T2 p2, T3 p3 )
497 public Listener ListenOn<T1, T2, T3>(
IGameObject obj,
MouseButton b,
ButtonState state,
Handler<T1, T2, T3> handler, String helpText, T1 p1, T2 p2, T3 p3 )
526 l.MovementTrigger = trigger;
536 #region Listen with 4 parameters 538 public Listener Listen<T1, T2, T3, T4>(
MouseButton b,
ButtonState state,
Handler<T1, T2, T3, T4> handler,
string helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
541 Listener l =
new SimpleListener<T1, T2, T3, T4>(
this,
ListeningType.MouseButton, helpText, handler, p1, p2, p3, p4 );
551 public Listener ListenOn<T1, T2, T3, T4>(
IGameObject obj,
MouseButton b,
ButtonState state,
Handler<T1, T2, T3, T4> handler, String helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
554 Listener l =
new SimpleListener<T1, T2, T3, T4>(
this,
ListeningType.MouseButton, helpText, handler, p1, p2, p3, p4 );
565 public Listener ListenWheel<T1, T2, T3, T4>(
Handler<T1, T2, T3, T4> handler,
string helpText, T1 p1, T2 p2, T3 p3, T4 p4)
568 Listener l =
new SimpleListener<T1, T2, T3, T4>(
this,
ListeningType.MouseWheel, helpText, handler, p1, p2, p3, p4);
576 public Listener ListenMovement<T1, T2, T3, T4>(
double trigger,
AnalogHandler<T1, T2, T3, T4> handler,
string helpText, T1 p1, T2 p2, T3 p3, T4 p4 )
579 Listener l =
new AnalogListener<T1, T2, T3, T4>(
this,
ListeningType.MouseMovement, helpText, handler, p1, p2, p3, p4 );
580 l.MovementTrigger = trigger;
608 get {
return new Vector( X, Y ); }
618 get {
return ( ButtonMask & 1 ) > 0; }
619 set {
if ( value ) ButtonMask |= 1;
else ButtonMask &= ~1; }
622 public bool RightDown
624 get {
return ( ButtonMask & 2 ) > 0; }
625 set {
if ( value ) ButtonMask |= 2;
else ButtonMask &= ~2; }
628 public bool MiddleDown
630 get {
return ( ButtonMask & 4 ) > 0; }
631 set {
if ( value ) ButtonMask |= 4;
else ButtonMask &= ~4; }
636 get {
return ( ButtonMask & 8 ) > 0; }
637 set {
if ( value ) ButtonMask |= 8;
else ButtonMask &= ~8; }
642 get {
return ( ButtonMask & 16 ) > 0; }
643 set {
if ( value ) ButtonMask |= 16;
else ButtonMask &= ~16; }
646 public bool AnyButtonDown
648 get {
return ButtonMask > 0; }
655 for (
int i = 0; i < 5; i++ )
657 if ( button == buttons[i] )
658 return ( ButtonMask & bi ) > 0;
668 int oldDown = oldState.IsButtonDown( button ) ? 2 : 0;
669 int newDown = newState.IsButtonDown( button ) ? 1 : 0;
670 return states[oldDown + newDown];
double Magnitude
Vektorin pituus.
bool IsCursorOn(IGameObject obj)
Onko hiiren kursori annetun olion päällä.
Listener ListenMovement(double trigger, AnalogHandler handler, string helpText)
Kuuntelee hiiren liikettä.
Listener ListenWheel(Handler handler, string helpText)
Kuuntelee hiiren rullaa.
delegate void AnalogHandler< T1, T2 >(AnalogState analogState, T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
void Enable(MouseButton button)
ButtonState
Napin (minkä tahansa) asento.
override bool IsTriggered(Listener listener)
bool IsTriggeredOnChannel(int channel, Listener listener)
delegate void Handler< T1, T2, T3 >(T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
Peliluokka reaaliaikaisille peleille.
delegate void AnalogHandler(AnalogState analogState)
Ohjaintapahtumankäsittelijä ilman parametreja.
delegate void Handler< T1 >(T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
Parametrit analogisen ohjauksen (hiiren tai ohjaustikun) tapahtumalle.
void Disable(MouseButton button)
delegate void Handler()
Ohjaintapahtumankäsittelijä ilman parametreja.
override bool IsAnalogTriggered(Listener listener, out AnalogState state)
Yhteinen rajapinta kaikille peliolioille.
bool IsInside(Vector point)
delegate void Handler< T1, T2 >(T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
Camera Camera
Kamera, joka näyttää ruudulla näkyvän osan kentästä. Kameraa voidaan siirtää, zoomata tai asettaa seu...
delegate void AnalogHandler< T1, T2, T3 >(AnalogState analogState, T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
Listener Listen(MouseButton b, ButtonState state, Handler handler, string helpText)
Kuuntelee hiiren nappulan painalluksia.
delegate void Handler< T1, T2, T3, T4 >(T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
delegate void AnalogHandler< T1 >(AnalogState analogState, T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
Vector WorldToScreen(Vector point)
Muuntaa annetun pisteen maailmankoordinaateista ruutukoordinaatteihin.
Vector ScreenToWorld(Vector point)
Muuntaa annetun pisteen ruutukoordinaateista maailmankoordinaatteihin.
delegate void AnalogHandler< T1, T2, T3, T4 >(AnalogState analogState, T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
Yleinen peliohjainluokka.
Listener ListenOn(IGameObject obj, MouseButton b, ButtonState state, Handler handler, String helpText)
Kuuntelee hiirenpainalluksia annetun peliolion päällä.