Esempio n. 1
0
        // 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;
                }
            }
        }