StrategyRPG/Johnmagotchi/Core/InputManager/InputManager.cs

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);
}
}
}