[colobot] 99/145: Some CCamera cleanup and docs

Didier Raboud odyx at moszumanska.debian.org
Mon Jul 11 12:56:22 UTC 2016


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit 646e5104f6850154004f8a6c4dc82d85c4cc509d
Author: krzys-h <krzys_h at interia.pl>
Date:   Sat May 28 18:42:48 2016 +0200

    Some CCamera cleanup and docs
---
 src/app/pathman.h                          |   2 +-
 src/common/event.cpp                       |   4 -
 src/common/restext.cpp                     |   4 -
 src/graphics/engine/camera.cpp             | 481 +++++++++++------------------
 src/graphics/engine/camera.h               | 219 +++++++------
 src/graphics/opengl/gl21device.h           |   2 +-
 src/level/mainmovie.cpp                    |   8 +-
 src/level/robotmain.cpp                    | 120 -------
 src/level/robotmain.h                      |   5 -
 src/object/auto/autobase.cpp               |  81 +++--
 src/object/auto/autoportico.cpp            |  29 +-
 src/object/interface/controllable_object.h |   4 -
 src/object/old_object.cpp                  |  12 -
 src/object/old_object.h                    |   3 -
 src/ui/object_interface.cpp                |  20 --
 src/ui/screen/screen_apperance.cpp         |  14 +-
 16 files changed, 362 insertions(+), 646 deletions(-)

diff --git a/src/app/pathman.h b/src/app/pathman.h
index 9c5ed60..059c81f 100644
--- a/src/app/pathman.h
+++ b/src/app/pathman.h
@@ -18,7 +18,7 @@
  */
 
 /**
- *  \file common/pathman.h
+ *  \file app/pathman.h
  *  \brief Class for managing data/lang/save paths
  */
 
diff --git a/src/common/event.cpp b/src/common/event.cpp
index 5ffe475..10d1ae9 100644
--- a/src/common/event.cpp
+++ b/src/common/event.cpp
@@ -480,10 +480,6 @@ void InitializeEventTypeTexts()
     EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERA]     = "EVENT_OBJECT_CAMERA";
     EVENT_TYPE_TEXT[EVENT_OBJECT_HELP]       = "EVENT_OBJECT_HELP";
     EVENT_TYPE_TEXT[EVENT_OBJECT_SOLUCE]     = "EVENT_OBJECT_SOLUCE";
-    EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAleft] = "EVENT_OBJECT_CAMERAleft";
-    EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAright]= "EVENT_OBJECT_CAMERAright";
-    EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAnear] = "EVENT_OBJECT_CAMERAnear";
-    EVENT_TYPE_TEXT[EVENT_OBJECT_CAMERAaway] = "EVENT_OBJECT_CAMERAaway";
     EVENT_TYPE_TEXT[EVENT_OBJECT_SHORTCUT_MODE] = "EVENT_OBJECT_SHORTCUT_MODE";
     EVENT_TYPE_TEXT[EVENT_OBJECT_MOVIELOCK]  = "EVENT_OBJECT_MOVIELOCK";
     EVENT_TYPE_TEXT[EVENT_OBJECT_EDITLOCK]   = "EVENT_OBJECT_EDITLOCK";
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index c5cfd63..df63d83 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -394,10 +394,6 @@ void InitializeRestext()
     stringsEvent[EVENT_OBJECT_GINFO]        = TR("Transmitted information");
     stringsEvent[EVENT_OBJECT_MAPZOOM]      = TR("Zoom mini-map");
     stringsEvent[EVENT_OBJECT_CAMERA]       = TR("Camera (\\key camera;)");
-    stringsEvent[EVENT_OBJECT_CAMERAleft]   = TR("Camera to left");
-    stringsEvent[EVENT_OBJECT_CAMERAright]  = TR("Camera to right");
-    stringsEvent[EVENT_OBJECT_CAMERAnear]   = TR("Camera nearest");
-    stringsEvent[EVENT_OBJECT_CAMERAaway]   = TR("Camera awayest");
     stringsEvent[EVENT_OBJECT_HELP]         = TR("Help about selected object");
     stringsEvent[EVENT_OBJECT_SOLUCE]       = TR("Show the solution");
     stringsEvent[EVENT_OBJECT_SHORTCUT_MODE]= TR("Switch bots <-> buildings");
diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp
index 8ce981b..0899499 100644
--- a/src/graphics/engine/camera.cpp
+++ b/src/graphics/engine/camera.cpp
@@ -94,8 +94,8 @@ CCamera::CCamera()
     m_actualLookat = Math::Vector(0.0f, 0.0f, 0.0f);
     m_finalEye     = Math::Vector(0.0f, 0.0f, 0.0f);
     m_finalLookat  = Math::Vector(0.0f, 0.0f, 0.0f);
-    m_normEye      = Math::Vector(0.0f, 0.0f, 0.0f);
-    m_normLookat   = Math::Vector(0.0f, 0.0f, 0.0f);
+    m_prevEye      = Math::Vector(0.0f, 0.0f, 0.0f);
+    m_prevLookat   = Math::Vector(0.0f, 0.0f, 0.0f);
     m_focus        = 1.0f;
 
     m_eyePt        = Math::Vector(0.0f, 0.0f, 0.0f);
@@ -109,7 +109,6 @@ CCamera::CCamera()
     m_backMin       = 0.0f;
     m_addDirectionH = 0.0f;
     m_addDirectionV = 0.0f;
-    m_transparency  = false;
 
     m_fixDist       = 0.0f;
     m_fixDirectionH = 0.0f;
@@ -121,8 +120,6 @@ CCamera::CCamera()
     m_visitType       = CAM_TYPE_NULL;
     m_visitDirectionV = 0.0f;
 
-    m_remotePan  = 0.0f;
-
     m_centeringPhase    = CAM_PHASE_NULL;
     m_centeringAngleH   = 0.0f;
     m_centeringAngleV   = 0.0f;
@@ -238,7 +235,6 @@ void CCamera::Init(Math::Vector eye, Math::Vector lookat, float delay)
     m_scriptEye = m_actualEye;
     m_scriptLookat = m_actualLookat;
     m_focus = 1.00f;
-    m_remotePan  = 0.0f;
 
     FlushEffect();
     FlushOver();
@@ -258,9 +254,7 @@ CObject* CCamera::GetControllingObject()
 
 void CCamera::SetType(CameraType type)
 {
-    m_remotePan  = 0.0f;
-
-    if ( (m_type == CAM_TYPE_BACK) && m_transparency )
+    if ( (m_type == CAM_TYPE_BACK) )
     {
         for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
         {
@@ -270,13 +264,12 @@ void CCamera::SetType(CameraType type)
             SetTransparency(obj, 0.0f);  // opaque object
         }
     }
-    m_transparency = false;
 
     if (type == CAM_TYPE_INFO  ||
         type == CAM_TYPE_VISIT)  // xx -> info ?
     {
-        m_normEye    = m_engine->GetEyePt();
-        m_normLookat = m_engine->GetLookatPt();
+        m_prevEye    = m_engine->GetEyePt();
+        m_prevLookat = m_engine->GetLookatPt();
 
         m_engine->SetFocus(1.00f);  // normal
         m_type = type;
@@ -290,7 +283,7 @@ void CCamera::SetType(CameraType type)
         m_type = type;
 
         Math::Vector upVec = Math::Vector(0.0f, 1.0f, 0.0f);
-        SetViewParams(m_normEye, m_normLookat, upVec);
+        SetViewParams(m_prevEye, m_prevLookat, upVec);
         return;
     }
 
@@ -386,70 +379,6 @@ CameraSmooth CCamera::GetSmooth()
     return m_smooth;
 }
 
-void CCamera::SetDist(float dist)
-{
-    m_fixDist = dist;
-}
-
-float CCamera::GetDist()
-{
-    return m_fixDist;
-}
-
-void CCamera::SetFixDirectionH(float angle)
-{
-    m_fixDirectionH = angle;
-}
-
-float CCamera::GetFixDirectionH()
-{
-    return m_fixDirectionH;
-}
-
-void CCamera::SetFixDirectionV(float angle)
-{
-    m_fixDirectionV = angle;
-}
-
-float CCamera::GetFixDirectionV()
-{
-    return m_fixDirectionV;
-}
-
-void CCamera::SetRemotePan(float value)
-{
-    m_remotePan = value;
-}
-
-float CCamera::GetRemotePan()
-{
-    return m_remotePan;
-}
-
-void CCamera::SetRemoteZoom(float value)
-{
-    value = Math::Norm(value);
-
-    if ( m_type == CAM_TYPE_BACK )
-        m_backDist = m_backMin + (200.0f - m_backMin) * value;
-
-    if ( m_type == CAM_TYPE_FIX   ||
-         m_type == CAM_TYPE_PLANE )
-        m_fixDist = 10.0f + (200.0f - 10.0f) * value;
-}
-
-float CCamera::GetRemoteZoom()
-{
-    if ( m_type == CAM_TYPE_BACK )
-        return (m_backDist - m_backMin) / (200.0f - m_backMin);
-
-    if ( m_type == CAM_TYPE_FIX   ||
-         m_type == CAM_TYPE_PLANE )
-        return (m_fixDist - 10.0f) / (200.0f - 10.0f);
-
-    return 0.0f;
-}
-
 void CCamera::StartVisit(Math::Vector goal, float dist)
 {
     m_visitType = m_type;
@@ -824,98 +753,74 @@ void CCamera::OverFrame(const Event &event)
     }
 }
 
