X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2FCamera.h;h=815b4b047fdf1e107b3190034ac8ffe02b4a9071;hb=1cb5ed22d7772abe6f9893be90f26f46dbde39f7;hp=911f23601feacc59b287cf2734924470b20640c8;hpb=11306935dbf7213d583222ce239985e1b3f180bf;p=space.git diff --git a/src/graphics/Camera.h b/src/graphics/Camera.h index 911f236..815b4b0 100644 --- a/src/graphics/Camera.h +++ b/src/graphics/Camera.h @@ -1,7 +1,7 @@ #ifndef SPACE_CAMERA_H_ #define SPACE_CAMERA_H_ -#include "../math/Vector.h" +#include "Vector.h" namespace space { @@ -9,13 +9,17 @@ namespace space { class Camera { public: - Camera(int w, int h, const Vector &); + Camera(Vector size, const Vector &); public: void SetTarget(const Vector &t) { target = &t; } void SetZoom(float z) { zoom = z; } - void Resize(int w, int h); + Vector ScreenSize() const { return size; } + float Zoom() const { return zoom; } + + void Resize(int w, int h) { Resize(Vector(w, h)); } + void Resize(Vector); void Update(float deltaT); void StartZoom(); @@ -23,18 +27,27 @@ public: void StartShrink(); void StopShrink(); + /// transform v from world coords to screen coords Vector ToScreen(Vector v) const { - return Vector(OffsetOf(v)) + offset; - } - Vector OffsetOf(Vector v) const { - return ToScale(v - *target); + return Vector(ToScale(v - *target)) + offset; } + /// scale v to current zoom level Vector ToScale(Vector v) const { return v * zoom; } + /// transform v from screen coords to world coords + Vector FromScreen(Vector v) const { + return FromScale(v - offset) + *target; + } + /// scale v back from current zoom level + Vector FromScale(Vector v) const { + return v / zoom; + } + private: const Vector *target; + Vector size; Vector offset; float zoom;