//  Set zoom : 1 - zoom in, 0 - no zoom, -1 - zoom out
 public void SetZoom(MyCameraZoomOperationType inZoomType)
 {
     //if (m_zoomType == MyCameraZoomOperationType.NoZoom || m_zoomType == MyCameraZoomOperationType.Zoomed)
     {
         m_zoomType = inZoomType;
         //PlaySound(inZoomType);
     }
 }
 //  Set zoom : 1 - zoom in, 0 - no zoom, -1 - zoom out
 public void SetZoom(MyCameraZoomOperationType inZoomType)
 {
     // we don't want call zoom, if we can't zoom
     if (inZoomType == MyCameraZoomOperationType.ZoomOut && GetZoomLevel() >= 1.0f ||
        inZoomType == MyCameraZoomOperationType.ZoomIn && GetZoomLevel() <= 0.0f)
     {
         return;
     }
     m_zoomType = inZoomType;
     PlaySound(inZoomType);
 }
 //  Set zoom : 1 - zoom in, 0 - no zoom, -1 - zoom out
 public void SetZoom(MyCameraZoomOperationType inZoomType)
 {
     // we don't want call zoom, if we can't zoom
     if (inZoomType == MyCameraZoomOperationType.ZoomOut && GetZoomLevel() >= 1.0f ||
         inZoomType == MyCameraZoomOperationType.ZoomIn && GetZoomLevel() <= 0.0f)
     {
         return;
     }
     m_zoomType = inZoomType;
     PlaySound(inZoomType);
 }
        //  Update!
        public void Update()
        {
            switch (m_zoomType)
            {
                case MyCameraZoomOperationType.NoZoom:
                    break;

                case MyCameraZoomOperationType.ZoomingIn:
                    {
                        if (m_currentZoomTime <= ZoomTime)
                        {
                            ResumeCue(m_zoomALoopCue);
                            ResumeCue(m_zoomRelCue);

                            m_currentZoomTime += MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;

                            if (m_currentZoomTime >= ZoomTime)
                            {
                                m_currentZoomTime = ZoomTime;
                                StopZoomingALoopSound();
                                m_zoomType = MyCameraZoomOperationType.Zoomed;
                            }
                        }
                    }
                    break;

                case MyCameraZoomOperationType.ZoomingOut:
                    {
                        if (m_currentZoomTime >= 0)
                        {
                            ResumeCue(m_zoomALoopCue);
                            ResumeCue(m_zoomRelCue);

                            m_currentZoomTime -= MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;
                            if (m_currentZoomTime <= 0)
                            {
                                m_currentZoomTime = 0;
                                StopZoomingALoopSound();
                                m_zoomType = MyCameraZoomOperationType.NoZoom;
                            }
                        }
                    }
                    break;
            }

            m_zoomLevel = 1 - m_currentZoomTime / ZoomTime;

            m_FOV = ApplyToFov ? MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, m_camera.FieldOfView, m_zoomLevel) : m_camera.FieldOfView;
            m_FOVForNearObjects = ApplyToFov ? MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, m_camera.FieldOfViewForNearObjects, m_zoomLevel) : m_camera.FieldOfViewForNearObjects;
        }
        //  Update!
        public void Update()
        {
            switch (m_zoomType)
            {
            case MyCameraZoomOperationType.NoZoom:
                break;

            case MyCameraZoomOperationType.ZoomingIn:
            {
                if (m_currentZoomTime <= ZoomTime)
                {
                    ResumeCue(m_zoomALoopCue);
                    ResumeCue(m_zoomRelCue);

                    m_currentZoomTime += MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;

                    if (m_currentZoomTime >= ZoomTime)
                    {
                        m_currentZoomTime = ZoomTime;
                        StopZoomingALoopSound();
                        m_zoomType = MyCameraZoomOperationType.Zoomed;
                    }
                }
            }
            break;

            case MyCameraZoomOperationType.ZoomingOut:
            {
                if (m_currentZoomTime >= 0)
                {
                    ResumeCue(m_zoomALoopCue);
                    ResumeCue(m_zoomRelCue);

                    m_currentZoomTime -= MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;
                    if (m_currentZoomTime <= 0)
                    {
                        m_currentZoomTime = 0;
                        StopZoomingALoopSound();
                        m_zoomType = MyCameraZoomOperationType.NoZoom;
                    }
                }
            }
            break;
            }

            m_zoomLevel = 1 - m_currentZoomTime / ZoomTime;

            m_FOV = ApplyToFov ? MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, m_camera.FieldOfView, m_zoomLevel) : m_camera.FieldOfView;
            m_FOVForNearObjects = ApplyToFov ? MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, m_camera.FieldOfViewForNearObjects, m_zoomLevel) : m_camera.FieldOfViewForNearObjects;
        }
        //  Plays correct sound
        void PlaySound(MyCameraZoomOperationType inZoomType)
        {
            switch (inZoomType)
            {
            case MyCameraZoomOperationType.ZoomingIn:
                PlayZoomingALoopSound();
                break;

            case MyCameraZoomOperationType.ZoomingOut:
                PlayZoomingALoopSound();
                break;

            case MyCameraZoomOperationType.NoZoom:
                StopZoomingALoopSound();
                break;
            }
        }
        //  Update!
        public void Update(float updateStepSize)
        {
            switch (m_zoomType)
            {
            case MyCameraZoomOperationType.NoZoom:
                break;

            case MyCameraZoomOperationType.ZoomingIn:
            {
                if (m_currentZoomTime <= ZoomTime)
                {
                    m_currentZoomTime += updateStepSize;         // VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;

                    if (m_currentZoomTime >= ZoomTime)
                    {
                        m_currentZoomTime = ZoomTime;
                        m_zoomType        = MyCameraZoomOperationType.Zoomed;
                    }
                }
            }
            break;

            case MyCameraZoomOperationType.ZoomingOut:
            {
                if (m_currentZoomTime >= 0)
                {
                    m_currentZoomTime -= updateStepSize;         // VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;
                    if (m_currentZoomTime <= 0)
                    {
                        m_currentZoomTime = 0;
                        m_zoomType        = MyCameraZoomOperationType.NoZoom;
                    }
                }
            }
            break;
            }

            m_zoomLevel = 1 - m_currentZoomTime / ZoomTime;

            m_FOV = ApplyToFov ? MathHelper.Lerp(FIELD_OF_VIEW_MIN, m_camera.FieldOfView, m_zoomLevel) : m_camera.FieldOfView;
            // not used anymore
            //m_FOVForNearObjects = ApplyToFov ? MathHelper.Lerp(FIELD_OF_VIEW_MIN, m_camera.FieldOfViewForNearObjects, m_zoomLevel) : m_camera.FieldOfViewForNearObjects;
        }
        //  Update!
        public void Update(float updateStepSize)
        {
            switch (m_zoomType)
            {
                case MyCameraZoomOperationType.NoZoom:
                    break;

                case MyCameraZoomOperationType.ZoomingIn:
                    {
                        if (m_currentZoomTime <= ZoomTime)
                        {
                            m_currentZoomTime += updateStepSize; // VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;

                            if (m_currentZoomTime >= ZoomTime)
                            {
                                m_currentZoomTime = ZoomTime;
                                m_zoomType = MyCameraZoomOperationType.Zoomed;
                            }
                        }
                    }
                    break;

                case MyCameraZoomOperationType.ZoomingOut:
                    {
                        if (m_currentZoomTime >= 0)
                        {
                            m_currentZoomTime -= updateStepSize; // VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_SECONDS;
                            if (m_currentZoomTime <= 0)
                            {
                                m_currentZoomTime = 0;
                                m_zoomType = MyCameraZoomOperationType.NoZoom;
                            }
                        }
                    }
                    break;
            }

            m_zoomLevel = 1 - m_currentZoomTime / ZoomTime;

            m_FOV = ApplyToFov ? MathHelper.Lerp(FIELD_OF_VIEW_MIN, m_camera.FieldOfView, m_zoomLevel) : m_camera.FieldOfView;
            // not used anymore
            //m_FOVForNearObjects = ApplyToFov ? MathHelper.Lerp(FIELD_OF_VIEW_MIN, m_camera.FieldOfViewForNearObjects, m_zoomLevel) : m_camera.FieldOfViewForNearObjects;
        }
        //  Plays correct sound
        void PlaySound(MyCameraZoomOperationType inZoomType)
        {
            switch (inZoomType)
            {
            case MyCameraZoomOperationType.ZoomIn:
                //if (!m_zoomReachedEnd)
                //{
                PlayZoomingALoopSound();
                //}
                break;

            case MyCameraZoomOperationType.ZoomOut:
                //if (!m_zoomReachedEnd)
                //{
                PlayZoomingALoopSound();
                //}
                break;

            case MyCameraZoomOperationType.NoZoom:
                StopZoomingALoopSound();
                break;
            }
        }
        //  Update!
        public void Update()
        {
            if (m_zoomType != MyCameraZoomOperationType.NoZoom)
            {
                float tmp      = (1 / m_zoomTime);
                float cur_time = MathHelper.Lerp(0, m_zoomTime, m_zoomLevel);
                float mod_time = Math.Abs(cur_time - 45);
                tmp = (1 / (m_zoomTime + mod_time)) * (int)m_zoomType;

                m_zoomLevel += tmp;

                ResumeCue(m_zoomALoopCue);
                ResumeCue(m_zoomRelCue);

                if (m_zoomLevel > 1)
                {
                    m_zoomLevel = 1;
                    m_zoomType  = MyCameraZoomOperationType.NoZoom;
                    StopZoomingALoopSound();
                    m_zoomReachedEnd = true;
                }
                else if (m_zoomLevel < 0)
                {
                    m_zoomLevel = 0;
                    m_zoomType  = MyCameraZoomOperationType.NoZoom;
                    StopZoomingALoopSound();
                    m_zoomReachedEnd = true;
                }
                else
                {
                    m_zoomReachedEnd = false;
                }
            }

            m_FOV = MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, MyCamera.FieldOfView, m_zoomLevel);
            m_FOVForNearObjects = MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, MyCamera.FieldOfViewForNearObjects, m_zoomLevel);
        }
        //  Update!
        public void Update()
        {
            if (m_zoomType != MyCameraZoomOperationType.NoZoom)
            {
                float tmp = (1 / m_zoomTime);
                float cur_time = MathHelper.Lerp(0, m_zoomTime, m_zoomLevel);
                float mod_time = Math.Abs(cur_time - 45);
                tmp = (1 / (m_zoomTime + mod_time)) * (int)m_zoomType;

                m_zoomLevel += tmp;

                ResumeCue(m_zoomALoopCue);
                ResumeCue(m_zoomRelCue);                

                if (m_zoomLevel > 1)
                {
                    m_zoomLevel = 1;
                    m_zoomType = MyCameraZoomOperationType.NoZoom;
                    StopZoomingALoopSound();
                    m_zoomReachedEnd = true;

                }
                else if (m_zoomLevel < 0)
                {
                    m_zoomLevel = 0;
                    m_zoomType = MyCameraZoomOperationType.NoZoom;
                    StopZoomingALoopSound();
                    m_zoomReachedEnd = true;
                }
                else
                    m_zoomReachedEnd = false;
            }

            m_FOV = MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, MyCamera.FieldOfView, m_zoomLevel);
            m_FOVForNearObjects = MathHelper.Lerp(MyConstants.FIELD_OF_VIEW_MIN, MyCamera.FieldOfViewForNearObjects, m_zoomLevel);
        }
 //reset zoom
 public void ResetZoom()
 {
     //StopZoomingALoopSound();
     m_zoomType = MyCameraZoomOperationType.NoZoom;
     m_currentZoomTime = 0;
 }
 //  Plays correct sound
 void PlaySound(MyCameraZoomOperationType inZoomType)
 {
     switch (inZoomType)
     {
         case MyCameraZoomOperationType.ZoomingIn:
                 PlayZoomingALoopSound();
             break;
         case MyCameraZoomOperationType.ZoomingOut:
                 PlayZoomingALoopSound();
             break;
         case MyCameraZoomOperationType.NoZoom:
                 StopZoomingALoopSound();
             break;
     }
 }
 //  Set zoom : 1 - zoom in, 0 - no zoom, -1 - zoom out
 public void SetZoom(MyCameraZoomOperationType inZoomType)
 {
     //if (m_zoomType == MyCameraZoomOperationType.NoZoom || m_zoomType == MyCameraZoomOperationType.Zoomed)
     {
         m_zoomType = inZoomType;
         //PlaySound(inZoomType);
     }
 }
 //reset zoom
 public void ResetZoom()
 {
     //StopZoomingALoopSound();
     m_zoomType        = MyCameraZoomOperationType.NoZoom;
     m_currentZoomTime = 0;
 }
 //  Plays correct sound
 void PlaySound(MyCameraZoomOperationType inZoomType)
 {
     switch (inZoomType)
     {
         case MyCameraZoomOperationType.ZoomIn:
             //if (!m_zoomReachedEnd)
             //{
                 PlayZoomingALoopSound();
             //}
             break;
         case MyCameraZoomOperationType.ZoomOut:
             //if (!m_zoomReachedEnd)
             //{
                 PlayZoomingALoopSound();
             //}
             break;
         case MyCameraZoomOperationType.NoZoom:
             StopZoomingALoopSound();
             break;
     }
 }