-void CCamera::FixCamera()
+void CCamera::UpdateCameraAnimation(const Math::Vector &eyePt,
+                                    const Math::Vector &lookatPt,
+                                    float rTime)
 {
-    m_initDelay = 0.0f;
-    m_actualEye    = m_finalEye    = m_scriptEye;
-    m_actualLookat = m_finalLookat = m_scriptLookat;
-    SetViewTime(m_scriptEye, m_scriptLookat, 0.0f);
-}
+    if (m_initDelay > 0.0f)
+    {
+        m_initDelay -= rTime;
+        if (m_initDelay < 0.0f)
+            m_initDelay = 0.0f;
+        rTime /= 1.0f+m_initDelay;
+    }
 
-void CCamera::SetViewTime(const Math::Vector &eyePt,
-                          const Math::Vector &lookatPt,
-                          float rTime)
-{
-    Math::Vector eye, lookat;
+    m_finalEye    = eyePt;
+    m_finalLookat = lookatPt;
+    IsCollision(m_finalEye, m_finalLookat);
 
-    if (m_type == CAM_TYPE_INFO)
+    float prog = 0.0f;
+    float dist = Math::Distance(m_finalEye, m_actualEye);
+
+    if (m_smooth == CAM_SMOOTH_NONE) prog = dist;
+    if (m_smooth == CAM_SMOOTH_NORM) prog = powf(dist, 1.5f) * rTime * 0.75f;
+    if (m_smooth == CAM_SMOOTH_HARD) prog = dist * rTime * 4.0f;
+    if (dist == 0.0f)
     {
-        eye    = eyePt;
-        lookat = lookatPt;
+        m_actualEye = m_finalEye;
     }
     else
     {
-        if (m_initDelay > 0.0f)
-        {
-            m_initDelay -= rTime;
-            if (m_initDelay < 0.0f)
-                m_initDelay = 0.0f;
-            rTime /= 1.0f+m_initDelay;
-        }
-
-        eye    = eyePt;
-        lookat = lookatPt;
-        if ( !IsCollision(eye, lookat) )
-        {
-            m_finalEye    = eye;
-            m_finalLookat = lookat;
-        }
-
-        float prog = 0.0f;
-        float dist = Math::Distance(m_finalEye, m_actualEye);
-
-        if (m_smooth == CAM_SMOOTH_NONE) prog = dist;
-        if (m_smooth == CAM_SMOOTH_NORM) prog = powf(dist, 1.5f) * rTime * 0.75f;
-        if (m_smooth == CAM_SMOOTH_HARD) prog = dist * rTime * 4.0f;
-        if (dist == 0.0f)
-        {
-            m_actualEye = m_finalEye;
-        }
-        else
-        {
-            if (prog > dist)
-                prog = dist;
-            m_actualEye = (m_finalEye - m_actualEye) / dist * prog + m_actualEye;
-        }
+        if (prog > dist)
+            prog = dist;
+        m_actualEye = (m_finalEye - m_actualEye) / dist * prog + m_actualEye;
+    }
 
-        dist = Math::Distance(m_finalLookat, m_actualLookat);
-        if ( m_smooth == CAM_SMOOTH_NONE ) prog = dist;
-        if ( m_smooth == CAM_SMOOTH_NORM ) prog = powf(dist, 1.5f) * rTime * 3.0f;
-        if ( m_smooth == CAM_SMOOTH_HARD ) prog = dist * rTime * 4.0f;
-        if ( dist == 0.0f )
-        {
-            m_actualLookat = m_finalLookat;
-        }
-        else
-        {
-            if (prog > dist)
-                prog = dist;
-            m_actualLookat = (m_finalLookat - m_actualLookat) / dist * prog + m_actualLookat;
-        }
+    dist = Math::Distance(m_finalLookat, m_actualLookat);
+    if ( m_smooth == CAM_SMOOTH_NONE ) prog = dist;
+    if ( m_smooth == CAM_SMOOTH_NORM ) prog = powf(dist, 1.5f) * rTime * 3.0f;
+    if ( m_smooth == CAM_SMOOTH_HARD ) prog = dist * rTime * 4.0f;
+    if ( dist == 0.0f )
+    {
+        m_actualLookat = m_finalLookat;
+    }
+    else
+    {
+        if (prog > dist)
+            prog = dist;
+        m_actualLookat = (m_finalLookat - m_actualLookat) / dist * prog + m_actualLookat;
+    }
 
-        eye = m_effectOffset+m_actualEye;
-        m_water->AdjustEye(eye);
+    Math::Vector eye = m_effectOffset+m_actualEye;
+    m_water->AdjustEye(eye);
 
-        float h = m_terrain->GetFloorLevel(eye);
-        if (eye.y < h + 4.0f)
-            eye.y = h + 4.0f;
+    float h = m_terrain->GetFloorLevel(eye);
+    if (eye.y < h + 4.0f)
+        eye.y = h + 4.0f;
 
-        lookat = m_effectOffset+m_actualLookat;
-    }
+    Math::Vector lookat = m_effectOffset+m_actualLookat;
 
-    Math::Vector upVec = Math::Vector(0.0f, 1.0f, 0.0f);
-    SetViewParams(eye, lookat, upVec);
+    SetViewParams(eye, lookat);
 }
 
-bool CCamera::IsCollision(Math::Vector &eye, Math::Vector lookat)
+void CCamera::IsCollision(Math::Vector &eye, Math::Vector lookat)
 {
-    if (m_type == CAM_TYPE_BACK )  return IsCollisionBack(eye, lookat);
-    if (m_type == CAM_TYPE_FIX  )  return IsCollisionFix (eye, lookat);
-    if (m_type == CAM_TYPE_PLANE)  return IsCollisionFix (eye, lookat);
-    return false;
+    if (m_type == CAM_TYPE_BACK ) IsCollisionBack();
+    if (m_type == CAM_TYPE_FIX  ) IsCollisionFix (eye, lookat);
+    if (m_type == CAM_TYPE_PLANE) IsCollisionFix (eye, lookat);
 }
 
-bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
+void CCamera::IsCollisionBack()
 {
     ObjectType iType;
     if (m_cameraObj == nullptr)
@@ -933,8 +838,6 @@ bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
     max.y = Math::Max(m_actualEye.y, m_actualLookat.y);
     max.z = Math::Max(m_actualEye.z, m_actualLookat.z);
 
-    m_transparency = false;
-
     for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
     {
         if (IsObjectBeingTransported(obj))
@@ -1001,12 +904,10 @@ bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
         if (len > del) continue;
 
         SetTransparency(obj, 1.0f);  // transparent object
-        m_transparency = true;
     }
-    return false;
 }
 
-bool CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
+void CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
 {
     for (CObject* obj : CObjectManager::GetInstancePointer()->GetAllObjects())
     {
@@ -1041,165 +942,135 @@ bool CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
             dist = Math::Distance(eye, lookat);
             Math::Vector proj = Projection(eye, lookat, objPos);
             eye = (lookat - eye) * objRadius / dist + proj;
-            return false;
+            return;
         }
     }
