diff --git a/isometric-park-fna/Engines/CameraBridgeEngine.cs b/isometric-park-fna/Engines/CameraBridgeEngine.cs --- a/isometric-park-fna/Engines/CameraBridgeEngine.cs +++ b/isometric-park-fna/Engines/CameraBridgeEngine.cs @@ -6,7 +6,8 @@ namespace isometricparkfna.Engines { - [Receives(typeof(ZoomCameraMessage), typeof(MoveCameraMessage))] + [Receives(typeof(ZoomCameraMessage), typeof(MoveCameraMessage), + typeof(JumpCameraMessage))] class CameraBridgeEngine : Engine { private Camera Camera; @@ -34,7 +35,10 @@ foreach (ref readonly var message in ReadMessages()) { this.Camera.Move(message.Movement); - + } + foreach (ref readonly var message in ReadMessages()) + { + this.Camera.Jump(message.Movement); } } diff --git a/isometric-park-fna/Engines/InputEngine.cs b/isometric-park-fna/Engines/InputEngine.cs --- a/isometric-park-fna/Engines/InputEngine.cs +++ b/isometric-park-fna/Engines/InputEngine.cs @@ -13,6 +13,7 @@ [Sends( typeof(ZoomCameraMessage), typeof(MoveCameraMessage), + typeof(JumpCameraMessage), typeof(ToggleWindowMessage), typeof(ToggleVisibilityMessage), typeof(TogglePauseMessage), @@ -23,11 +24,16 @@ //Area to ignore: private int menuBarHeight; + + private int viewWidth; + private int viewHeight; - public InputEngine(int menuBarHeight) { + public InputEngine(int menuBarHeight, int viewWidth, int viewHeight) { //initialize to blank for now this.keyboardPrev = new KeyboardState(); - menuBarHeight = menuBarHeight; + this.menuBarHeight = menuBarHeight; + this.viewWidth = viewWidth; + this.viewHeight = viewHeight; } public override void Update(double dt) { @@ -63,6 +69,11 @@ { 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) ) @@ -153,11 +164,27 @@ // this.camera.Jump(Vector2.Zero); } - if (keyboardCur.IsKeyDown(Keys.OemBackslash) && keyboardPrev.IsKeyUp(Keys.OemBackslash) && keyboardCur.IsKeyDown(Keys.LeftShift)) - { - // sound.Play(volume, pitch, pan); - } #endregion misc_keys +#region mouse_movement + + + if (MathUtils.Between(mouseCur.Y, menuBarHeight, 50 + menuBarHeight)) + { + SendMessage(new MoveCameraMessage {Movement = new Vector2(0, -4)}); + } + else if (MathUtils.Between(mouseCur.Y, (this.viewHeight - 50 -menuBarHeight), this.viewHeight-menuBarHeight)) + { + SendMessage(new MoveCameraMessage {Movement = new Vector2(0, 4)}); + } + if (MathUtils.Between(mouseCur.X, 0, 50)) + { + SendMessage(new MoveCameraMessage {Movement = new Vector2(-4, 0)}); + } + else if (MathUtils.Between(mouseCur.X, (this.viewWidth - 50), this.viewWidth)) + { + SendMessage(new MoveCameraMessage {Movement = new Vector2(4, 0)}); + } +#endregion this.keyboardPrev = keyboardCur; } diff --git a/isometric-park-fna/FNAGame.cs b/isometric-park-fna/FNAGame.cs --- a/isometric-park-fna/FNAGame.cs +++ b/isometric-park-fna/FNAGame.cs @@ -184,7 +184,7 @@ // WorldBuilder.AddGeneralRenderer(new BudgetWindowRenderer(this.batch, this.monoFont)); - WorldBuilder.AddEngine(new InputEngine(Menu.MENU_BAR_HEIGHT)); + WorldBuilder.AddEngine(new InputEngine(Menu.MENU_BAR_HEIGHT, FNAGame.width, FNAGame.height)); WorldBuilder.AddEngine(new GameBridgeEngine(this)); WorldBuilder.AddEngine(new SimulationBridgeEngine(this.simulation)); WorldBuilder.AddEngine(new CameraBridgeEngine(this.camera)); @@ -344,11 +344,6 @@ #region input // #region misc_keys - if (keyboardCur.IsKeyDown(Keys.C) && keyboardPrev.IsKeyUp(Keys.C)) - { - this.camera.Jump(Vector2.Zero); - - } if (keyboardCur.IsKeyDown(Keys.OemBackslash) && keyboardPrev.IsKeyUp(Keys.OemBackslash) && keyboardCur.IsKeyDown(Keys.LeftShift)) { sound.Play(volume, pitch, pan); @@ -358,26 +353,6 @@ MouseState mouseCur = Mouse.GetState(); this.original_point = Vector2.Transform(new Vector2(mouseCur.X, mouseCur.Y), Matrix.Invert(camera.get_transformation(GraphicsDevice))); - var menuBarHeight = Menu.MENU_BAR_HEIGHT; - - - if (MathUtils.Between(mouseCur.X, 0, 50)) - { - this.camera.Move(new Vector2(-4, 0)); - } - else if (MathUtils.Between(mouseCur.X, (FNAGame.width - 50), FNAGame.width)) - { - this.camera.Move(new Vector2(4, 0)); - } - - if (MathUtils.Between(mouseCur.Y, menuBarHeight, 50 + menuBarHeight)) - { - this.camera.Move(new Vector2(0, -4)); - } - else if (MathUtils.Between(mouseCur.Y, (FNAGame.height - 50 -menuBarHeight), FNAGame.height-menuBarHeight)) - { - this.camera.Move(new Vector2(0, 4)); - } #if DEBUG if (mouseCur.RightButton == ButtonState.Pressed) diff --git a/isometric-park-fna/Messages/JumpCameraMessage.cs b/isometric-park-fna/Messages/JumpCameraMessage.cs new file mode 100644 --- /dev/null +++ b/isometric-park-fna/Messages/JumpCameraMessage.cs @@ -0,0 +1,11 @@ + + +using Microsoft.Xna.Framework; +using Encompass; + +namespace isometricparkfna.Messages { + public struct JumpCameraMessage : IMessage + { + public Vector2 Movement; + } +}