// 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); }
// 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; }
// 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; }