|
|
|
|
|
using System;
|
|
|
using Microsoft.Xna.Framework;
|
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
using Microsoft.Xna.Framework.Input;
|
|
|
|
|
|
using Encompass;
|
|
|
|
|
|
using isometricparkfna.Messages;
|
|
|
using isometricparkfna.Components;
|
|
|
|
|
|
namespace isometricparkfna.Engines {
|
|
|
|
|
|
|
|
|
|
|
|
[Sends( typeof(ZoomCameraMessage),
|
|
|
typeof(MoveCameraMessage),
|
|
|
typeof(JumpCameraMessage),
|
|
|
typeof(ToggleWindowTypeMessage),
|
|
|
typeof(ToggleWindowMessage), //???
|
|
|
typeof(ToggleVisibilityMessage),
|
|
|
typeof(TogglePauseMessage),
|
|
|
typeof(GameRateMessage),
|
|
|
typeof(GameStateMessage))]
|
|
|
[Reads(typeof(WindowTypeComponent),
|
|
|
typeof(GameStateComponent),
|
|
|
typeof(VisibilityComponent))]
|
|
|
public class InputEngine : Engine
|
|
|
{
|
|
|
private KeyboardState keyboardPrev;
|
|
|
private MouseState mousePrev;
|
|
|
|
|
|
private GraphicsDevice graphicsDevice;
|
|
|
private Camera camera;
|
|
|
|
|
|
//Area to ignore:
|
|
|
private int menuBarHeight;
|
|
|
|
|
|
private int viewWidth;
|
|
|
private int viewHeight;
|
|
|
|
|
|
public InputEngine(int menuBarHeight, int viewWidth, int viewHeight, Camera camera,
|
|
|
GraphicsDevice graphicsDevice) {
|
|
|
//initialize to blank for now
|
|
|
this.keyboardPrev = new KeyboardState();
|
|
|
this.menuBarHeight = menuBarHeight;
|
|
|
this.viewWidth = viewWidth;
|
|
|
this.viewHeight = viewHeight;
|
|
|
this.camera = camera;
|
|
|
this.graphicsDevice = graphicsDevice;
|
|
|
}
|
|
|
|
|
|
public override void Update(double dt) {
|
|
|
|
|
|
var keyboardCur = Keyboard.GetState();
|
|
|
var mouseCur = Mouse.GetState();
|
|
|
var original_point = Vector2.Transform(new Vector2(mouseCur.X, mouseCur.Y),
|
|
|
Matrix.Invert(this.camera.get_transformation(this.graphicsDevice)));
|
|
|
|
|
|
bool isPlaying = false;
|
|
|
|
|
|
foreach (var entity in ReadEntities<GameStateComponent>())
|
|
|
{
|
|
|
var state = GetComponent<GameStateComponent>(entity).isPlaying;
|
|
|
isPlaying = state;
|
|
|
}
|
|
|
|
|
|
if (isPlaying)
|
|
|
{
|
|
|
#region camera_movement_keys
|
|
|
if (keyboardCur.IsKeyDown(Keys.Down))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage{ Movement = new Vector2(0, 2)});
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.Up))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage{ Movement = new Vector2(0, -2)});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.Left))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage{ Movement = new Vector2(-2, 0)});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.Right))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage {Movement = new Vector2(2, 0)});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.Subtract) && keyboardPrev.IsKeyUp(Keys.Subtract))
|
|
|
{
|
|
|
SendMessage(new ZoomCameraMessage {ZoomIn = false});
|
|
|
}
|
|
|
else if (keyboardCur.IsKeyDown(Keys.Add) && keyboardPrev.IsKeyUp(Keys.Add))
|
|
|
{
|
|
|
SendMessage(new ZoomCameraMessage {ZoomIn = true});
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.C) && keyboardPrev.IsKeyUp(Keys.C))
|
|
|
{
|
|
|
SendMessage(new JumpCameraMessage {Movement = Vector2.Zero });
|
|
|
}
|
|
|
#endregion camera_movement_keys
|
|
|
#region gamerate_keys
|
|
|
if (keyboardCur.IsKeyDown(Keys.P) && keyboardPrev.IsKeyUp(Keys.P) )
|
|
|
{
|
|
|
|
|
|
SendMessage(new TogglePauseMessage());
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.D0) && keyboardPrev.IsKeyUp(Keys.D0) )
|
|
|
{
|
|
|
SendMessage(new TogglePauseMessage());
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.D1) && keyboardPrev.IsKeyUp(Keys.D1) )
|
|
|
{
|
|
|
SendMessage(new GameRateMessage {
|
|
|
paused = false,
|
|
|
rate = 0});
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.D2) && keyboardPrev.IsKeyUp(Keys.D2) )
|
|
|
{
|
|
|
SendMessage(new GameRateMessage {
|
|
|
paused = false,
|
|
|
rate = 1});
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.D3) && keyboardPrev.IsKeyUp(Keys.D3) )
|
|
|
{
|
|
|
SendMessage(new GameRateMessage {
|
|
|
paused = false,
|
|
|
rate = 2});
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.D4) && keyboardPrev.IsKeyUp(Keys.D4) )
|
|
|
{
|
|
|
SendMessage(new GameRateMessage {
|
|
|
paused = false,
|
|
|
rate = 3});
|
|
|
}
|
|
|
#if DEBUG
|
|
|
if (keyboardCur.IsKeyDown(Keys.D5) && keyboardPrev.IsKeyUp(Keys.D5) )
|
|
|
{
|
|
|
SendMessage(new GameRateMessage {
|
|
|
paused = false,
|
|
|
rate = 4});
|
|
|
}
|
|
|
#endif
|
|
|
#endregion gamerate_keys
|
|
|
#region misc_keys
|
|
|
if (keyboardCur.IsKeyDown(Keys.OemBackslash) && keyboardPrev.IsKeyUp(Keys.OemBackslash))
|
|
|
{
|
|
|
SendMessage(new ToggleWindowTypeMessage{Window = Window.Debug});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.B) && keyboardPrev.IsKeyUp(Keys.B))
|
|
|
{
|
|
|
SendMessage(new ToggleWindowTypeMessage{Window = Window.Budget});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.F) && keyboardPrev.IsKeyUp(Keys.F))
|
|
|
{
|
|
|
SendMessage(new ToggleWindowTypeMessage{Window = Window.Forest});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.N) && keyboardPrev.IsKeyUp(Keys.N))
|
|
|
{
|
|
|
SendMessage(new ToggleWindowTypeMessage{Window = Window.News});
|
|
|
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.O) && keyboardPrev.IsKeyUp(Keys.O))
|
|
|
{
|
|
|
Logging.Trace("Contracts toggled.");
|
|
|
SendMessage(new ToggleWindowTypeMessage{Window = Window.Contracts});
|
|
|
}
|
|
|
if (keyboardCur.IsKeyDown(Keys.G) && keyboardPrev.IsKeyUp(Keys.G))
|
|
|
{
|
|
|
SendMessage(new ToggleVisibilityMessage{Element = Element.Grid});
|
|
|
|
|
|
}
|
|
|
#if DEBUG
|
|
|
if (keyboardCur.IsKeyDown(Keys.T) && keyboardPrev.IsKeyUp(Keys.T))
|
|
|
{
|
|
|
SendMessage(new ToggleVisibilityMessage{Element = Element.Trees});
|
|
|
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
if (keyboardCur.IsKeyDown(Keys.Escape) && keyboardPrev.IsKeyUp(Keys.Escape))
|
|
|
{
|
|
|
// SendMessage(new TogglePauseMessage());
|
|
|
SendMessage(new ToggleWindowTypeMessage{Window = Window.InGameMenu});
|
|
|
SendMessage(new GameRateMessage { paused = true, rate = null });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (keyboardCur.IsKeyDown(Keys.Q) && keyboardPrev.IsKeyUp(Keys.Q))
|
|
|
{
|
|
|
System.Console.WriteLine("Quitting");
|
|
|
Environment.Exit(0);
|
|
|
}
|
|
|
#endregion misc_keys
|
|
|
#region mouse_movement
|
|
|
|
|
|
|
|
|
if (MathUtils.BetweenExclusive(mouseCur.Y, menuBarHeight, 50 + menuBarHeight))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage {Movement = new Vector2(0, -4)});
|
|
|
}
|
|
|
else if (MathUtils.BetweenExclusive(mouseCur.Y, (this.viewHeight - 50 -menuBarHeight), this.viewHeight-menuBarHeight))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage {Movement = new Vector2(0, 4)});
|
|
|
}
|
|
|
if (MathUtils.BetweenExclusive(mouseCur.X, 0, 50))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage {Movement = new Vector2(-4, 0)});
|
|
|
}
|
|
|
else if (MathUtils.BetweenExclusive(mouseCur.X, (this.viewWidth - 50), this.viewWidth))
|
|
|
{
|
|
|
SendMessage(new MoveCameraMessage {Movement = new Vector2(4, 0)});
|
|
|
}
|
|
|
#endregion
|
|
|
#region mouse_click
|
|
|
|
|
|
if (mouseCur.RightButton == ButtonState.Pressed && mousePrev.RightButton == ButtonState.Released)
|
|
|
{
|
|
|
// this.camera.Jump(this.original_point);
|
|
|
SendMessage(new JumpCameraMessage{Movement = original_point});
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
this.keyboardPrev = keyboardCur;
|
|
|
this.mousePrev = mouseCur;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|