-    return false;
 }
 
 bool CCamera::EventProcess(const Event &event)
 {
-    switch (event.type)
+    if (event.type == EVENT_MOUSE_MOVE)
     {
-        case EVENT_FRAME:
-            EventFrame(event);
-            break;
+        if (m_engine->GetMouseType() == ENG_MOUSE_SCROLLR ||
+            m_engine->GetMouseType() == ENG_MOUSE_SCROLLL ||
+            m_engine->GetMouseType() == ENG_MOUSE_SCROLLU ||
+            m_engine->GetMouseType() == ENG_MOUSE_SCROLLD ||
+            m_engine->GetMouseType() == ENG_MOUSE_MOVE    )
+        {
+            m_engine->SetMouseType(ENG_MOUSE_NORM);
+        }
 
-        case EVENT_MOUSE_BUTTON_DOWN:
-        case EVENT_MOUSE_BUTTON_UP:
-            EventMouseButton(event);
-            break;
+        if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
+        {
+            Math::Point newDelta = event.mousePos - m_mousePos;
+            if (m_cameraInvertX)
+                newDelta.x = -newDelta.x;
+            if (m_cameraInvertY)
+                newDelta.y = -newDelta.y;
+            m_mouseDelta += newDelta;
 
-        case EVENT_MOUSE_MOVE:
-            EventMouseMove(event);
-            break;
+            m_engine->SetMouseType(ENG_MOUSE_MOVE);
+        }
 
-        case EVENT_MOUSE_WHEEL:
-            EventMouseWheel(event);
-            break;
+        m_mouseDeltaEdge.LoadZero();
+        if (m_oldCameraScroll)
+        {
+            if (event.mousePos.x < MOUSE_EDGE_MARGIN)
+                m_mouseDeltaEdge.x = event.mousePos.x / MOUSE_EDGE_MARGIN - 1.0f;
+            if (event.mousePos.x > 1.0f - MOUSE_EDGE_MARGIN)
+                m_mouseDeltaEdge.x = 1.0f - (1.0f - event.mousePos.x) / MOUSE_EDGE_MARGIN;
+            if (event.mousePos.y < MOUSE_EDGE_MARGIN)
+                m_mouseDeltaEdge.y = event.mousePos.y / MOUSE_EDGE_MARGIN - 1.0f;
+            if (event.mousePos.y > 1.0f - MOUSE_EDGE_MARGIN)
+                m_mouseDeltaEdge.y = 1.0f - (1.0f - event.mousePos.y) / MOUSE_EDGE_MARGIN;
+
+            if (m_type == CAM_TYPE_FREE  ||
+                m_type == CAM_TYPE_EDIT  ||
+                m_type == CAM_TYPE_BACK  ||
+                m_type == CAM_TYPE_FIX   ||
+                m_type == CAM_TYPE_PLANE ||
+                m_type == CAM_TYPE_EXPLO )
+            {
+                if (m_mouseDeltaEdge.x > 0.0f)
+                    m_engine->SetMouseType(ENG_MOUSE_SCROLLR);
+                if (m_mouseDeltaEdge.x < 0.0f)
+                    m_engine->SetMouseType(ENG_MOUSE_SCROLLL);
+            }
+            if (m_type == CAM_TYPE_FREE ||
+                m_type == CAM_TYPE_EDIT )
+            {
+                if (m_mouseDeltaEdge.y > 0.0f)
+                    m_engine->SetMouseType(ENG_MOUSE_SCROLLU);
+                if (m_mouseDeltaEdge.y < 0.0f)
+                    m_engine->SetMouseType(ENG_MOUSE_SCROLLD);
+            }
 
-        default:
-            break;
-    }
-    return true;
-}
+            m_mouseDeltaEdge.x /= 2*Math::PI;
+            m_mouseDeltaEdge.y /= Math::PI;
+        }
 
-bool CCamera::EventMouseMove(const Event &event)
-{
-    if (m_engine->GetMouseType() == ENG_MOUSE_SCROLLR ||
-        m_engine->GetMouseType() == ENG_MOUSE_SCROLLL ||
-        m_engine->GetMouseType() == ENG_MOUSE_SCROLLU ||
-        m_engine->GetMouseType() == ENG_MOUSE_SCROLLD ||
-        m_engine->GetMouseType() == ENG_MOUSE_MOVE    )
-    {
-        m_engine->SetMouseType(ENG_MOUSE_NORM);
+        m_mousePos = event.mousePos;
     }
 
-    if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
+    if (event.type == EVENT_MOUSE_WHEEL)
     {
-        Math::Point newDelta = event.mousePos - m_mousePos;
-        if (m_cameraInvertX)
-            newDelta.x = -newDelta.x;
-        if (m_cameraInvertY)
-            newDelta.y = -newDelta.y;
-        m_mouseDelta += newDelta;
-
-        m_engine->SetMouseType(ENG_MOUSE_MOVE);
+        auto dir = event.GetData<MouseWheelEventData>()->y;
+        m_mouseWheelDelta -= dir;
     }
 
-    m_mouseDeltaEdge.LoadZero();
-    if (m_oldCameraScroll)
+    if (event.type == EVENT_MOUSE_BUTTON_DOWN || event.type == EVENT_MOUSE_BUTTON_UP)
     {
-        if (event.mousePos.x < MOUSE_EDGE_MARGIN)
-            m_mouseDeltaEdge.x = event.mousePos.x / MOUSE_EDGE_MARGIN - 1.0f;
-        if (event.mousePos.x > 1.0f - MOUSE_EDGE_MARGIN)
-            m_mouseDeltaEdge.x = 1.0f - (1.0f - event.mousePos.x) / MOUSE_EDGE_MARGIN;
-        if (event.mousePos.y < MOUSE_EDGE_MARGIN)
-            m_mouseDeltaEdge.y = event.mousePos.y / MOUSE_EDGE_MARGIN - 1.0f;
-        if (event.mousePos.y > 1.0f - MOUSE_EDGE_MARGIN)
-            m_mouseDeltaEdge.y = 1.0f - (1.0f - event.mousePos.y) / MOUSE_EDGE_MARGIN;
-
-        if (m_type == CAM_TYPE_FREE  ||
-            m_type == CAM_TYPE_EDIT  ||
-            m_type == CAM_TYPE_BACK  ||
-            m_type == CAM_TYPE_FIX   ||
-            m_type == CAM_TYPE_PLANE ||
-            m_type == CAM_TYPE_EXPLO )
+        if (event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_RIGHT || event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_MIDDLE)
         {
-            if (m_mouseDeltaEdge.x > 0.0f)
-                m_engine->SetMouseType(ENG_MOUSE_SCROLLR);
-            if (m_mouseDeltaEdge.x < 0.0f)
-                m_engine->SetMouseType(ENG_MOUSE_SCROLLL);
-        }
-        if (m_type == CAM_TYPE_FREE ||
-            m_type == CAM_TYPE_EDIT )
-        {
-            if (m_mouseDeltaEdge.y > 0.0f)
-                m_engine->SetMouseType(ENG_MOUSE_SCROLLU);
-            if (m_mouseDeltaEdge.y < 0.0f)
-                m_engine->SetMouseType(ENG_MOUSE_SCROLLD);
+            if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
+            {
+                m_engine->SetMouseType(ENG_MOUSE_MOVE);
+            }
+            else
+            {
+                m_engine->SetMouseType(ENG_MOUSE_NORM);
+            }
         }
-
-        m_mouseDeltaEdge.x /= 2*Math::PI;
-        m_mouseDeltaEdge.y /= Math::PI;
     }
 
-    m_mousePos = event.mousePos;
-    return true;
-}
-
-void CCamera::EventMouseWheel(const Event &event)
-{
-    auto dir = event.GetData<MouseWheelEventData>()->y;
-    m_mouseWheelDelta -= dir;
-}
-
-void CCamera::EventMouseButton(const Event &event)
-{
-    if (event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_RIGHT || event.GetData<MouseButtonEventData>()->button == MOUSE_BUTTON_MIDDLE)
+    if (event.type == EVENT_FRAME && !m_freeze)
     {
-        if ((event.mouseButtonsState & MOUSE_BUTTON_RIGHT) != 0 || (event.mouseButtonsState & MOUSE_BUTTON_MIDDLE) != 0)
-        {
-            m_engine->SetMouseType(ENG_MOUSE_MOVE);
-        }
-        else
-        {
-            m_engine->SetMouseType(ENG_MOUSE_NORM);
-        }
-    }
-}
-
-bool CCamera::EventFrame(const Event &event)
-{
-    if (m_freeze)
-        return true;
-
-    Math::Point newDelta = m_mouseDeltaEdge * m_speed * event.rTime;
-    if (m_cameraInvertX)
-        newDelta.x = -newDelta.x;
-    if (m_cameraInvertY)
-        newDelta.y = -newDelta.y;
-    m_mouseDelta += newDelta;
-
-    EffectFrame(event);
-    OverFrame(event);
+        Math::Point newDelta = m_mouseDeltaEdge * m_speed * event.rTime;
+        if (m_cameraInvertX)
+            newDelta.x = -newDelta.x;
+        if (m_cameraInvertY)
+            newDelta.y = -newDelta.y;
+        m_mouseDelta += newDelta;
 
-    if (m_type == CAM_TYPE_FREE ||
-        m_type == CAM_TYPE_EDIT)
-        return EventFrameFree(event, m_type != CAM_TYPE_EDIT);
+        EffectFrame(event);
+        OverFrame(event);
 
-    if (m_type == CAM_TYPE_BACK)
-        return EventFrameBack(event);
+        if (m_type == CAM_TYPE_FREE ||
+            m_type == CAM_TYPE_EDIT)
+            return EventFrameFree(event, m_type != CAM_TYPE_EDIT);
 
-    if (m_type == CAM_TYPE_FIX   ||
-        m_type == CAM_TYPE_PLANE)
-        return EventFrameFix(event);
+        if (m_type == CAM_TYPE_BACK)
+            return EventFrameBack(event);
 
-    if (m_type == CAM_TYPE_EXPLO)
-        return EventFrameExplo(event);
+        if (m_type == CAM_TYPE_FIX   ||
+            m_type == CAM_TYPE_PLANE)
+            return EventFrameFix(event);
 
-    if (m_type == CAM_TYPE_ONBOARD)
-        return EventFrameOnBoard(event);
+        if (m_type == CAM_TYPE_EXPLO)
+            return EventFrameExplo(event);
 
-    if (m_type == CAM_TYPE_SCRIPT)
-        return EventFrameScript(event);
+        if (m_type == CAM_TYPE_ONBOARD)
+            return EventFrameOnBoard(event);
 
-    if (m_type == CAM_TYPE_INFO)
-        return EventFrameInfo(event);
+        if (m_type == CAM_TYPE_SCRIPT)
+            return EventFrameScript(event);
 
-    if (m_type == CAM_TYPE_VISIT)
-        return EventFrameVisit(event);
+        if (m_type == CAM_TYPE_INFO)
+            return EventFrameInfo(event);
 
+        if (m_type == CAM_TYPE_VISIT)
+            return EventFrameVisit(event);
+    }
     return true;
 }
 
