2025-07-06 20:43:53 +03:00
|
|
|
#pragma once
|
|
|
|
|
#include <Eigen/Dense>
|
|
|
|
|
#include <Helpers/ConvertVec.hpp>
|
|
|
|
|
#include "SharedTypes.hpp"
|
|
|
|
|
#include <Helpers/SCollision.hpp>
|
|
|
|
|
#include "CoordSpaceHelper.hpp"
|
2026-01-01 22:46:02 +03:00
|
|
|
#include <Helpers/VersionNumber.hpp>
|
2025-07-06 20:43:53 +03:00
|
|
|
|
|
|
|
|
using namespace Eigen;
|
|
|
|
|
|
|
|
|
|
class World;
|
|
|
|
|
|
|
|
|
|
class DrawCamera {
|
|
|
|
|
public:
|
|
|
|
|
DrawCamera();
|
|
|
|
|
|
|
|
|
|
CoordSpaceHelper c;
|
|
|
|
|
Vector2f viewingArea{-1, -1};
|
|
|
|
|
SCollision::AABB<WorldScalar> viewingAreaGenerousCollider;
|
|
|
|
|
|
|
|
|
|
void set_viewing_area(Vector2f viewingAreaNew);
|
|
|
|
|
void smooth_move_to(World& w, const CoordSpaceHelper& c, Vector2f windowSize, bool instantJump = false);
|
|
|
|
|
void set_based_on_properties(World& w, const WorldVec& newPos, const WorldScalar& newZoom, double newRotate);
|
|
|
|
|
void set_based_on_center(World& w, const WorldVec& newPos, const WorldScalar& newZoom, double newRotate);
|
|
|
|
|
void update_main(World& main);
|
2025-09-30 11:45:03 +03:00
|
|
|
|
|
|
|
|
void scale_up(World& w, const WorldScalar& scaleUpAmount);
|
2026-01-01 22:46:02 +03:00
|
|
|
|
|
|
|
|
void save_file(cereal::PortableBinaryOutputArchive& a, const World& w) const;
|
|
|
|
|
void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version, World& w);
|
2025-07-06 20:43:53 +03:00
|
|
|
private:
|
|
|
|
|
struct SmoothMove {
|
|
|
|
|
CoordSpaceHelper start;
|
|
|
|
|
WorldVec startCenter;
|
|
|
|
|
WorldVec endCenter;
|
|
|
|
|
WorldScalar endUniformZoom;
|
|
|
|
|
CoordSpaceHelper end;
|
|
|
|
|
Vector2f endWindowSize;
|
|
|
|
|
bool occurring = false;
|
|
|
|
|
float moveTime;
|
|
|
|
|
} smoothMove;
|
|
|
|
|
|
|
|
|
|
WorldScalar startZoomVal;
|
|
|
|
|
WorldVec startZoomMousePos;
|
|
|
|
|
WorldVec startZoomCameraPos;
|
2025-09-28 11:59:08 +03:00
|
|
|
|
|
|
|
|
bool isAccurateZooming = false;
|
2025-07-06 20:43:53 +03:00
|
|
|
};
|