public void Calculate(Rect2d target, int window_width, int window_height, double mapW, double mapH, bool moveDown, bool capCorrection = true)
        {
            Rect2d cameraBox = GetOffsetBox(window_width, window_height);
            Vec2d  playerPos = target.GetMiddle();

            // Wenn man aus der Mittleren Box rausläuft - Offset Verschieben
            //###############################################################################

            Vec2d moveCorrection = cameraBox.GetDistanceTo(playerPos);


            if (moveDown && moveCorrection.Y == 0 && playerPos.Y != cameraBox.tl.Y)
            {
                moveCorrection.Y -= 5;
            }

            // Offset NICHT verschieben wenn amn damit die Grenzen der aktuellen Zone verletzten Würde
            //###############################################################################

            Vec2d zoneCorrection = GetVisionZoneCorrection(Value + moveCorrection, playerPos, window_width, window_height);

            Vec2d realCorrection = moveCorrection + zoneCorrection;

            if (capCorrection)
            {
                realCorrection.DoMaxLength(MAX_CORRECTION_SPEED);
            }
            if (realCorrection.GetLength() < 0.001)
            {
                realCorrection = Vec2d.Zero;
            }


            Value += realCorrection;
        }