mirror of
https://github.com/TheRavenwoodArts/LunaLightXMG.git
synced 2026-07-30 21:55:03 -07:00
115 lines
4.5 KiB
C#
115 lines
4.5 KiB
C#
using System;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Input;
|
|
|
|
namespace LunaLightXMG
|
|
{
|
|
public class PlayerInput
|
|
{
|
|
public bool HasControl { get; set; }
|
|
public bool Controller { get; set; }
|
|
public bool CanDash { get; set; }
|
|
public float KeyUp { get; private set; }
|
|
public float KeyDown { get; private set; }
|
|
public float KeyRight { get; private set; }
|
|
public float KeyLeft { get; private set; }
|
|
public bool KeyJump { get; private set; }
|
|
public bool KeyDash { get; private set; }
|
|
public bool KeyAttack { get; private set; }
|
|
public bool KeyWallClimb { get; private set; }
|
|
|
|
public void Update()
|
|
{
|
|
if (HasControl)
|
|
{
|
|
if (Controller)
|
|
{
|
|
// If using controller, switch to keyboard by pressing any key
|
|
if (Keyboard.GetState().GetPressedKeys().Length > 0)
|
|
{
|
|
// TODO: Insert logic to create the objMouseJoyStick instance
|
|
Controller = false;
|
|
}
|
|
|
|
// Zero input each step
|
|
KeyUp = 0;
|
|
KeyDown = 0;
|
|
KeyRight = 0;
|
|
KeyLeft = 0;
|
|
KeyJump = false;
|
|
KeyDash = false;
|
|
KeyAttack = false;
|
|
KeyWallClimb = false;
|
|
|
|
// Controller input (assuming Xbox controller)
|
|
GamePadState gamepadState = GamePad.GetState(PlayerIndex.One);
|
|
if (gamepadState.IsConnected)
|
|
{
|
|
float axisLH = gamepadState.ThumbSticks.Left.X;
|
|
float axisLV = gamepadState.ThumbSticks.Left.Y;
|
|
|
|
if (Math.Abs(axisLH) > 0.5f || Math.Abs(axisLV) > 0.5f)
|
|
{
|
|
KeyDown = Math.Max(axisLV, 0);
|
|
KeyUp = Math.Abs(Math.Min(axisLV, 0));
|
|
KeyLeft = Math.Abs(Math.Min(axisLH, 0)) > 0.5f ? Math.Abs(Math.Min(axisLH, 0)) : 0;
|
|
KeyRight = Math.Max(axisLH, 0) > 0.5f ? Math.Max(axisLH, 0) : 0;
|
|
}
|
|
|
|
KeyJump = gamepadState.Buttons.A == ButtonState.Pressed;
|
|
KeyWallClimb = gamepadState.Buttons.LeftShoulder == ButtonState.Pressed;
|
|
KeyDash = gamepadState.Buttons.RightShoulder == ButtonState.Pressed;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// If using keyboard, switch to controller by pressing the start button on the gamepad
|
|
GamePadState gamepadState = GamePad.GetState(PlayerIndex.One);
|
|
if (gamepadState.IsConnected && gamepadState.Buttons.Start == ButtonState.Pressed)
|
|
{
|
|
// TODO: Insert logic to destroy the objMouseJoyStick instance
|
|
Controller = true;
|
|
}
|
|
|
|
// Keyboard input
|
|
KeyboardState keyboardState = Keyboard.GetState();
|
|
|
|
KeyLeft = keyboardState.IsKeyDown(Keys.A) ? 1 : 0;
|
|
KeyRight = keyboardState.IsKeyDown(Keys.D) ? 1 : 0;
|
|
KeyUp = keyboardState.IsKeyDown(Keys.W) ? 1 : 0;
|
|
KeyDown = keyboardState.IsKeyDown(Keys.S) ? 1 : 0;
|
|
|
|
// Prevent superposition
|
|
if (KeyLeft != 0 && KeyRight != 0)
|
|
{
|
|
KeyLeft = 0;
|
|
KeyRight = 0;
|
|
}
|
|
if (KeyUp != 0 && KeyDown != 0)
|
|
{
|
|
KeyUp = 0;
|
|
KeyDown = 0;
|
|
}
|
|
|
|
KeyJump = keyboardState.IsKeyDown(Keys.Space);
|
|
KeyDash = Mouse.GetState().LeftButton == ButtonState.Pressed;
|
|
//KeyAttack = Mouse.GetState().RightButton == ButtonState.Pressed;
|
|
KeyWallClimb = keyboardState.IsKeyDown(Keys.LeftShift);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Zero input if player has no control
|
|
KeyUp = 0;
|
|
KeyDown = 0;
|
|
KeyRight = 0;
|
|
KeyLeft = 0;
|
|
KeyJump = false;
|
|
KeyDash = false;
|
|
KeyAttack = false;
|
|
KeyWallClimb = false;
|
|
}
|
|
}
|
|
}
|
|
}
|