@@ -1255,7 +1126,7 @@ bool CCamera::EventFrameFree(const Event &event, bool keysAllowed)
     if (m_terrain->AdjustToFloor(lookatPt, true))
         lookatPt.y += m_heightLookat;
 
-    SetViewTime(m_eyePt, lookatPt, event.rTime);
+    UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
 
     return true;
 }
@@ -1347,7 +1218,7 @@ bool CCamera::EventFrameBack(const Event &event)
         {
             h += Math::PI;  // back
         }
-        h = Math::NormAngle(h)+m_remotePan;
+        h = Math::NormAngle(h);
         float v = 0.0f;  //?
 
         h += m_centeringCurrentH;
@@ -1382,7 +1253,7 @@ bool CCamera::EventFrameBack(const Event &event)
         m_eyePt = ExcludeTerrain(m_eyePt, lookatPt, h, v);
         m_eyePt = ExcludeObject(m_eyePt, lookatPt, h, v);
 
-        SetViewTime(m_eyePt, lookatPt, event.rTime);
+        UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
 
         m_directionH = h + Math::PI / 2.0f;
         m_directionV = v;
@@ -1407,7 +1278,7 @@ bool CCamera::EventFrameFix(const Event &event)
     {
         Math::Vector lookatPt = m_cameraObj->GetPosition();
 
-        float h = m_fixDirectionH + m_remotePan;
+        float h = m_fixDirectionH;
         float v = m_fixDirectionV;
 
         float d = m_fixDist;
@@ -1416,7 +1287,7 @@ bool CCamera::EventFrameFix(const Event &event)
         m_eyePt = ExcludeTerrain(m_eyePt, lookatPt, h, v);
         m_eyePt = ExcludeObject(m_eyePt, lookatPt, h, v);
 
-        SetViewTime(m_eyePt, lookatPt, event.rTime);
+        UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
 
         m_directionH = h + Math::PI / 2.0f;
         m_directionV = v;
@@ -1452,7 +1323,7 @@ bool CCamera::EventFrameExplo(const Event &event)
     if (m_terrain->AdjustToFloor(lookatPt, true))
         lookatPt.y += m_heightLookat;
 
-    SetViewTime(m_eyePt, lookatPt, event.rTime);
+    UpdateCameraAnimation(m_eyePt, lookatPt, event.rTime);
 
     return true;
 }
@@ -1476,9 +1347,8 @@ bool CCamera::EventFrameOnBoard(const Event &event)
 
 bool CCamera::EventFrameInfo(const Event &event)
 {
-    SetViewTime(Math::Vector(0.0f, 0.0f, 0.0f),
-                Math::Vector(0.0f, 0.0f, 1.0f),
-                event.rTime);
+    SetViewParams(Math::Vector(0.0f, 0.0f, 0.0f),
+                  Math::Vector(0.0f, 0.0f, 1.0f));
     return true;
 }
 
@@ -1501,25 +1371,40 @@ bool CCamera::EventFrameVisit(const Event &event)
     Math::Vector eye = RotateView(m_visitGoal, angleH, angleV, m_visitDist);
     eye = ExcludeTerrain(eye, m_visitGoal, angleH, angleV);
     eye = ExcludeObject(eye, m_visitGoal, angleH, angleV);
-    SetViewTime(eye, m_visitGoal, event.rTime);
+    UpdateCameraAnimation(eye, m_visitGoal, event.rTime);
 
     return true;
 }
 
 bool CCamera::EventFrameScript(const Event &event)
 {
-    SetViewTime(m_scriptEye + m_effectOffset,
-                m_scriptLookat + m_effectOffset, event.rTime);
+    UpdateCameraAnimation(m_scriptEye + m_effectOffset,
+                          m_scriptLookat + m_effectOffset, event.rTime);
     return true;
 }
 
-void CCamera::SetScriptEye(Math::Vector eye)
+void CCamera::SetScriptCameraAnimateEye(Math::Vector eye)
 {
     m_scriptEye = eye;
 }
 
-void CCamera::SetScriptLookat(Math::Vector lookat)
+void CCamera::SetScriptCameraAnimateLookat(Math::Vector lookat)
+{
+    m_scriptLookat = lookat;
+}
+
+void CCamera::SetScriptCamera(Math::Vector eye, Math::Vector lookat)
 {
+    SetScriptCameraAnimate(eye, lookat);
+
+    m_initDelay    = 0.0f;
+    m_actualEye    = m_finalEye    = m_scriptEye;
+    m_actualLookat = m_finalLookat = m_scriptLookat;
+}
+
+void CCamera::SetScriptCameraAnimate(Math::Vector eye, Math::Vector lookat)
+{
+    m_scriptEye = eye;
     m_scriptLookat = lookat;
 }
 
diff --git a/src/graphics/engine/camera.h b/src/graphics/engine/camera.h
index 5f99566..5d4126e 100644
--- a/src/graphics/engine/camera.h
+++ b/src/graphics/engine/camera.h
@@ -45,7 +45,7 @@ enum CameraType
 {
     //! Undefined
     CAM_TYPE_NULL     = 0,
-    //! Free camera (? never in principle ?)
+    //! Free camera
     CAM_TYPE_FREE     = 1,
     //! Camera while editing a program
     CAM_TYPE_EDIT     = 2,
@@ -57,11 +57,11 @@ enum CameraType
     CAM_TYPE_FIX      = 5,
     //! Camera steady after explosion
     CAM_TYPE_EXPLO    = 6,
-    //! Camera during a film script
+    //! Camera during a cutscene
     CAM_TYPE_SCRIPT   = 7,
-    //! Camera for displaying information
+    //! Camera for displaying SatCom (???)
     CAM_TYPE_INFO     = 8,
-    //! Visit instead of an error
+    //! Visit camera, rotates around given position
     CAM_TYPE_VISIT    = 9,
     //! Static camera height
     CAM_TYPE_PLANE    = 11,
@@ -91,15 +91,15 @@ enum CameraEffect
     CAM_EFFECT_NULL         = 0,
     //! Digging in
     CAM_EFFECT_TERRAFORM    = 1,
-    //! ? Vehicle driving is severely ?
+    //! Hard landing
     CAM_EFFECT_CRASH        = 2,
     //! Explosion
     CAM_EFFECT_EXPLO        = 3,
-    //! ? Not mortal shot ?
+    //! Shot by an enemy
     CAM_EFFECT_SHOT         = 4,
     //! Vibration during construction
     CAM_EFFECT_VIBRATION    = 5,
-    //! ? Spleen reactor ?
+    //! Overheated reactor
     CAM_EFFECT_PET          = 6,
 };
 
@@ -124,7 +124,9 @@ enum CameraOverEffect
   \class CCamera
   \brief Camera moving in 3D scene
 
