153 lines
5.4 KiB
C#

using System;
using ANX.Framework.NonXNA;
using ANX.Framework.NonXNA.Development;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace ANX.Framework.Input
{
[PercentageComplete(100)]
[Developer("AstrorEnales")]
[TestState(TestStateAttribute.TestState.Tested)]
public struct GamePadButtons
{
private readonly ButtonState a;
private readonly ButtonState b;
private readonly ButtonState back;
private readonly ButtonState big;
private readonly ButtonState leftShoulder;
private readonly ButtonState leftStick;
private readonly ButtonState rightShoulder;
private readonly ButtonState rightStick;
private readonly ButtonState start;
private readonly ButtonState x;
private readonly ButtonState y;
#region Public
public ButtonState A
{
get { return a; }
}
public ButtonState B
{
get { return b; }
}
public ButtonState Back
{
get { return back; }
}
public ButtonState BigButton
{
get { return big; }
}
public ButtonState LeftShoulder
{
get { return leftShoulder; }
}
public ButtonState LeftStick
{
get { return leftStick; }
}
public ButtonState RightShoulder
{
get { return rightShoulder; }
}
public ButtonState RightStick
{
get { return rightStick; }
}
public ButtonState Start
{
get { return start; }
}
public ButtonState X
{
get { return x; }
}
public ButtonState Y
{
get { return y; }
}
#endregion
public GamePadButtons(Buttons buttons)
: this()
{
a = GetButtonState(buttons, Buttons.A);
b = GetButtonState(buttons, Buttons.B);
x = GetButtonState(buttons, Buttons.X);
y = GetButtonState(buttons, Buttons.Y);
leftStick = GetButtonState(buttons, Buttons.LeftStick);
rightStick = GetButtonState(buttons, Buttons.RightStick);
leftShoulder = GetButtonState(buttons, Buttons.LeftShoulder);
rightShoulder = GetButtonState(buttons, Buttons.RightShoulder);
back = GetButtonState(buttons, Buttons.Back);
start = GetButtonState(buttons, Buttons.Start);
big = GetButtonState(buttons, Buttons.BigButton);
}
public override bool Equals(object obj)
{
return obj is GamePadButtons && this == (GamePadButtons)obj;
}
public static bool operator ==(GamePadButtons lhs, GamePadButtons rhs)
{
return lhs.a == rhs.a && lhs.b == rhs.b && lhs.x == rhs.x && lhs.y == rhs.y &&
lhs.leftShoulder == rhs.leftShoulder && lhs.leftStick == rhs.leftStick &&
lhs.rightShoulder == rhs.rightShoulder && lhs.rightStick == rhs.rightStick &&
lhs.back == rhs.back && lhs.start == rhs.start && lhs.big == rhs.big;
}
public static bool operator !=(GamePadButtons lhs, GamePadButtons rhs)
{
return lhs.a != rhs.a || lhs.b != rhs.b || lhs.x != rhs.x || lhs.y != rhs.y ||
lhs.leftShoulder != rhs.leftShoulder || lhs.leftStick != rhs.leftStick ||
lhs.rightShoulder != rhs.rightShoulder || lhs.rightStick != rhs.rightStick ||
lhs.back != rhs.back || lhs.start != rhs.start || lhs.big != rhs.big;
}
private static ButtonState GetButtonState(Buttons buttons, Buttons button)
{
return (buttons & button) == button ? ButtonState.Pressed : ButtonState.Released;
}
public override int GetHashCode()
{
return HashHelper.GetGCHandleHashCode(this);
}
public override string ToString()
{
string buttons = A == ButtonState.Pressed ? "A" : "";
buttons += B == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "B" : "";
buttons += X == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "X" : "";
buttons += Y == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "Y" : "";
buttons += LeftShoulder == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "LeftShoulder" : "";
buttons += RightShoulder == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "RightShoulder" : "";
buttons += LeftStick == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "LeftStick" : "";
buttons += RightStick == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "RightStick" : "";
buttons += Start == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "Start" : "";
buttons += Back == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "Back" : "";
buttons += BigButton == ButtonState.Pressed ? (buttons.Length > 0 ? " " : "") + "BigButton" : "";
if (String.IsNullOrEmpty(buttons))
buttons = "None";
return String.Format("{{Buttons:{0}}}", buttons);
}
}
}