KavTest/KavTest/Engines/InputEngine.cs

68 lines
2.1 KiB
C#

using Encompass;
using KavTest.Components;
using KavTest.Messages;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
namespace KavTest.Engines
{
[Reads(typeof(CameraComponent))]
[Sends(
typeof(MoveCameraMessage),
typeof(RotateCameraMessage)
)]
public class InputEngine : Engine
{
private int centerX;
private int centerY;
public InputEngine(int centerX, int centerY)
{
this.centerX = centerX;
this.centerY = centerY;
Mouse.SetPosition(centerX, centerY);
System.Console.WriteLine("initialize mouse position");
System.Console.WriteLine(Mouse.GetState().X);
System.Console.WriteLine(Mouse.GetState().Y);
}
public override void Update(double dt)
{
var keyboardState = Keyboard.GetState();
var mouseState = Mouse.GetState();
System.Console.WriteLine("mouse position");
System.Console.WriteLine(mouseState.X);
System.Console.WriteLine(mouseState.Y);
if (keyboardState.IsKeyDown(Keys.W))
{
SendMessage(new MoveCameraMessage(new Vector3(0, 0, -5)));
}
if (keyboardState.IsKeyDown(Keys.A))
{
SendMessage(new MoveCameraMessage(new Vector3(-5, 0, 0)));
}
if (keyboardState.IsKeyDown(Keys.S))
{
SendMessage(new MoveCameraMessage(new Vector3(0, 0, 5)));
}
if (keyboardState.IsKeyDown(Keys.D))
{
SendMessage(new MoveCameraMessage(new Vector3(5, 0, 0)));
}
var mouseMovement = new Vector2(centerX - mouseState.X, centerY - mouseState.Y);
Mouse.SetPosition(centerX, centerY);
if (SomeComponent<CameraComponent>())
{
var cameraEntity = ReadEntity<CameraComponent>();
SendMessage(new RotateCameraMessage(cameraEntity, mouseMovement.X, mouseMovement.Y));
}
}
}
}