Commit Description:
Fix issue when adjusting width.
Commit Description:
Fix issue when adjusting width.
File last commit:
Show/Diff file:
Action:
isometric-park-fna/Engines/InputEngine.cs
234 lines | 6.5 KiB | text/x-csharp | CSharpLexer
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;
}
}
}