116 lines
4.4 KiB
C#
116 lines
4.4 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Input;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Text;
|
|
using static System.Windows.Forms.AxHost;
|
|
|
|
namespace TibzGame.Core.Inputs
|
|
{
|
|
public class InputManager
|
|
{
|
|
// classes that have actions should just read from these during their update() to get the latest state of all input devices.
|
|
public InputMapMenu menuInputs;
|
|
public InputMapGame[] gameInputs;
|
|
|
|
public InputMapMapEditor editorInputs;
|
|
public MouseInput mouseInput;
|
|
|
|
public Keys[] actionKeyMappings;
|
|
|
|
public bool isMouseMode = false;
|
|
public InputManager() {
|
|
|
|
menuInputs = new InputMapMenu();
|
|
gameInputs = new InputMapGame[8]; // effectively this will count as 8 "profiles" for controllers.
|
|
mouseInput = new MouseInput();
|
|
editorInputs = new InputMapMapEditor();
|
|
|
|
}
|
|
|
|
// getInputs() polls and populates input info for all controllers + keyboard.
|
|
// should be called every update() from the main game class.
|
|
public void getInputs() {
|
|
|
|
handleMouseInput();
|
|
handleKeyboardInput(-1);
|
|
}
|
|
|
|
public void ClearAllInputs() {
|
|
|
|
menuInputs.confirm.ClearButtonPresses();
|
|
menuInputs.cancel.ClearButtonPresses();
|
|
menuInputs.navUp.ClearButtonPresses();
|
|
menuInputs.navDown.ClearButtonPresses();
|
|
menuInputs.navLeft.ClearButtonPresses();
|
|
menuInputs.navRight.ClearButtonPresses();
|
|
|
|
menuInputs.special1.ClearButtonPresses();
|
|
menuInputs.special2.ClearButtonPresses();
|
|
menuInputs.special3.ClearButtonPresses();
|
|
menuInputs.special4.ClearButtonPresses();
|
|
menuInputs.special5.ClearButtonPresses();
|
|
}
|
|
|
|
|
|
private void handleKeyboardInput(short playerindex) {
|
|
|
|
//Default Keyboard Menu Inputs
|
|
KeyboardState kbState = Keyboard.GetState();
|
|
menuInputs.confirm.RegisterButtonPress(kbState.IsKeyDown(Keys.Enter));
|
|
menuInputs.cancel.RegisterButtonPress(kbState.IsKeyDown(Keys.Escape));
|
|
menuInputs.navUp.RegisterButtonPress(kbState.IsKeyDown(Keys.Up));
|
|
menuInputs.navDown.RegisterButtonPress(kbState.IsKeyDown(Keys.Down));
|
|
menuInputs.navLeft.RegisterButtonPress(kbState.IsKeyDown(Keys.Left));
|
|
menuInputs.navRight.RegisterButtonPress(kbState.IsKeyDown(Keys.Right));
|
|
|
|
menuInputs.special1.RegisterButtonPress(kbState.IsKeyDown(Keys.D1));
|
|
menuInputs.special2.RegisterButtonPress(kbState.IsKeyDown(Keys.D2));
|
|
menuInputs.special3.RegisterButtonPress(kbState.IsKeyDown(Keys.D3));
|
|
menuInputs.special4.RegisterButtonPress(kbState.IsKeyDown(Keys.D4));
|
|
menuInputs.special5.RegisterButtonPress(kbState.IsKeyDown(Keys.D5));
|
|
|
|
|
|
// in update function just check bool for pressed state, for example:
|
|
// menuInputs.confirm.isPressed
|
|
|
|
if (!isMouseMode)
|
|
{
|
|
editorInputs.registerButtons(kbState);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
private void handleMouseInput() // no controller port needed
|
|
{
|
|
|
|
MouseState mouseState = Mouse.GetState();
|
|
mouseInput.leftClick.RegisterButtonPress(mouseState.LeftButton == ButtonState.Pressed);
|
|
mouseInput.rightClick.RegisterButtonPress(mouseState.RightButton == ButtonState.Pressed);
|
|
mouseInput.middleClick.RegisterButtonPress(mouseState.MiddleButton == ButtonState.Pressed);
|
|
mouseInput.x = mouseState.X;
|
|
mouseInput.y = mouseState.Y;
|
|
mouseInput.scrollWheelValue = mouseState.ScrollWheelValue;
|
|
|
|
if (isMouseMode)
|
|
{
|
|
menuInputs.confirm.RegisterButtonPress(mouseState.LeftButton == ButtonState.Pressed);
|
|
menuInputs.cancel.RegisterButtonPress(mouseState.RightButton == ButtonState.Pressed);
|
|
editorInputs.confirm.RegisterButtonPress(mouseState.LeftButton == ButtonState.Pressed);
|
|
editorInputs.cancel.RegisterButtonPress(mouseState.RightButton == ButtonState.Pressed);
|
|
|
|
if (Keyboard.GetState().GetPressedKeys().Length > 0)
|
|
{
|
|
this.isMouseMode = false;
|
|
}
|
|
}
|
|
|
|
|
|
// Debug.WriteLine("MOUSE X: "+ mouseInput.x + " MOUSE Y: " + mouseInput.y);
|
|
|
|
}
|
|
}
|
|
}
|