// This file is part of the Noddybox.Emulation C# suite. // // Noddybox.Emulation is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Noddybox.Emulation is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Noddybox.Emulation. If not, see . // // Copyright (c) 2012 Ian Cowburn // using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input.Touch; namespace Noddybox.Emulation.Xna.Input.Joystick { /// /// Displays and drives the joystick. Unlike the keyboard this is not /// not done event driven, but as a clasic Joystick interface. /// public class JoystickDriver { #region Private data private Texture2D backgroundImage; private Texture2D joystickImage; private Texture2D buttonImage; private Vector2 position; private JoystickState state; #endregion #region Private members #endregion #region Public properties /// /// Get the current state of the joystick and fire buttons. /// public JoystickState State {get {return state;}} #endregion #region Public members /// /// Updates the keyboard. Note that this will consume all the key press events. /// public void Update() { foreach (TouchLocation t in TouchPanel.GetState()) { // int x = (int)t.Position.X; // int y = (int)t.Position.Y; // int f = 0; // KeyState key = null; // if (t.State == TouchLocationState.Pressed) // { // for(f = 0; f < keymapSize && key == null; f++) // { // if (keymapPos[f].Contains(x, y)) // { // key = keymapState[f]; // } // } // if (key != null) // { // key.TouchId = t.Id; // if (key.IsSticky) // { // key.IsPressed = !key.IsPressed; // } // else // { // key.IsPressed = true; // } // if (KeyEvent != null) // { // KeyEvent(this, new KeyPressEventArgs() {Key = key.Symbol, Pressed = key.IsPressed}); // } // } // } // else if (t.State == TouchLocationState.Released) // { // for(f = 0; f < keymapSize && key == null; f++) // { // if (keymapState[f].TouchId == t.Id) // { // key = keymapState[f]; // } // } // if (key != null) // { // if (!key.IsSticky) // { // key.IsPressed = false; // if (KeyEvent != null) // { // KeyEvent(this, new KeyPressEventArgs() {Key = key.Symbol, Pressed = key.IsPressed}); // } // } // } // } // // If no key handled, pass on the event // // // if (key == null && keymapState.Where(r => r.TouchId == t.Id).Count() == 0) // { // if (TouchEvent != null) // { // TouchEvent(this, new TouchLocationEventArgs() {Location = t}); // } // } } } /// /// Draw the keyboard /// /// public void Draw(SpriteBatch spriteBatch) { //spriteBatch.Draw(image, position, Color.White); //for(int f = 0; f < keymapSize; f++) //{ // if (keymapState[f].IsPressed) // { // spriteBatch.Draw(overlay, keymapPos[f], new Color(200, 200, 0, 25)); // } //} } #endregion #region Constructors /// /// Constructor. /// /// The graphics device to associate textures with. /// The image for the joystick background. /// The image for the joystick knob. /// The image for a joystick button. /// Where to draw and offset the joystick to. public JoystickDriver(GraphicsDevice graphics, Texture2D backgroundImage, Texture2D joystickImage, Texture2D buttonImage, Vector2 position) { this.backgroundImage = backgroundImage; this.joystickImage = joystickImage; this.buttonImage = buttonImage; this.position = position; this.state = JoystickState.None; } #endregion } }