public unsafe IEnumerator FocusOnMapRegion([NotNull] IMapDefinition mapDefinition, int regionIndex, [CanBeNull] CameraControlParameters parameters = null) { if (m_regionFocusCoroutine != null) { this.StopCoroutine(m_regionFocusCoroutine); m_regionFocusCoroutine = null; } Camera camera = this.camera; Transform cameraContainer = m_cameraContainer; if (null == camera || null == cameraContainer) { yield break; } float panTweenDuration; Ease val; float num; Ease val2; if (null == parameters) { CameraControlParameters defaultControlParameters = m_defaultControlParameters; if (null == defaultControlParameters) { panTweenDuration = m_panTweenDuration; val = 9; num = m_zoomTweenDuration; val2 = 9; } else { panTweenDuration = defaultControlParameters.panTweenDuration; val = defaultControlParameters.panTweenEase; num = defaultControlParameters.zoomTweenMaxDuration; val2 = defaultControlParameters.zoomTweenEase; } } else { panTweenDuration = parameters.panTweenDuration; val = parameters.panTweenEase; num = parameters.zoomTweenMaxDuration; val2 = parameters.zoomTweenEase; } FightMapRegionDefinition region = mapDefinition.GetRegion(regionIndex); Vector3 val3 = Vector3Int.op_Implicit(mapDefinition.origin); Vector2 val4 = Vector2Int.op_Implicit(region.sizeMin); Vector2 val5 = Vector2Int.op_Implicit(region.sizeMax); Vector3 val6 = cameraContainer.get_rotation() * m_cameraPositionOffset; Vector2 val7 = val4 + 0.5f * (val5 - Vector2.get_one() - val4); Vector3 targetCameraPosition = new Vector3(((IntPtr)(void *)val7).x, 0f, ((IntPtr)(void *)val7).y) + val3 + val6; Vector3 val8 = default(Vector3); val8._002Ector(((IntPtr)(void *)val4).x, 0f, ((IntPtr)(void *)val4).y); Vector3 val9 = default(Vector3); val9._002Ector(((IntPtr)(void *)val5).x, 0f, ((IntPtr)(void *)val5).y); Vector3 val10 = default(Vector3); val10._002Ector(((IntPtr)(void *)val8).x, 0f, ((IntPtr)(void *)val9).z); Vector3 val11 = default(Vector3); val11._002Ector(((IntPtr)(void *)val9).x, 0f, ((IntPtr)(void *)val8).z); Vector3 val12 = cameraContainer.get_rotation() * new Vector3(1f, 0f, 1f); Vector3 normalized = val12.get_normalized(); Vector3 normalized2 = val6.get_normalized(); val12 = val9 - val8; float num2 = Mathf.Abs(Vector3.Dot(val12.get_normalized(), normalized)); val12 = val11 - val10; float num3 = Mathf.Abs(Vector3.Dot(val12.get_normalized(), normalized)); float num4 = Mathf.Abs(Vector3.Dot(normalized2, normalized)); float num5 = Vector3.Distance(val8, val9); float num6 = Vector3.Distance(val10, val11); float num7 = 2f * val6.get_magnitude(); Vector2 val13 = 2.828427f * m_regionFocusMargin; float num8 = num2 * num5 + num3 * num6 + num4 * num7 + ((IntPtr)(void *)val13).y; float num9 = (1f - num2) * num5 + (1f - num3) * num6 + (1f - num4) * num7 + ((IntPtr)(void *)val13).x; float num10 = num8 / 4f; float num11 = num9 / 2f / camera.get_aspect(); float num12 = Mathf.Max(num10, num11); float targetZoomLevel2 = Mathf.InverseLerp(6f, m_maxOrthoSize, num12); targetZoomLevel2 = Mathf.Floor(targetZoomLevel2 / m_zoomIncrement) * m_zoomIncrement; m_targetCameraPosition = targetCameraPosition; m_targetZoomLevel = targetZoomLevel2; m_userHasControl = false; if (m_panTween != null && TweenExtensions.IsPlaying(m_panTween)) { TweenSettingsExtensions.SetEase <Tweener>(m_panTween.ChangeEndValue((object)targetCameraPosition, panTweenDuration, true), val); } else { m_panTween = TweenSettingsExtensions.SetEase <TweenerCore <Vector3, Vector3, VectorOptions> >(DOTween.To(new DOGetter <Vector3>((object)this, (IntPtr)(void *) /*OpCode not supported: LdFtn*/), new DOSetter <Vector3>((object)this, (IntPtr)(void *) /*OpCode not supported: LdFtn*/), targetCameraPosition, panTweenDuration), val); } float num13 = Mathf.Lerp(0f, num, Mathf.Abs(targetZoomLevel2 - m_zoomLevel) / m_zoomIncrement); if (m_zoomTween != null && TweenExtensions.IsPlaying(m_zoomTween)) { TweenSettingsExtensions.SetEase <Tweener>(m_zoomTween.ChangeEndValue((object)targetZoomLevel2, num13, true), val2); } else { m_zoomTween = TweenSettingsExtensions.SetEase <TweenerCore <float, float, FloatOptions> >(DOTween.To(new DOGetter <float>((object)this, (IntPtr)(void *) /*OpCode not supported: LdFtn*/), new DOSetter <float>((object)this, (IntPtr)(void *) /*OpCode not supported: LdFtn*/), targetZoomLevel2, num13), val2); } while (TweenExtensions.IsPlaying(m_panTween) || TweenExtensions.IsPlaying(m_zoomTween)) { yield return(null); if (m_targetCameraPosition != targetCameraPosition || m_targetZoomLevel != targetZoomLevel2) { break; } } m_regionFocusCoroutine = null; m_userHasControl = true; }
public void StartFocusOnMapRegion([NotNull] IMapDefinition mapDefinition, int regionIndex, [CanBeNull] CameraControlParameters parameters = null) { m_regionFocusCoroutine = this.StartCoroutine(FocusOnMapRegion(mapDefinition, regionIndex, parameters)); }