-  ... */
+  This class manages everything related to animating the camera in 3D scene.
+  Calculated values are then passed to Gfx::CEngine.
+*/
 class CCamera
 {
 public:
@@ -134,70 +136,83 @@ public:
     //! Management of an event
     bool        EventProcess(const Event &event);
 
-    //! Initializes the camera
+    /**
+     * \brief Initializes the camera
+     * \param eye Initial eye position
+     * \param lookat Initial lookat position
+     * \param delay Time of the initial entry animation
+     */
     void        Init(Math::Vector eye, Math::Vector lookat, float delay);
 
     //! Sets the object controlling the camera
     void        SetControllingObject(CObject* object);
+    //! Gets the object controlling the camera
     CObject*    GetControllingObject();
 
     //! Change the type of camera
     void        SetType(CameraType type);
+    //! Get the type of the camera
     CameraType  GetType();
 
-    //! Management of the smoothing mode
+    //! Set smoothing mode
     void         SetSmooth(CameraSmooth type);
+    //! Get smoothing mode
     CameraSmooth GetSmooth();
 
-    //! Management of the setback distance
-    void        SetDist(float dist);
-    float       GetDist();
-
-    //! Manage angle mode CAM_TYPE_FIX
-    void        SetFixDirectionH(float angle);
-    float       GetFixDirectionH();
-    void        SetFixDirectionV(float angle);
-    float       GetFixDirectionV();
 
-    //! Managing the triggering mode of the camera panning
-    void        SetRemotePan(float value);
-    float       GetRemotePan();
-
-    //! Management of the remote zoom (0 .. 1) of the camera
-    void        SetRemoteZoom(float value);
-    float       GetRemoteZoom();
+    //! Returns the current point of view of the camera
+    void        GetCamera(Math::Vector &eye, Math::Vector &lookat);
 
-    //! Start with a tour round the camera
+    //! \name Visit camera management (CAM_TYPE_VISIT) - camera in this mode shows a position, constantly rotating around it
+    //@{
+    //! Start visit camera
     void        StartVisit(Math::Vector goal, float dist);
-    //! Circular end of a visit with the camera
+    //! Stop visit camera
     void        StopVisit();
+    //@}
 
-    //! Returns the point of view of the camera
-    void        GetCamera(Math::Vector &eye, Math::Vector &lookat);
-
-    //! Specifies a special movement of camera to frame action
+    //! \name Camera "centering" - moves the camera to show some happening action (e.g. sniffer sniffing)
+    //@{
+    //! Move camera to show happening action
     bool        StartCentering(CObject *object, float angleH, float angleV, float dist, float time);
-    //! Ends a special movement of camera to frame action
+    //! Go back to normal position after showing some happening action
     bool        StopCentering(CObject *object, float time);
-    //! Stop framing special in the current position
+    //! Abort centering animation in the current position
     void        AbortCentering();
+    //@}
 
-    //! Removes the special effect with the camera
-    void        FlushEffect();
-    //! Starts a special effect with the camera
+    //! \name Camera shake effects
+    //@{
+    //! Starts a camera shake effect
     void        StartEffect(CameraEffect effect, Math::Vector pos, float force);
+    //! Removes the camera shake effect
+    void        FlushEffect();
+    //@}
 
-    //! Removes the effect of superposition in the foreground
+    //! \name Camera overlay effects
+    //@{
+    //! Starts camera overlay effect
+    void        StartOver(CameraOverEffect effect, Math::Vector pos, float force);
+    //! Removes camera overlay effect
     void        FlushOver();
-    //! Specifies the base color
+    //! Specifies camera overlay effect base color
     void        SetOverBaseColor(Color color);
-    void        StartOver(CameraOverEffect effect, Math::Vector pos, float force);
-
-    //! Sets the soft movement of the camera
-    void        FixCamera();
-    void        SetScriptEye(Math::Vector eye);
-    void        SetScriptLookat(Math::Vector lookat);
-
+    //@}
+
+    //! \name Script camera - cutscenes controlled by external code
+    //@{
+    //! Script camera: Set camera position
+    void        SetScriptCamera(Math::Vector eye, Math::Vector lookat);
+    //! Script camera: Animate to given camera position
+    void        SetScriptCameraAnimate(Math::Vector eye, Math::Vector lookat);
+    //! Script camera: Animate to given eye position
+    void        SetScriptCameraAnimateEye(Math::Vector eye);
+    //! Script camera: Animate to given lookat position
+    void        SetScriptCameraAnimateLookat(Math::Vector lookat);
+    //@}
+
+    //! \name Configuration settings
+    //@{
     void        SetEffect(bool enable);
     bool        GetEffect();
     void        SetBlood(bool enable);
@@ -208,58 +223,66 @@ public:
     bool        GetCameraInvertX();
     void        SetCameraInvertY(bool invert);
     bool        GetCameraInvertY();
+    //@}
 
     //! Temporarily freeze camera movement
     void        SetFreeze(bool freeze);
 
+    //! Set camera speed
     void        SetCameraSpeed(float speed);
 
 protected:
-    //! Changes the camera according to the mouse moved
-    bool        EventMouseMove(const Event &event);
-    //! Mouse wheel operation
-    void        EventMouseWheel(const Event &event);
-    //! Mouse button handling
-    void        EventMouseButton(const Event &event);
-    //! Changes the camera according to the time elapsed
-    bool        EventFrame(const Event &event);
-    //! Moves the point of view
+    //! Advances the effect of the camera
+    void        EffectFrame(const Event &event);
+    //! Advanced overlay effect in the foreground
+    void        OverFrame(const Event &event);
+
     bool        EventFrameFree(const Event &event, bool keysAllowed);
-    //! Moves the point of view
     bool        EventFrameBack(const Event &event);
-    //! Moves the point of view
     bool        EventFrameFix(const Event &event);
-    //! Moves the point of view
     bool        EventFrameExplo(const Event &event);
-    //! Moves the point of view
     bool        EventFrameOnBoard(const Event &event);
-    //! Moves the point of view
     bool        EventFrameInfo(const Event &event);
-    //! Moves the point of view
     bool        EventFrameVisit(const Event &event);
-    //! Moves the point of view
     bool        EventFrameScript(const Event &event);
 
-    //! Specifies the location and direction of view to the 3D engine
-    void        SetViewTime(const Math::Vector &eyePt, const Math::Vector &lookatPt, float rTime);
-    //! Avoid the obstacles
-    bool        IsCollision(Math::Vector &eye, Math::Vector lookat);
-    //! Avoid the obstacles
-    bool        IsCollisionBack(Math::Vector &eye, Math::Vector lookat);
-    //! Avoid the obstacles
-    bool        IsCollisionFix(Math::Vector &eye, Math::Vector lookat);
+    /**
+     * \brief Calculates camera animation and sends updated camera position to the 3D engine
+     * \param eyePt Eye point
+     * \param lookatPt Lookat point
+     * \param rTime Time since last time this function was called (used to calculate animation)
+     * \see SetViewParams
+     */
+    void        UpdateCameraAnimation(const Math::Vector &eyePt, const Math::Vector &lookatPt, float rTime);
+
+    /**
+     * \brief Avoid the obstacles
+     *
+     * For CAM_TYPE_BACK: make obstacles transparent
+     * For CAM_TYPE_FIX or CAM_TYPE_PLANE: adjust eye not to hit the obstacles
+     *
+     * \param eye Eye position, may be adjusted
+     * \param lookat Lookat point
+     */
+    void        IsCollision(Math::Vector &eye, Math::Vector lookat);
+    //! Avoid the obstacles (CAM_TYPE_BACK)
+    void        IsCollisionBack();
+    //! Avoid the obstacles (CAM_TYPE_FIX or CAM_TYPE_PLANE)
+    void        IsCollisionFix(Math::Vector &eye, Math::Vector lookat);
 
     //! Adjusts the camera not to enter the ground
     Math::Vector ExcludeTerrain(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
     //! Adjusts the camera not to enter an object
     Math::Vector ExcludeObject(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
 
-    //! Specifies the location and direction of view
-    void        SetViewParams(const Math::Vector &eye, const Math::Vector &lookat, const Math::Vector &up);
-    //! Advances the effect of the camera
-    void        EffectFrame(const Event &event);
-    //! Advanced overlay effect in the foreground
-    void        OverFrame(const Event &event);
+    /**
+     * \brief Updates the location and direction of the camera in the 3D engine
+     * \param eye Eye point
+     * \param lookat Lookat point
+     * \param up Up vector
+     * \see CEngine::SetViewParams
+     */
+    void        SetViewParams(const Math::Vector &eye, const Math::Vector &lookat, const Math::Vector &up = Math::Vector(0.0f, 1.0f, 0.0f));
 
     /**
      * \brief Calculate camera movement (from user inputs) to apply
@@ -280,10 +303,10 @@ protected:
     //! Type of smoothing
     CameraSmooth m_smooth;
     //! Object linked to the camera
-    CObject*          m_cameraObj;
+    CObject*     m_cameraObj;
 
-    //! Time of initial centering
-    float       m_initDelay;
+    //! Remaining time of initial camera entry animation
+    float        m_initDelay;
 
     //! Current eye
     Math::Vector    m_actualEye;
@@ -294,11 +317,11 @@ protected:
     //! Final lookat
     Math::Vector    m_finalLookat;
     //! Eye position at the moment of entering CAM_TYPE_INFO/CAM_TYPE_VISIT
-    Math::Vector    m_normEye;
+    Math::Vector    m_prevEye;
     //! Lookat position at the moment of entering CAM_TYPE_INFO/CAM_TYPE_VISIT
-    Math::Vector    m_normLookat;
+    Math::Vector    m_prevLookat;
 
-    float       m_focus;
+    float            m_focus;
 
     //! CAM_TYPE_FREE: eye
     Math::Vector    m_eyePt;
@@ -315,19 +338,18 @@ protected:
 
     //! CAM_TYPE_BACK: distance
     float       m_backDist;
-    //! CAM_TYPE_BACK: distance minimal
+    //! CAM_TYPE_BACK: minimal distance
     float       m_backMin;
-    //! CAM_TYPE_BACK: additional direction
+    //! CAM_TYPE_BACK: additional horizontal direction
     float       m_addDirectionH;
-    //! CAM_TYPE_BACK: additional direction
+    //! CAM_TYPE_BACK: additional vertical direction
     float       m_addDirectionV;
-    bool        m_transparency;
 
     //! CAM_TYPE_FIX: distance
     float       m_fixDist;
-    //! CAM_TYPE_FIX: direction
+    //! CAM_TYPE_FIX: horizontal direction
     float       m_fixDirectionH;
-    //! CAM_TYPE_FIX: direction
+    //! CAM_TYPE_FIX: vertical direction
     float       m_fixDirectionV;
 
     //! CAM_TYPE_VISIT: target position
@@ -341,12 +363,13 @@ protected:
     //! CAM_TYPE_VISIT: direction
     float        m_visitDirectionV;
 
-    float        m_remotePan;
-
     //! Last known mouse position, used to calculate change since last frame
     Math::Point  m_mousePos = Math::Point(0.5f, 0.5f);
+    //! Change of mouse position since last frame
     Math::Point  m_mouseDelta = Math::Point(0.0f, 0.0f);
+    //! Change of camera position caused by edge camera
     Math::Point  m_mouseDeltaEdge = Math::Point(0.0f, 0.0f);
+    //! Change of mouse wheel since last frame
     float        m_mouseWheelDelta = 0.0f;
 
     CenteringPhase m_centeringPhase;
@@ -376,19 +399,17 @@ protected:
     Math::Vector m_scriptEye;
     Math::Vector m_scriptLookat;
 
-    //! Shocks if explosion?
+    //! Is camera frozen?
+    bool m_freeze = false;
+
+    //! \name Configuration settings
+    //@{
     bool        m_effect;
-    //! Blood?
     bool        m_blood;
-    //! Scroll in the edges?
-    bool m_oldCameraScroll;
-    //! X inversion in the edges?
+    bool        m_oldCameraScroll;
     bool        m_cameraInvertX;
-    //! Y inversion in the edges?
     bool        m_cameraInvertY;
-
-    //! Is camera frozen?
-    bool m_freeze = false;
+    //@}
 };
 
 
diff --git a/src/graphics/opengl/gl21device.h b/src/graphics/opengl/gl21device.h
index 9b073e3..20cf215 100644
--- a/src/graphics/opengl/gl21device.h
+++ b/src/graphics/opengl/gl21device.h
@@ -18,7 +18,7 @@
  */
 
 /**
- * \file graphics/opengl/gldevice.h
+ * \file graphics/opengl/gl21device.h
  * \brief OpenGL implementation - CGL21Device class
  */
 
diff --git a/src/level/mainmovie.cpp b/src/level/mainmovie.cpp
index 3bf37eb..dc5f4cb 100644
--- a/src/level/mainmovie.cpp
+++ b/src/level/mainmovie.cpp
@@ -95,9 +95,7 @@ bool CMainMovie::Start(MainMovieType type, float time)
         m_camera->GetCamera(m_initialEye, m_initialLookat);
         m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
         m_camera->SetSmooth(Gfx::CAM_SMOOTH_HARD);
-        m_camera->SetScriptEye(m_initialEye);
-        m_camera->SetScriptLookat(m_initialLookat);
-        m_camera->FixCamera();
+        m_camera->SetScriptCamera(m_initialEye, m_initialLookat);
 
         mat = pObj->GetWorldMatrix(0);
         m_finalLookat[0] = Math::Transform(*mat, Math::Vector( 1.6f, 1.0f, 1.2f));
@@ -187,9 +185,7 @@ bool CMainMovie::EventProcess(const Event &event)
 
             eye = (finalEye-initialEye)*progress+initialEye;
             lookat = (finalLookat-initialLookat)*progress+initialLookat;
-            m_camera->SetScriptEye(eye);
-            m_camera->SetScriptLookat(lookat);
-//          m_camera->FixCamera();
+            m_camera->SetScriptCameraAnimate(eye, lookat);
         }
         else
         {
diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp
index 9abd54a..374a749 100644
--- a/src/level/robotmain.cpp
+++ b/src/level/robotmain.cpp
@@ -239,9 +239,6 @@ CRobotMain::CRobotMain()
 
     m_shotSaving = 0;
 
-    m_cameraPan  = 0.0f;
-    m_cameraZoom = 0.0f;
-
     m_build = 0;
     m_researchDone.clear();  // no research done
     m_researchDone[0] = 0;
@@ -459,8 +456,6 @@ void CRobotMain::ChangePhase(Phase phase)
         m_camera->SetType(Gfx::CAM_TYPE_NULL);
         m_movie->Flush();
         m_movieInfoIndex = -1;
-        m_cameraPan  = 0.0f;
-        m_cameraZoom = 0.0f;
         m_shortCut = true;
     }
     ClearInterface();
@@ -677,7 +672,6 @@ bool CRobotMain::ProcessEvent(Event &event)
         }
 
         m_displayText->EventProcess(event);
-        RemoteCamera(m_cameraPan, m_cameraZoom, event.rTime);
 
         if (m_displayInfo != nullptr)  // current edition?
             m_displayInfo->EventProcess(event);
@@ -852,7 +846,6 @@ bool CRobotMain::ProcessEvent(Event &event)
             {
                 auto data = event.GetData<KeyEventData>();
 
-                KeyCamera(event.type, data->slot);
                 HiliteClear();
                 if (m_editLock)  // current edition?
                 {
@@ -999,13 +992,6 @@ bool CRobotMain::ProcessEvent(Event &event)
                 break;
             }
 
-            case EVENT_KEY_UP:
-            {
-                auto data = event.GetData<KeyEventData>();
-                KeyCamera(event.type, data->slot);
-                break;
-            }
-
             case EVENT_MOUSE_BUTTON_DOWN:
             {
                 if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
@@ -1032,14 +1018,6 @@ bool CRobotMain::ProcessEvent(Event &event)
                 break;
             }
 
-            case EVENT_MOUSE_BUTTON_UP:
-                if (event.GetData<MouseButtonEventData>()->button != MOUSE_BUTTON_LEFT) // only left mouse button
-                    break;
-
-                m_cameraPan  = 0.0f;
-                m_cameraZoom = 0.0f;
-                break;
-
             case EVENT_OBJECT_LIMIT:
                 StartShowLimit();
                 break;
@@ -1057,19 +1035,6 @@ bool CRobotMain::ProcessEvent(Event &event)
                 ChangeCamera();
                 break;
 
-            case EVENT_OBJECT_CAMERAleft:
-                m_cameraPan = -1.0f;
-                break;
-            case EVENT_OBJECT_CAMERAright:
-                m_cameraPan = 1.0f;
-                break;
-            case EVENT_OBJECT_CAMERAnear:
-                m_cameraZoom = -1.0f;
-                break;
-            case EVENT_OBJECT_CAMERAaway:
-                m_cameraZoom = 1.0f;
-                break;
-
             case EVENT_OBJECT_DELETE:
                 m_ui->GetDialog()->StartQuestion(
                     RT_DIALOG_DELOBJ, true, false, false,
@@ -1851,7 +1816,6 @@ void CRobotMain::SelectOneObject(CObject* obj, bool displayError)
          type == OBJECT_APOLLO2  )
     {
         m_camera->SetType(dynamic_cast<CControllableObject*>(obj)->GetCameraType());
-        m_camera->SetDist(dynamic_cast<CControllableObject*>(obj)->GetCameraDist());
     }
     else
     {
@@ -2323,84 +2287,6 @@ void CRobotMain::ChangeCamera()
     m_camera->SetType(type);
 }
 
-//! Remote control the camera using the arrow keys
-void CRobotMain::KeyCamera(EventType event, InputSlot key)
-{
-    if (event == EVENT_KEY_UP)
-    {
-        if (key == INPUT_SLOT_LEFT)
-        {
-            m_cameraPan = 0.0f;
-        }
-
-        if (key == INPUT_SLOT_RIGHT)
-        {
-            m_cameraPan = 0.0f;
-        }
-
-        if (key == INPUT_SLOT_UP)
-        {
-            m_cameraZoom = 0.0f;
-        }
-
-        if (key == INPUT_SLOT_DOWN)
-        {
-            m_cameraZoom = 0.0f;
-        }
-    }
-
-    if (m_phase != PHASE_SIMUL) return;
-    if (m_editLock) return;  // current edition?
-    if (m_trainerPilot) return;
-
-    CObject* obj = GetSelect();
-    if (obj == nullptr) return;
-    assert(obj->Implements(ObjectInterfaceType::Controllable));
-    if (!dynamic_cast<CControllableObject*>(obj)->GetTrainer()) return;
-
-    if (event == EVENT_KEY_DOWN)
-    {
-        if (key == INPUT_SLOT_LEFT)
-        {
-            m_cameraPan = -1.0f;
-        }
-
-        if (key == INPUT_SLOT_RIGHT)
-        {
-            m_cameraPan = 1.0f;
-        }
-
-        if (key == INPUT_SLOT_UP)
-        {
-            m_cameraZoom = -1.0f;
-        }
-
-        if (key == INPUT_SLOT_DOWN)
-        {
-            m_cameraZoom = 1.0f;
-        }
-    }
-}
-
-//! Panned with the camera if a button is pressed
-void CRobotMain::RemoteCamera(float pan, float zoom, float rTime)
-{
-    if (pan != 0.0f)
-    {
-        float value = m_camera->GetRemotePan();
-        value += pan*rTime*1.5f;
-        m_camera->SetRemotePan(value);
-    }
-
-    if (zoom != 0.0f)
-    {
-        float value = m_camera->GetRemoteZoom();
-        value += zoom*rTime*0.3f;
-        m_camera->SetRemoteZoom(value);
-    }
-}
-
-
 
 //! Cancels the current movie
 void CRobotMain::AbortMovie()
@@ -3660,8 +3546,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
 
                 if (line->GetParam("fadeIn")->AsBool(false))
                     m_camera->StartOver(Gfx::CAM_OVER_EFFECT_FADEIN_WHITE, Math::Vector(0.0f, 0.0f, 0.0f), 1.0f);
-
-                m_camera->SetFixDirectionH(line->GetParam("fixDirection")->AsFloat(0.25f)*Math::PI);
                 continue;
             }
 
@@ -3822,7 +3706,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
         {
             Math::Vector pos = sel->GetPosition();
             m_camera->Init(pos, pos, 0.0f);
-            m_camera->FixCamera();
 
             SelectObject(sel);
             m_camera->SetControllingObject(sel);
@@ -5971,9 +5854,6 @@ void CRobotMain::SetCodeBattleSpectatorMode(bool mode)
 
     m_codeBattleSpectator = mode;
     SelectObject(obj, false); // this uses code battle selection mode already
-
-    if (mode)
-        m_camera->SetFixDirectionV(-0.25f*Math::PI);
 }
 
 void CRobotMain::UpdateDebugCrashSpheres()
diff --git a/src/level/robotmain.h b/src/level/robotmain.h
index 8c6b53e..c25d192 100644
--- a/src/level/robotmain.h
+++ b/src/level/robotmain.h
@@ -390,8 +390,6 @@ protected:
     void        ClearTooltip();
     CObject*    DetectObject(Math::Point pos);
     void        ChangeCamera();
-    void        RemoteCamera(float pan, float zoom, float rTime);
-    void        KeyCamera(EventType event, InputSlot key);
     void        AbortMovie();
     void        SelectOneObject(CObject* obj, bool displayError=true);
     void        HelpObject();
@@ -535,9 +533,6 @@ protected:
 
     std::vector<NewScriptName> m_newScriptName;
 
-    float           m_cameraPan = 0.0f;
-    float           m_cameraZoom = 0.0f;
-
     EventType       m_visitLast = EVENT_NULL;
     CObject*        m_visitObject = nullptr;
     CObject*        m_visitArrow = nullptr;
diff --git a/src/object/auto/autobase.cpp b/src/object/auto/autobase.cpp
index 0fd8c43..3200c61 100644
--- a/src/object/auto/autobase.cpp
+++ b/src/object/auto/autobase.cpp
@@ -170,7 +170,6 @@ begin:
             {
                 assert(pObj->Implements(ObjectInterfaceType::Controllable));
                 m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
-                m_camera->SetDist(dynamic_cast<CControllableObject*>(pObj)->GetCameraDist());
             }
 
             m_main->StartMusic();
@@ -203,18 +202,17 @@ begin:
 
             m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
 
-            pos = m_pos;
-            pos.x -= 150.0f;
-            m_terrain->AdjustToFloor(pos);
-            pos.y += 10.0f;
-            m_camera->SetScriptEye(pos);
-            m_posSound = pos;
+            Math::Vector eye = m_pos;
+            eye.x -= 150.0f;
+            m_terrain->AdjustToFloor(eye);
+            eye.y += 10.0f;
 
-            pos = m_object->GetPosition();
-            pos.y += 300.0f+50.0f;
-            m_camera->SetScriptLookat(pos);
+            Math::Vector lookat = m_object->GetPosition();
+            lookat.y += 300.0f+50.0f;
+
+            m_camera->SetScriptCamera(eye, lookat);
+            m_posSound = eye;
 
-            m_camera->FixCamera();
             m_engine->SetFocus(2.0f);
 
             m_engine->SetFogStart(0.9f);
@@ -266,9 +264,8 @@ begin:
             pos.x += 1000.0f;
             pos.z -= 60.0f;
             pos.y += 80.0f;
-            m_camera->SetScriptEye(pos);
             m_posSound = pos;
-            m_camera->FixCamera();
+            m_camera->SetScriptCamera(pos, Math::Vector(0.0f, 0.0f, 0.0f));
             m_engine->SetFocus(1.0f);
 
             BeginTransit();
@@ -345,15 +342,15 @@ begin:
             vibCir *= Math::Min(1.0f, (1.0f-m_progress)*3.0f);
             m_object->SetCirVibration(vibCir);
 
-            pos = m_pos;
-            pos.x -= 150.0f;
-            m_terrain->AdjustToFloor(pos);
-            pos.y += 10.0f;
-            m_camera->SetScriptEye(pos);
+            Math::Vector eye = m_pos;
+            eye.x -= 150.0f;
+            m_terrain->AdjustToFloor(eye);
+            eye.y += 10.0f;
 
-            pos = m_object->GetPosition();
-            pos.y += 50.0f;
-            m_camera->SetScriptLookat(pos);
+            Math::Vector lookat = m_object->GetPosition();
+            lookat.y += 50.0f;
+
+            m_camera->SetScriptCameraAnimate(eye, lookat);
 
             m_engine->SetFocus(1.0f+(1.0f-m_progress));
 
@@ -494,7 +491,7 @@ begin:
                 m_terrain->AdjustToFloor(pos);
                 pos.y += 10.0f;
                 pos.y += m_progress*40.0f;
-                m_camera->SetScriptEye(pos);
+                m_camera->SetScriptCameraAnimateEye(pos);
 
                 m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress);
             }
