Started work on removing the zoom in limit

This commit is contained in:
Yousef Khadadeh 2025-09-30 11:45:03 +03:00
parent ffcf0e94ab
commit 094fce776f
16 changed files with 78 additions and 23 deletions

View file

@ -8,7 +8,7 @@
#include <iostream>
DrawCamera::DrawCamera():
c({0, 0}, WorldScalar(1000000), 0.0)
c({0, 0}, WorldScalar(10), 0.0)
//c({-843000, -72500}, WorldScalar(1000), 0.0)
//c({0, 0}, WorldScalar(1000), 0.0)
//c({"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}, WorldScalar("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), 0.0)
@ -55,6 +55,15 @@ void DrawCamera::smooth_move_to(World& w, const CoordSpaceHelper& newCoords, Vec
smoothMove.moveTime = (instantJump || w.main.toolbar.jumpTransitionTime <= 0.01f) ? w.main.toolbar.jumpTransitionTime : 0.0f;
}
void DrawCamera::scale_up(World& w, const WorldScalar& scaleUpAmount) {
smoothMove.occurring = false;
c.scale_about({0, 0}, scaleUpAmount, true);
startZoomVal *= scaleUpAmount;
startZoomMousePos *= scaleUpAmount;
startZoomCameraPos *= scaleUpAmount;
set_viewing_area(w.main.window.size.cast<float>());
}
void DrawCamera::update_main(World& w) {
if(smoothMove.occurring) {
BezierEasing zoomAnim{w.main.toolbar.jumpTransitionEasing};
@ -118,13 +127,9 @@ void DrawCamera::update_main(World& w) {
if(isAccurateZooming) {
WorldScalar zoomFactor(std::pow(1.0 + w.main.toolbar.dragZoomSpeed, w.main.input.mouse.move.y()));
c.scale(zoomFactor);
if(c.inverseScale < WorldScalar(1))
c.inverseScale = WorldScalar(1);
else {
WorldVec mVec = startZoomCameraPos - startZoomMousePos;
WorldScalar mX = c.inverseScale / startZoomVal;
c.pos = startZoomMousePos + mVec * mX;
}
WorldVec mVec = startZoomCameraPos - startZoomMousePos;
WorldScalar mX = c.inverseScale / startZoomVal;
c.pos = startZoomMousePos + mVec * mX;
}
else if(w.drawProg.controls.middleClickHeld || (w.drawProg.controls.leftClickHeld && w.drawProg.drawTool->get_type() == DrawingProgramToolType::PAN))
c.pos -= c.dir_from_space(w.main.input.mouse.move);
@ -136,12 +141,8 @@ void DrawCamera::update_main(World& w) {
zoomFactor = WorldScalar(1) / zoomFactor;
c.scale(zoomFactor);
if(c.inverseScale < WorldScalar(1))
c.inverseScale = WorldScalar(1);
else {
WorldVec mVec = c.pos - w.get_mouse_world_pos();
c.pos = w.get_mouse_world_pos() + mVec / zoomFactor;
}
WorldVec mVec = c.pos - w.get_mouse_world_pos();
c.pos = w.get_mouse_world_pos() + mVec / zoomFactor;
}
if(w.main.input.key(InputManager::KEY_CAMERA_ROTATE_COUNTERCLOCKWISE).held && !w.main.input.text.get_accepting_input()) {
c.rotate_about(c.from_space(w.main.window.size.cast<float>() * 0.5f), -w.main.deltaTime);
@ -152,4 +153,9 @@ void DrawCamera::update_main(World& w) {
}
set_viewing_area(w.main.window.size.cast<float>());
if(c.inverseScale < WorldScalar(1)) {
std::cout << "yes!" << std::endl;
w.scale_up(WorldScalar(1000000));
}
}