From 11aef39e29d6eb1dddf059071f2d4952372b47d4 Mon Sep 17 00:00:00 2001 From: Simon Holmberg Date: Thu, 27 Sep 2012 23:08:11 +0200 Subject: [PATCH] Camera functions to convert between world and screen coordinates --- DepthsBelow/DepthsBelow/Camera.cs | 11 ++++++++++- DepthsBelow/DepthsBelow/MouseInput.cs | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/DepthsBelow/DepthsBelow/Camera.cs b/DepthsBelow/DepthsBelow/Camera.cs index 07c2db3..86a2af9 100644 --- a/DepthsBelow/DepthsBelow/Camera.cs +++ b/DepthsBelow/DepthsBelow/Camera.cs @@ -28,6 +28,16 @@ namespace DepthsBelow Speed = 300; } + public Vector2 ScreenToWorld(Vector2 screenPos) + { + return Vector2.Transform(screenPos, Matrix.Invert(Transform)); + } + + public Vector2 WorldToScreen(Vector2 worldPos) + { + return Vector2.Transform(worldPos, Transform); + } + public void Update(GameTime gameTime) { float elapsed = gameTime.ElapsedGameTime.Milliseconds / 1000.0f; @@ -48,7 +58,6 @@ namespace DepthsBelow Matrix.CreateTranslation(new Vector3(-Position.X, -Position.Y, 0)) * Matrix.CreateRotationZ(Rotation) * Matrix.CreateScale(Zoom) - //* Matrix.CreateTranslation(new Vector3( ; } } diff --git a/DepthsBelow/DepthsBelow/MouseInput.cs b/DepthsBelow/DepthsBelow/MouseInput.cs index 4c29695..eda4116 100644 --- a/DepthsBelow/DepthsBelow/MouseInput.cs +++ b/DepthsBelow/DepthsBelow/MouseInput.cs @@ -68,9 +68,10 @@ namespace DepthsBelow } // Grid highlighting - Point currentGrid = Grid.ScreenToGrid(new Vector2(ms.X + core.camera.Position.X, ms.Y + core.camera.Position.Y)); - Vector2 currentScreen = Grid.GridToScreen(currentGrid); - gridRectangle = new Rectangle((int)currentScreen.X, (int)currentScreen.Y, Grid.TileSize, Grid.TileSize); + Vector2 clickWorldPos = core.camera.ScreenToWorld(new Vector2(ms.X, ms.Y)); + Point clickGridPos = Grid.WorldToGrid(clickWorldPos); + Vector2 rectWorldPos = Grid.GridToWorld(clickGridPos); + gridRectangle = new Rectangle((int)rectWorldPos.X, (int)rectWorldPos.Y, Grid.TileSize, Grid.TileSize); lastMouseState = ms; }