@@ -556,7 +553,7 @@ begin:
                 m_terrain->AdjustToFloor(pos);
                 pos.y += 10.0f;
                 pos.y += m_progress*40.0f;
-                m_camera->SetScriptEye(pos);
+                m_camera->SetScriptCameraAnimateEye(pos);
 
                 m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress);
             }
@@ -598,7 +595,6 @@ begin:
                 {
                     assert(pObj->Implements(ObjectInterfaceType::Controllable));
                     m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
-                    m_camera->SetDist(dynamic_cast<CControllableObject*>(pObj)->GetCameraDist());
                 }
                 m_sound->Play(SOUND_BOUM, m_object->GetPosition());
                 m_soundChannel = -1;
@@ -749,15 +745,15 @@ begin:
             vibCir.y = 0.0f;
             m_object->SetCirVibration(vibCir);
 
-            pos = m_pos;
-            pos.x -= 110.0f+m_progress*250.0f;
-            m_terrain->AdjustToFloor(pos);
-            pos.y += 10.0f;
-            m_camera->SetScriptEye(pos);
+            Math::Vector eye = m_pos;
+            eye.x -= 110.0f+m_progress*250.0f;
+            m_terrain->AdjustToFloor(eye);
+            eye.y += 10.0f;
 
-            pos = m_object->GetPosition();
-            pos.y += 50.0f;
-            m_camera->SetScriptLookat(pos);
+            Math::Vector lookat = m_object->GetPosition();
+            lookat.y += 50.0f;
+
+            m_camera->SetScriptCameraAnimate(eye, lookat);
 
             m_engine->SetFocus(1.0f+m_progress);
 
