Modified the RecordingSystem to work with the new InputSystem. Fixes #532
This commit is contained in:
parent
dfa2a4665a
commit
a5dbfb721a
@ -58,12 +58,20 @@ namespace ANX.InputSystem.Recording
|
|||||||
{
|
{
|
||||||
public class Creator : IInputSystemCreator
|
public class Creator : IInputSystemCreator
|
||||||
{
|
{
|
||||||
|
//It not a good idea to have more than one RecordingDevice per Input Device, so we cache the request.
|
||||||
|
RecordingMouse mouse;
|
||||||
|
RecordingKeyboard keyboard;
|
||||||
|
RecordingGamePad gamePad;
|
||||||
|
RecordingMotionSensingDevice msd;
|
||||||
|
|
||||||
public IGamePad GamePad
|
public IGamePad GamePad
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||||
return new RecordingGamePad();
|
if (gamePad == null)
|
||||||
|
gamePad = new RecordingGamePad();
|
||||||
|
return gamePad;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +80,9 @@ namespace ANX.InputSystem.Recording
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||||
return new RecordingMouse();
|
if (mouse == null)
|
||||||
|
mouse = new RecordingMouse();
|
||||||
|
return mouse;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +91,9 @@ namespace ANX.InputSystem.Recording
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||||
return new RecordingKeyboard();
|
if (keyboard == null)
|
||||||
|
keyboard = new RecordingKeyboard();
|
||||||
|
return keyboard;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +103,9 @@ namespace ANX.InputSystem.Recording
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
AddInSystemFactory.Instance.PreventInputSystemChange();
|
AddInSystemFactory.Instance.PreventInputSystemChange();
|
||||||
return new RecordingMotionSensingDevice();
|
if (msd == null)
|
||||||
|
msd = new RecordingMotionSensingDevice();
|
||||||
|
return msd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -99,14 +99,31 @@ namespace ANX.InputSystem.Recording
|
|||||||
protected IMouse realMouse;
|
protected IMouse realMouse;
|
||||||
protected MouseRecordInfo recordInfo;
|
protected MouseRecordInfo recordInfo;
|
||||||
|
|
||||||
|
private IntPtr tmpWindowHandle = IntPtr.Zero;
|
||||||
|
|
||||||
public IntPtr WindowHandle
|
public IntPtr WindowHandle
|
||||||
{
|
{
|
||||||
get { return realMouse.WindowHandle; }
|
get
|
||||||
set { realMouse.WindowHandle = value; }
|
{
|
||||||
|
if (!isInitialized)
|
||||||
|
return IntPtr.Zero;
|
||||||
|
else
|
||||||
|
return realMouse.WindowHandle;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (!isInitialized) //The GameWindow might assign a WindowHadle even before the real Mouse is loaded. We save this Handle and assign it in Initialize()
|
||||||
|
tmpWindowHandle = value;
|
||||||
|
else
|
||||||
|
realMouse.WindowHandle = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public MouseState GetState() //The main recording/playback logic is placed here
|
public MouseState GetState() //The main recording/playback logic is placed here
|
||||||
{
|
{
|
||||||
|
if (!isInitialized)
|
||||||
|
throw new InvalidOperationException("This instance is not initialized! Refer to documenation for details.");
|
||||||
|
|
||||||
switch (RecordingState)
|
switch (RecordingState)
|
||||||
{
|
{
|
||||||
case RecordingState.None:
|
case RecordingState.None:
|
||||||
@ -216,7 +233,7 @@ namespace ANX.InputSystem.Recording
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Initialize(MouseRecordInfo info)
|
public void Initialize(MouseRecordInfo info)
|
||||||
{
|
{
|
||||||
this.Initialize(info, new MemoryStream(), AddInSystemFactory.Instance.GetDefaultCreator<IInputSystemCreator>().Mouse);
|
this.Initialize(info, new MemoryStream(), InputDeviceFactory.Instance.GetDefaultMouse());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -234,7 +251,7 @@ namespace ANX.InputSystem.Recording
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Initialize(MouseRecordInfo info, Stream bufferStream)
|
public void Initialize(MouseRecordInfo info, Stream bufferStream)
|
||||||
{
|
{
|
||||||
this.Initialize(info, bufferStream, AddInSystemFactory.Instance.GetDefaultCreator<IInputSystemCreator>().Mouse);
|
this.Initialize(info, bufferStream, InputDeviceFactory.Instance.GetDefaultMouse());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -245,6 +262,9 @@ namespace ANX.InputSystem.Recording
|
|||||||
{
|
{
|
||||||
realMouse = mouse;
|
realMouse = mouse;
|
||||||
|
|
||||||
|
if (tmpWindowHandle != IntPtr.Zero)
|
||||||
|
WindowHandle = tmpWindowHandle;
|
||||||
|
|
||||||
recordInfo = info;
|
recordInfo = info;
|
||||||
PacketLenght = GetPaketSize(info);
|
PacketLenght = GetPaketSize(info);
|
||||||
|
|
||||||
|
@ -68,7 +68,6 @@ namespace RecordingSample
|
|||||||
SpriteBatch spriteBatch;
|
SpriteBatch spriteBatch;
|
||||||
|
|
||||||
Texture2D logo;
|
Texture2D logo;
|
||||||
RecordingMouse mouse;
|
|
||||||
KeyboardState oldState;
|
KeyboardState oldState;
|
||||||
|
|
||||||
public Game1()
|
public Game1()
|
||||||
@ -81,10 +80,8 @@ namespace RecordingSample
|
|||||||
{
|
{
|
||||||
Window.Title = "Use Mouse to move arround, press r to record, p for playback and n for none";
|
Window.Title = "Use Mouse to move arround, press r to record, p for playback and n for none";
|
||||||
|
|
||||||
mouse = (RecordingMouse)AddInSystemFactory.Instance.GetCreator<IInputSystemCreator>("Recording").Mouse;
|
//We know the Mouse is a RecordingMouse - this is quite ugly... could this be improved?
|
||||||
mouse.Initialize(MouseRecordInfo.Position);
|
((RecordingMouse)AddInSystemFactory.Instance.GetDefaultCreator<IInputSystemCreator>().Mouse).Initialize(MouseRecordInfo.Position);
|
||||||
mouse.WindowHandle = Window.Handle;
|
|
||||||
mouse.EndOfPlaybackReached += new EventHandler((sender, args) => mouse.StopPlayback());
|
|
||||||
|
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
}
|
}
|
||||||
@ -94,32 +91,32 @@ namespace RecordingSample
|
|||||||
spriteBatch = new SpriteBatch(GraphicsDevice);
|
spriteBatch = new SpriteBatch(GraphicsDevice);
|
||||||
|
|
||||||
logo = Content.Load<Texture2D>(@"Textures/ANX.Framework.Logo_459x121");
|
logo = Content.Load<Texture2D>(@"Textures/ANX.Framework.Logo_459x121");
|
||||||
oldState = Keyboard.GetState();
|
//oldState = Keyboard.GetState();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update(GameTime gameTime)
|
protected override void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
KeyboardState newState = Keyboard.GetState();
|
//KeyboardState newState = Keyboard.GetState();
|
||||||
|
|
||||||
if (oldState.IsKeyUp(Keys.R) && newState.IsKeyDown(Keys.R))
|
//if (oldState.IsKeyUp(Keys.R) && newState.IsKeyDown(Keys.R))
|
||||||
mouse.StartRecording();
|
// mouse.StartRecording();
|
||||||
|
|
||||||
if (oldState.IsKeyUp(Keys.P) && newState.IsKeyDown(Keys.P))
|
//if (oldState.IsKeyUp(Keys.P) && newState.IsKeyDown(Keys.P))
|
||||||
{
|
//{
|
||||||
if (mouse.RecordingState == RecordingState.Recording)
|
// if (mouse.RecordingState == RecordingState.Recording)
|
||||||
mouse.StopRecording();
|
// mouse.StopRecording();
|
||||||
mouse.StartPlayback();
|
// mouse.StartPlayback();
|
||||||
}
|
//}
|
||||||
|
|
||||||
if (oldState.IsKeyUp(Keys.N) && newState.IsKeyDown(Keys.N))
|
//if (oldState.IsKeyUp(Keys.N) && newState.IsKeyDown(Keys.N))
|
||||||
{
|
//{
|
||||||
if (mouse.RecordingState == RecordingState.Recording)
|
// if (mouse.RecordingState == RecordingState.Recording)
|
||||||
mouse.StartRecording();
|
// mouse.StartRecording();
|
||||||
|
|
||||||
mouse.StopPlayback();
|
// mouse.StopPlayback();
|
||||||
}
|
//}
|
||||||
|
|
||||||
oldState = newState;
|
//oldState = newState;
|
||||||
|
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
}
|
}
|
||||||
@ -129,7 +126,7 @@ namespace RecordingSample
|
|||||||
GraphicsDevice.Clear(Color.CornflowerBlue);
|
GraphicsDevice.Clear(Color.CornflowerBlue);
|
||||||
|
|
||||||
spriteBatch.Begin();
|
spriteBatch.Begin();
|
||||||
spriteBatch.Draw(logo, new Rectangle(mouse.GetState().X, mouse.GetState().Y, 115, 30), Color.White);
|
spriteBatch.Draw(logo, new Rectangle(Mouse.GetState().X, Mouse.GetState().Y, 115, 30), Color.White);
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using ANX.Framework.NonXNA;
|
||||||
|
|
||||||
namespace RecordingSample
|
namespace RecordingSample
|
||||||
{
|
{
|
||||||
#if WINDOWS || XBOX
|
#if WINDOWS || XBOX
|
||||||
static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Der Haupteinstiegspunkt für die Anwendung.
|
|
||||||
/// </summary>
|
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
//This is technically unessasary, because there is only a reference to the RecordingSystem...
|
||||||
|
AddInSystemFactory.Instance.PreferredInputSystem = "Recording";
|
||||||
|
|
||||||
using (Game1 game = new Game1())
|
using (Game1 game = new Game1())
|
||||||
{
|
{
|
||||||
game.Run();
|
game.Run();
|
||||||
|
@ -83,6 +83,10 @@
|
|||||||
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
<Project>{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}</Project>
|
||||||
<Name>ANX.Framework</Name>
|
<Name>ANX.Framework</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\InputSystems\ANX.InputDevices.Windows.XInput\ANX.InputDevices.Windows.XInput.csproj">
|
||||||
|
<Project>{60D08399-244F-46A3-91F1-4CFD26D961A3}</Project>
|
||||||
|
<Name>ANX.InputDevices.Windows.XInput</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\InputSystems\ANX.InputSystem.Recording\ANX.InputSystem.Recording.csproj">
|
<ProjectReference Include="..\..\InputSystems\ANX.InputSystem.Recording\ANX.InputSystem.Recording.csproj">
|
||||||
<Project>{DB88DDEB-7281-405D-8FCA-5681B6B2BD7A}</Project>
|
<Project>{DB88DDEB-7281-405D-8FCA-5681B6B2BD7A}</Project>
|
||||||
<Name>ANX.InputSystem.Recording</Name>
|
<Name>ANX.InputSystem.Recording</Name>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user