]> git.localhorst.tv Git - space.git/commitdiff
adjust cam speed to zoom level
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 23 Dec 2013 08:31:15 +0000 (09:31 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Mon, 23 Dec 2013 08:31:15 +0000 (09:31 +0100)
src/app/Application.cpp
src/graphics/Camera.cpp
src/graphics/Camera.h
src/graphics/Moveable.h

index 34edd257174ec97494a0317b53307684659dd409..20c371887c153e9a48edbc474926e4c532442751 100644 (file)
@@ -141,6 +141,7 @@ void Application::Update(int dt) {
        controlled->acc = Vector<float>(control * 10);
        cam.Update(delta);
        univ.Update(delta);
+       focus.SetSpeed(500 / cam.Zoom());
        focus.Update(delta);
 }
 
index ad2587f3e755e5a06b5fc47300da564ee4a426fe..ea2f97de328f5270a0edeab91c998d9444b9aefa 100644 (file)
@@ -5,7 +5,8 @@ namespace space {
 
 Camera::Camera(int w, int h, const Vector<float> &t)
 : target(&t)
-, offset(w/2, h/2)
+, size(w, h)
+, offset(size / 2)
 , zoom(1)
 , zoomAcc(0) {
 
@@ -13,7 +14,8 @@ Camera::Camera(int w, int h, const Vector<float> &t)
 
 
 void Camera::Resize(int w, int h) {
-       offset = Vector<float>(w/2, h/2);
+       size = Vector<int>(w, h);
+       offset = size / 2;
 }
 
 void Camera::Update(float delta) {
index 911f23601feacc59b287cf2734924470b20640c8..4d49cb618d6ece6ecb2c40635aa4c66a219231f5 100644 (file)
@@ -15,6 +15,9 @@ 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);
 
@@ -23,18 +26,27 @@ public:
        void StartShrink();
        void StopShrink();
 
+       /// transform v from world coords to screen coords
        Vector<int> ToScreen(Vector<float> v) const {
-               return Vector<int>(OffsetOf(v)) + offset;
-       }
-       Vector<float> OffsetOf(Vector<float> v) const {
-               return ToScale(v - *target);
+               return Vector<int>(ToScale(v - *target)) + offset;
        }
+       /// scale v to current zoom level
        Vector<float> ToScale(Vector<float> v) const {
                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<int> size;
        Vector<int> offset;
 
        float zoom;
index b5fbfe5cb7e635249197d5b697eb28e3de148f7c..71f590919678d72f654c23f04e95b8525a5982ca 100644 (file)
@@ -16,6 +16,7 @@ public:
 public:
        const Vector<Scalar> &Pos() const { return pos; }
        Vector<Scalar> Vel() const { return Vector<Scalar>(dir) * speed; }
+       void SetSpeed(float s) { speed = s; }
 
        void Update(Scalar delta) {
                pos += Vel() * delta;