@@ -907,7 +903,7 @@ begin:
             pos.x += event.rTime*(2000.0f/BASE_TRANSIT_TIME);
             m_object->SetPosition(pos);
             pos.x += 60.0f;
-            m_camera->SetScriptLookat(pos);
+            m_camera->SetScriptCameraAnimateLookat(pos);
         }
         else
         {
@@ -1129,7 +1125,6 @@ bool CAutoBase::Abort()
             {
                 assert(pObj->Implements(ObjectInterfaceType::Controllable));
                 m_camera->SetType(dynamic_cast<CControllableObject*>(pObj)->GetCameraType());
-                m_camera->SetDist(dynamic_cast<CControllableObject*>(pObj)->GetCameraDist());
             }
 
             m_engine->SetFogStart(m_fogStart);
@@ -1387,16 +1382,16 @@ Error CAutoBase::TakeOff(bool printMsg)
 
     m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
 
-    Math::Vector pos = m_pos;
-    pos.x -= 110.0f;
-    m_terrain->AdjustToFloor(pos);
-    pos.y += 10.0f;
-    m_camera->SetScriptEye(pos);
-    m_posSound = pos;
+    Math::Vector eye = m_pos;
+    eye.x -= 110.0f;
+    m_terrain->AdjustToFloor(eye);
+    eye.y += 10.0f;
+
+    Math::Vector lookat = m_object->GetPosition();
+    lookat.y += 50.0f;
 
-    pos = m_object->GetPosition();
-    pos.y += 50.0f;
-    m_camera->SetScriptLookat(pos);
+    m_camera->SetScriptCameraAnimate(eye, lookat);
+    m_posSound = eye;
 
     m_engine->SetFocus(1.0f);
 
diff --git a/src/object/auto/autoportico.cpp b/src/object/auto/autoportico.cpp
index b716dc5..042e7c3 100644
--- a/src/object/auto/autoportico.cpp
+++ b/src/object/auto/autoportico.cpp
@@ -164,19 +164,17 @@ bool CAutoPortico::EventProcess(const Event &event)
 
             m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
 
-            pos = m_startPos;
-            pos.x += -100.0f;
-            pos.y +=    9.0f;
-            pos.z += -200.0f;
-            m_camera->SetScriptEye(pos);
+            Math::Vector eye = m_startPos;
+            eye.x += -100.0f;
+            eye.y +=    9.0f;
+            eye.z += -200.0f;
 
-            pos = m_object->GetPosition();
-            pos.x +=   0.0f;
-            pos.y +=  10.0f;
-            pos.z += -40.0f;
-            m_camera->SetScriptLookat(pos);
+            Math::Vector lookat = m_object->GetPosition();
+            lookat.x +=   0.0f;
+            lookat.y +=  10.0f;
+            lookat.z += -40.0f;
 
-            m_camera->FixCamera();
+            m_camera->SetScriptCamera(eye, lookat);
         }
     }
 
