add some basic interfaces and supporting classes

This commit is contained in:
Gered 2013-08-14 19:16:24 -04:00
parent 71154b1840
commit bfcee93006
14 changed files with 529 additions and 0 deletions

View file

@ -43,6 +43,24 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ILooper.cs" />
<Compile Include="Input\IKeyboard.cs" />
<Compile Include="Input\IKeyboardListener.cs" />
<Compile Include="Input\Key.cs" />
<Compile Include="Input\MouseButton.cs" />
<Compile Include="Input\IMouse.cs" />
<Compile Include="Input\IMouseListener.cs" />
<Compile Include="Input\ITouchListener.cs" />
<Compile Include="Input\ITouchPointer.cs" />
<Compile Include="Input\ITouchScreen.cs" />
<Compile Include="IO\IFileSystem.cs" />
<Compile Include="Math\Rect.cs" />
<Compile Include="Math\Circle.cs" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<ItemGroup>
<Folder Include="Input\" />
<Folder Include="IO\" />
<Folder Include="Math\" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,9 @@
using System;
namespace Blarg.GameFramework
{
public interface ILooper
{
}
}

View file

@ -0,0 +1,13 @@
using System;
using System.IO;
namespace Blarg.GameFramework.IO
{
public interface IFileSystem
{
Stream Open(string filename);
string TranslateFilePath(string path);
string AssetsPath { get; }
}
}

View file

@ -0,0 +1,20 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface IKeyboard
{
bool HasPhysicalKeysForGameControls { get; }
bool IsDown(Key key);
bool IsPressed(Key key);
void Lock(Key key);
void OnPostUpdate(float delta);
void Reset();
void RegisterListener(IKeyboardListener listener);
void UnregisterListener(IKeyboardListener listener);
}
}

View file

@ -0,0 +1,10 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface IKeyboardListener
{
bool OnKeyDown(Key key);
bool OnKeyUp(Key key);
}
}

View file

@ -0,0 +1,23 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface IMouse
{
bool IsDown(MouseButton button);
bool IsPressed(MouseButton button);
void Lock(MouseButton button);
int X { get; }
int Y { get; }
int DeltaX { get; }
int DeltaY { get; }
void OnPostUpdate(float delta);
void Reset();
void RegisterListener(IMouseListener listener);
void UnregisterListener(IMouseListener listener);
}
}

View file

@ -0,0 +1,11 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface IMouseListener
{
bool OnMouseButtonDown(MouseButton button, int x, int y);
bool OnMouseButtonUp(MouseButton button, int x, int y);
bool OnMouseMove(int x, int y, int deltaX, int deltaY);
}
}

View file

@ -0,0 +1,11 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface ITouchListener
{
bool OnTouchDown(int id, int x, int y, bool isPrimary);
bool OnTouchUp(int id, bool isPrimary);
bool OnTouchMove(int id, int x, int y, int deltaX, int deltaY, bool isPrimary);
}
}

View file

@ -0,0 +1,19 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface ITouchPointer
{
int Id { get; }
int X { get; }
int Y { get; }
int DeltaX { get; }
int DeltaY { get; }
bool IsTouching { get; }
bool IsTouchingWithinArea(int left, int top, int right, int bottom);
bool IsTouchingWithinArea(ref Rect area);
bool IsTouchingWithinArea(int centerX, int centerY, int radius);
bool IsTouchingWithinArea(ref Circle area);
}
}

View file

@ -0,0 +1,23 @@
using System;
namespace Blarg.GameFramework.Input
{
public interface ITouchScreen
{
bool IsMultitouchAvailable { get; }
bool IsTouching { get; }
bool WasTapped { get; }
int DownPointersCount { get; }
ITouchPointer[] Pointers { get; }
ITouchPointer PrimaryPointer { get; }
ITouchPointer GetPointerById(int id);
void OnPostUpdate(float delta);
void Reset();
void RegisterListener(ITouchListener listener);
void UnregisterListener(ITouchListener listener);
}
}

View file

