]> git.localhorst.tv Git - space.git/blobdiff - src/graphics/Camera.h
adjust cam speed to zoom level
[space.git] / src / graphics / Camera.h
index e40b051bc64d78c18479fdbcac6f276049a0e830..4d49cb618d6ece6ecb2c40635aa4c66a219231f5 100644 (file)
@@ -15,33 +15,42 @@ public:
        void SetTarget(const Vector<float> &t) { target = &t; }
        void SetZoom(float z) { zoom = z; }
 
+       Vector<int> ScreenSize() const { return size; }
+       float Zoom() const { return zoom; }
+
        void Resize(int w, int h);
        void Update(float deltaT);
 
-       void DoubleZoom();
-       void HalfZoom();
+       void StartZoom();
+       void StopZoom();
+       void StartShrink();
+       void StopShrink();
 
+       /// transform v from world coords to screen coords
        Vector<int> ToScreen(Vector<float> v) const {
-               return Vector<int>(OffsetOf(v));
-       }
-       Vector<float> OffsetOf(Vector<float> v) const {
-               return ToScale(v - *target) + offset;
+               return Vector<int>(ToScale(v - *target)) + offset;
        }
+       /// scale v to current zoom level
        Vector<float> ToScale(Vector<float> v) const {
-               if (zoom == 0) {
-                       return v;
-               } else if (zoom > 0) {
-                       return v * float(1 << zoom);
-               } else {
-                       return v / float(1 << -zoom);
-               }
+               return v * zoom;
+       }
+
+       /// transform v from screen coords to world coords
+       Vector<float> FromScreen(Vector<int> v) const {
+               return FromScale(v - offset) + *target;
+       }
+       /// scale v back from current zoom level
+       Vector<float> FromScale(Vector<float> v) const {
+               return v / zoom;
        }
 
 private:
        const Vector<float> *target;
-       Vector<float> offset;
+       Vector<int> size;
+       Vector<int> offset;
 
-       int zoom;
+       float zoom;
+       int zoomAcc;
 
 };