@@ -329,23 +327,20 @@ bool CAutoPortico::EventProcess(const Event &event)
 
     if ( m_cameraProgress < 1.0f )
     {
-        if ( m_cameraProgress < 0.5f )
-        {
-        }
-        else
+        if ( m_cameraProgress >= 0.5f )
         {
             pos = m_startPos;
             pos.x += -100.0f-(m_cameraProgress-0.5f)*1.0f*120.0f;
             pos.y +=    9.0f;
             pos.z += -200.0f+(m_cameraProgress-0.5f)*1.0f*210.0f;
-            m_camera->SetScriptEye(pos);
+            m_camera->SetScriptCameraAnimateEye(pos);
         }
 
         pos = m_object->GetPosition();
         pos.x +=   0.0f;
         pos.y +=  10.0f;
         pos.z += -40.0f;
-        m_camera->SetScriptLookat(pos);
+        m_camera->SetScriptCameraAnimateLookat(pos);
     }
 
     return true;
diff --git a/src/object/interface/controllable_object.h b/src/object/interface/controllable_object.h
index 5a04c3f..9d1aabd 100644
--- a/src/object/interface/controllable_object.h
+++ b/src/object/interface/controllable_object.h
@@ -58,10 +58,6 @@ public:
     virtual void SetCameraType(Gfx::CameraType type) = 0;
     //! Return camera type for this object
     virtual Gfx::CameraType GetCameraType() = 0;
-    //! Set camera distance for this object
-    virtual void SetCameraDist(float dist) = 0;
-    //! Return camera distance for this object
-    virtual float GetCameraDist() = 0;
     //! Disallow camera changes
     virtual void SetCameraLock(bool lock) = 0;
     //! Check if camera changes are disallowed
diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp
index d945c5c..32861cc 100644
--- a/src/object/old_object.cpp
+++ b/src/object/old_object.cpp
@@ -150,7 +150,6 @@ COldObject::COldObject(int id)
     m_character.wheelRight = 1.0f;
 
     m_cameraType = Gfx::CAM_TYPE_BACK;
-    m_cameraDist = 50.0f;
     m_bCameraLock = false;
 
     for (int i=0 ; i<OBJECTMAXPART ; i++ )
@@ -1031,7 +1030,6 @@ void COldObject::Read(CLevelParserLine* line)
 
     if (line->GetParam("camera")->IsDefined())
         SetCameraType(line->GetParam("camera")->AsCameraType());
-    SetCameraDist(line->GetParam("cameraDist")->AsFloat(50.0f));
     SetCameraLock(line->GetParam("cameraLock")->AsBool(false));
 
     if (line->GetParam("pyro")->IsDefined())
@@ -2499,16 +2497,6 @@ Gfx::CameraType COldObject::GetCameraType()
     return m_cameraType;
 }
 
-void COldObject::SetCameraDist(float dist)
-{
-    m_cameraDist = dist;
-}
-
-float COldObject::GetCameraDist()
-{
-    return m_cameraDist;
-}
-
 void COldObject::SetCameraLock(bool lock)
 {
     m_bCameraLock = lock;
diff --git a/src/object/old_object.h b/src/object/old_object.h
index 5ba5c7e..60e8e8f 100644
--- a/src/object/old_object.h
+++ b/src/object/old_object.h
@@ -218,8 +218,6 @@ public:
 
     void        SetCameraType(Gfx::CameraType type) override;
     Gfx::CameraType  GetCameraType() override;
-    void        SetCameraDist(float dist) override;
-    float       GetCameraDist() override;
     void        SetCameraLock(bool lock) override;
     bool        GetCameraLock() override;
 
@@ -351,7 +349,6 @@ protected:
     float       m_gunGoalV;
     float       m_gunGoalH;
     Gfx::CameraType  m_cameraType;
-    float       m_cameraDist;
     bool        m_bCameraLock;
     float       m_magnifyDamage;
 
diff --git a/src/ui/object_interface.cpp b/src/ui/object_interface.cpp
index aa52678..1310015 100644
--- a/src/ui/object_interface.cpp
+++ b/src/ui/object_interface.cpp
@@ -1324,26 +1324,6 @@ bool CObjectInterface::CreateInterface(bool bSelect)
         }
     }
 
-    if ( m_object->GetToy() && !m_object->GetManual() )
-    {
-        pos.x = ox+sx*9.0f;
-        pos.y = oy+sy*0;
-        pb = pw->CreateButton(pos, dim, 55, EVENT_OBJECT_CAMERAleft);
-        pb->SetImmediat(true);
-        pos.x = ox+sx*11.0f;
-        pos.y = oy+sy*0;
-        pb = pw->CreateButton(pos, dim, 48, EVENT_OBJECT_CAMERAright);
-        pb->SetImmediat(true);
-        pos.x = ox+sx*10.0f;
-        pos.y = oy+sy*1;
-        pb = pw->CreateButton(pos, dim, 49, EVENT_OBJECT_CAMERAnear);
-        pb->SetImmediat(true);
-        pos.x = ox+sx*10.0f;
-        pos.y = oy+sy*0;
-        pb = pw->CreateButton(pos, dim, 50, EVENT_OBJECT_CAMERAaway);
-        pb->SetImmediat(true);
-    }
-
     pos.x = ox+sx*13.4f;
     pos.y = oy+sy*0;
     if ( m_object->GetTrainer() )  // Training?
diff --git a/src/ui/screen/screen_apperance.cpp b/src/ui/screen/screen_apperance.cpp
index 9ae82c9..3e8cdd0 100644
--- a/src/ui/screen/screen_apperance.cpp
+++ b/src/ui/screen/screen_apperance.cpp
@@ -619,21 +619,17 @@ void CScreenApperance::CameraPerso()
 {
     Gfx::CCamera* camera = m_main->GetCamera();
 
+    camera->SetType(Gfx::CAM_TYPE_SCRIPT);
     if ( m_apperanceTab == 0 )
     {
-//?     camera->Init(Math::Vector(4.0f, 0.0f, 0.0f),
-//?                  Math::Vector(0.0f, 0.0f, 1.0f), 0.0f);
-        camera->Init(Math::Vector(6.0f, 0.0f, 0.0f),
-                     Math::Vector(0.0f, 0.2f, 1.5f), 0.0f);
+        camera->SetScriptCamera(Math::Vector(6.0f, 0.0f, 0.0f),
+                                Math::Vector(0.0f, 0.2f, 1.5f));
     }
     else
     {
-        camera->Init(Math::Vector(18.0f, 0.0f, 4.5f),
-                     Math::Vector(0.0f, 1.6f, 4.5f), 0.0f);
+        camera->SetScriptCamera(Math::Vector(18.0f, 0.0f, 4.5f),
+                                Math::Vector(0.0f, 1.6f, 4.5f));
     }
-
-    camera->SetType(Gfx::CAM_TYPE_SCRIPT);
-    camera->FixCamera();
 }
 
 // Sets a fixed color.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list