@ -0,0 +1,170 @@
using System;
namespace Blarg.GameFramework.Input
{
// this is based off OpenTK.Input.Key
// this enum needs to include values that can encompass buttons used
// by all framework supported platforms (even if some of them go
// unused on certain platforms)
public enum Key
{
Unknown = 0,
/*** Base keys **********/
LeftShift,
RightShift,
LeftCtrl,
RightCtrl,
LeftAlt,
RightAlt,
LeftWindows,
RightWindows,
Menu,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
F16,
F17,
F18,
F19,
F20,
F21,
F22,
F23,
F24,
F25,
F26,
F27,
F28,
F29,
F30,
F31,
F32,
F33,
F34,
F35,
Up,
Down,
Left,
Right,
Enter,
Escape,
Space,
Tab,
Backspace,
Insert,
Delete,
PageUp,
PageDown,
Home,
End,
CapsLock,
ScrollLock,
PrtScr,
Pause,
NumLock,
Clear,
Sleep,
Numpad0,
Numpad1,
Numpad2,
Numpad3,
Numpad4,
Numpad5,
Numpad6,
Numpad7,
Numpad8,
Numpad9,
NumpadDivide,
NumpadMultiply,
NumpadSubtract,
NumpadAdd,
NumpadDecimal,
NumpadEnter,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Num0,
Num1,
Num2,
Num3,
Num4,
Num5,
Num6,
Num7,
Num8,
Num9,
Tilde,
Minus,
Plus,
LeftBracket,
RightBracket,
Semicolon,
Quote,
Comma,
Period,
Slash,
BackSlash,
/*** Shared **************/
VolumeUp,
VolumeDown,
ButtonA,
ButtonB,
ButtonX,
ButtonY,
ButtonL,
ButtonR,
ButtonStart,
ButtonSelect,
/*** Android extras ******/
// some already exist above (home, menu, etc)
Back,
Search,
/*************************/
LastKey
}
}

View file

@ -0,0 +1,27 @@
using System;
namespace Blarg.GameFramework.Input
{
// this is based off OpenTK.Input.MouseButton
// this enum needs to include values that can encompass buttons used
// by all framework supported platforms (even if some of them go
// unused on certain platforms)
public enum MouseButton
{
Left,
Middle,
Right,
Button1,
Button2,
Button3,
Button4,
Button5,
Button6,
Button7,
Button8,
Button9,
LastButton
}
}

View file

@ -0,0 +1,68 @@
using System;
using System.Runtime.InteropServices;
namespace Blarg.GameFramework
{
[StructLayout(LayoutKind.Sequential)]
public struct Circle : IEquatable<Circle>
{
public int X;
public int Y;
public int Radius;
public int Diameter
{
get { return Radius * 2; }
}
public Circle(int x, int y, int radius)
{
X = x;
Y = y;
Radius = radius;
}
public bool Contains(int x, int y)
{
int squaredDistance = ((X - x) * (X - x)) + ((Y - y) * (Y - y));
int squaredRadius = Radius * Radius;
if (squaredDistance <= squaredRadius)
return true;
else
return false;
}
public static bool operator ==(Circle left, Circle right)
{
return left.Equals(right);
}
public static bool operator !=(Circle left, Circle right)
{
return !left.Equals(right);
}
public override bool Equals(object obj)
{
if (obj is Circle)
return this.Equals((Circle)obj);
else
return false;
}
public bool Equals(Circle other)
{
return (X == other.X && Y == other.Y && Radius == other.Radius);
}
public override int GetHashCode()
{
return X.GetHashCode() ^ Y.GetHashCode() ^ Radius.GetHashCode();
}
public override string ToString()
{
return String.Format("{{Center:{0},{1} Radius:{2}}}", X, Y, Radius);
}
}
}

View file

@ -0,0 +1,107 @@
using System;
using System.Runtime.InteropServices;
namespace Blarg.GameFramework
{
[StructLayout(LayoutKind.Sequential)]
public struct Rect : IEquatable<Rect>
{
public int Left;
public int Top;
public int Right;
public int Bottom;
public int Width
{
get { return Math.Abs(Right - Left); }
}
public int Height
{
get { return Math.Abs(Bottom - Top); }
}
public Rect(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public Rect(ref Rect r)
{
Left = r.Left;
Top = r.Top;
Right = r.Right;
Bottom = r.Bottom;
}
public Rect(Rect r)
: this(ref r)
{
}
public void Set(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public void Set(ref Rect r)
{
Left = r.Left;
Top = r.Top;
Right = r.Right;
Bottom = r.Bottom;
}
public void Set(Rect r)
{
Set(ref r);
}
public bool Contains(int x, int y)
{
if (x >= Left && y >= Top && x <= Right && y <= Bottom)
return true;
else
return false;
}
public static bool operator ==(Rect left, Rect right)
{
return left.Equals(right);
}
public static bool operator !=(Rect left, Rect right)
{
return !left.Equals(right);
}
public override bool Equals(object obj)
{
if (obj is Rect)
return this.Equals((Rect)obj);
else
return false;
}
public bool Equals(Rect other)
{
return (Left == other.Left && Top == other.Top && Right == other.Right && Bottom == other.Bottom);
}
public override int GetHashCode()
{
return Left.GetHashCode() ^ Top.GetHashCode() ^ Right.GetHashCode() ^ Bottom.GetHashCode();
}
public override string ToString()
{
return String.Format("{{{0}-{1},{2}-{3}}}", Left, Top, Right, Bottom);
}
}
}