Implemented structural equality
This commit is contained in:
parent
42e6a96a43
commit
7bab950cc0
2 changed files with 101 additions and 11 deletions
|
@ -33,7 +33,7 @@ using System.Text;
|
|||
|
||||
namespace OpenTK.Input
|
||||
{
|
||||
public struct JoystickCapabilities
|
||||
public struct JoystickCapabilities : IEquatable<JoystickCapabilities>
|
||||
{
|
||||
byte axis_count;
|
||||
byte button_count;
|
||||
|
@ -69,6 +69,33 @@ namespace OpenTK.Input
|
|||
get { return button_count; }
|
||||
}
|
||||
|
||||
public bool IsConnected
|
||||
{
|
||||
get { return is_connected; }
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return String.Format(
|
||||
"{{Axes: {0}; Buttons: {1}; IsConnected: {2}}}",
|
||||
AxisCount, ButtonCount, IsConnected);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return
|
||||
AxisCount.GetHashCode() ^
|
||||
ButtonCount.GetHashCode() ^
|
||||
IsConnected.GetHashCode();
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return
|
||||
obj is JoystickCapabilities &&
|
||||
Equals((JoystickCapabilities)obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Members
|
||||
|
@ -80,10 +107,16 @@ namespace OpenTK.Input
|
|||
|
||||
#endregion
|
||||
|
||||
public bool IsConnected
|
||||
#region IEquatable<JoystickCapabilities> Members
|
||||
|
||||
public bool Equals(JoystickCapabilities other)
|
||||
{
|
||||
get { return is_connected; }
|
||||
return
|
||||
AxisCount == other.AxisCount &&
|
||||
ButtonCount == other.ButtonCount &&
|
||||
IsConnected == other.IsConnected;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ using System.Text;
|
|||
|
||||
namespace OpenTK.Input
|
||||
{
|
||||
public struct JoystickState
|
||||
public struct JoystickState : IEquatable<JoystickState>
|
||||
{
|
||||
// If we ever add more values to JoystickAxis or JoystickButton
|
||||
// then we'll need to increase these limits.
|
||||
|
@ -59,13 +59,7 @@ namespace OpenTK.Input
|
|||
float value = 0.0f;
|
||||
if (axis >= 0 && axis < MaxAxes)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
fixed (short* paxis = axes)
|
||||
{
|
||||
value = *(paxis + axis) * ConversionFactor;
|
||||
}
|
||||
}
|
||||
value = GetAxisUnsafe(axis) * ConversionFactor;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -94,6 +88,38 @@ namespace OpenTK.Input
|
|||
get { return is_connected; }
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < MaxAxes; i++)
|
||||
{
|
||||
sb.Append(" ");
|
||||
sb.Append(GetAxis(i));
|
||||
}
|
||||
return String.Format(
|
||||
"{{Axes:{0}; Buttons: {1}; IsConnected: {2}}}",
|
||||
sb.ToString(),
|
||||
Convert.ToString((int)buttons, 2),
|
||||
IsConnected);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
int hash = buttons.GetHashCode() ^ IsConnected.GetHashCode();
|
||||
for (int i = 0; i < MaxAxes; i++)
|
||||
{
|
||||
hash ^= GetAxisUnsafe(i).GetHashCode();
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return
|
||||
obj is JoystickState &&
|
||||
Equals((JoystickState)obj);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Internal Members
|
||||
|
@ -132,5 +158,36 @@ namespace OpenTK.Input
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Members
|
||||
|
||||
short GetAxisUnsafe(int index)
|
||||
{
|
||||
unsafe
|
||||
{
|
||||
fixed (short* paxis = axes)
|
||||
{
|
||||
return *(paxis + index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IEquatable<JoystickState> Members
|
||||
|
||||
public bool Equals(JoystickState other)
|
||||
{
|
||||
bool equals =
|
||||
buttons == other.buttons &&
|
||||
IsConnected == other.IsConnected;
|
||||
for (int i = 0; equals && i < MaxAxes; i++)
|
||||
{
|
||||
equals &= GetAxisUnsafe(i) == other.GetAxisUnsafe(i);
|
||||
}
|
||||
return equals;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue