// updates the camera with user input private void UpdateCamera(float delta, bool interacted) { camera.Update(delta); if (InputManager.Instance.IsKeyDown(Keys.Up)) { camera.TranslationTarget += new Vector2(0, -cameraTranslationSpeed) * delta; } if (InputManager.Instance.IsKeyDown(Keys.Down)) { camera.TranslationTarget += new Vector2(0, cameraTranslationSpeed) * delta; } if (InputManager.Instance.IsKeyDown(Keys.Left)) { camera.TranslationTarget += new Vector2(cameraTranslationSpeed, 0) * delta; } if (InputManager.Instance.IsKeyDown(Keys.Right)) { camera.TranslationTarget += new Vector2(-cameraTranslationSpeed, 0) * delta; } if (!interacted) { // Panning if (InputManager.Instance.OnMouseDown(MouseButton.Left)) { cameraPanning = true; cameraPanLastMouse = InputManager.Instance.MouseScreenPos().ToVector2() / camera.Zoom.X; } // Zoom if (InputManager.Instance.ScrolledUp()) { cameraPanning = false; camera.ZoomTarget += Vector2.One * cameraZoomDelta * delta; if (camera.ZoomTarget.X > cameraZoomMax.X) { camera.ZoomTarget = cameraZoomMax; } } else if (InputManager.Instance.ScrolledDown()) { cameraPanning = false; camera.ZoomTarget -= Vector2.One * cameraZoomDelta * delta; if (camera.ZoomTarget.X < cameraZoomMin.X) { camera.ZoomTarget = cameraZoomMin; } } } if (cameraPanning) { Vector2 curMouse = InputManager.Instance.MouseScreenPos().ToVector2() / camera.Zoom; Vector2 diff = cameraPanLastMouse - curMouse; camera.Translation = camera.TranslationTarget + diff; camera.TranslationTarget = camera.Translation; cameraPanLastMouse = curMouse; if (InputManager.Instance.OnMouseUp(MouseButton.Left)) { cameraPanning = false; } } }