private void Update() { #if UNITY_EDITOR if (m_instance == null) { m_instance = this; m_animations = new List <IAnimationInfo>(); } #endif for (int i = 0; i < m_animations.Count; ++i) { IAnimationInfo animation = m_animations[i]; if (animation.Delay > 0) { animation.Delay -= Time.deltaTime; } else { animation.T += Time.deltaTime; } if (animation.T >= animation.Duration) { m_animations.Remove(animation); } } }
private void Focus(float distance, float objSize) { const float duration = 0.1f; m_focusAnimation = new Vector3AnimationInfo(Window.Camera.transform.position, PivotTransform.position - distance * Window.Camera.transform.forward, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (Window.Camera) { Window.Camera.transform.position = value; m_targetPosition = value; } }); Run.Instance.Animation(m_focusAnimation); Run.Instance.Animation(new FloatAnimationInfo(m_orbitDistance, distance, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { m_orbitDistance = value; })); Run.Instance.Animation(new FloatAnimationInfo(Window.Camera.orthographicSize, objSize, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (Window.Camera) { Window.Camera.orthographicSize = value; } })); }
public void Animation(IAnimationInfo animation) { if (m_animations.Contains(animation)) { return; } m_animations.Add(animation); }
public override void Focus() { if (m_lockInput) { return; } if (Editor.Selection.activeTransform == null) { return; } m_autoFocusTransform = Editor.Selection.activeTransform; if (Editor.Selection.activeTransform.gameObject.hideFlags != HideFlags.None) { return; } Bounds bounds = CalculateBounds(Editor.Selection.activeTransform); float fov = Window.Camera.fieldOfView * Mathf.Deg2Rad; float objSize = Mathf.Max(bounds.extents.y, bounds.extents.x, bounds.extents.z) * 2.0f; float distance = Mathf.Abs(objSize / Mathf.Sin(fov / 2.0f)); m_mouseOrbit.Target.position = bounds.center; m_mouseOrbit.SecondaryTarget.position = Editor.Selection.activeTransform.position; const float duration = 0.1f; m_focusAnimation = new Vector3AnimationInfo(Window.Camera.transform.position, m_mouseOrbit.Target.position - distance * Window.Camera.transform.forward, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (Window.Camera) { Window.Camera.transform.position = value; } }); Run.Instance.Animation(m_focusAnimation); Run.Instance.Animation(new FloatAnimationInfo(m_mouseOrbit.Distance, distance, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (m_mouseOrbit) { m_mouseOrbit.Distance = value; } })); Run.Instance.Animation(new FloatAnimationInfo(Window.Camera.orthographicSize, objSize, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (Window.Camera) { Window.Camera.orthographicSize = value; } })); }
public void Click() { if (m_selectedAxis != Vector3.zero) { if (m_selectedAxis == Vector3.one) { IsOrthographic = !IsOrthographic; } else { if (m_rotateAnimation == null || !m_rotateAnimation.InProgress) { if (OrientationChanging != null) { OrientationChanging.Invoke(); } } if (m_rotateAnimation != null) { m_rotateAnimation.Abort(); } Vector3 pivot = Pivot.transform.position; Vector3 radiusVector = Vector3.back * (Window.Camera.transform.position - pivot).magnitude; Quaternion targetRotation = Quaternion.LookRotation(-m_selectedAxis, Up); m_rotateAnimation = new QuaternionAnimationInfo(Window.Camera.transform.rotation, targetRotation, 0.4f, QuaternionAnimationInfo.EaseOutCubic, (target, value, t, completed) => { Window.Camera.transform.position = pivot + value * radiusVector; Window.Camera.transform.rotation = value; if (completed) { DisableColliders(); EnableColliders(); if (OrientationChanged != null) { OrientationChanged.Invoke(); } } }); Run.Instance.Animation(m_rotateAnimation); } } }
public override void Focus() { if (m_lockInput) { return; } if (Selection.activeTransform == null) { return; } if (!m_canFocusTerrain && Selection.activeTransform.GetComponent <Terrain>()) { return; } m_autoFocusTransform = Selection.activeTransform; if ((Selection.activeTransform.gameObject.hideFlags & HideFlags.DontSave) != 0) { return; } Bounds bounds = CalculateBounds(Selection.activeTransform); float objSize = Mathf.Max(bounds.extents.y, bounds.extents.x, bounds.extents.z) * 2.0f; float distance; if (ChangeOrthographicSizeOnly && IsOrthographic) { distance = m_orbitDistance; } else { float fov = Window.Camera.fieldOfView * Mathf.Deg2Rad; distance = Mathf.Abs(objSize / Mathf.Sin(fov / 2.0f)); } PivotTransform.position = bounds.center; SecondaryPivotTransform.position = Selection.activeTransform.position; const float duration = 0.1f; m_focusAnimation = new Vector3AnimationInfo(Window.Camera.transform.position, PivotTransform.position - distance * Window.Camera.transform.forward, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (Window.Camera) { Window.Camera.transform.position = value; m_targetPosition = value; } }); Run.Instance.Animation(m_focusAnimation); Run.Instance.Animation(new FloatAnimationInfo(m_orbitDistance, distance, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { m_orbitDistance = value; })); Run.Instance.Animation(new FloatAnimationInfo(Window.Camera.orthographicSize, objSize, duration, Vector3AnimationInfo.EaseOutCubic, (target, value, t, completed) => { if (Window.Camera) { Window.Camera.orthographicSize = value; } })); }
private void Update() { if (m_position != transform.position || m_rotation != transform.rotation) { InitColliders(); m_position = transform.position; m_rotation = transform.rotation; } if (m_screenHeight != Screen.height || m_screenWidth != Screen.width) { m_screenHeight = Screen.height; m_screenWidth = Screen.width; UpdateLayout(); } if (m_aspect != m_camera.aspect) { m_camera.pixelRect = new Rect(SceneCamera.pixelWidth - Size.x, SceneCamera.pixelHeight - Size.y, Size.x, Size.y); m_aspect = m_camera.aspect; } float delta = Time.deltaTime / m_animationDuration; bool updateAlpha = UpdateAlpha(ref m_xAlpha, Vector3.right, delta); updateAlpha |= UpdateAlpha(ref m_yAlpha, Vector3.up, delta); updateAlpha |= UpdateAlpha(ref m_zAlpha, Vector3.forward, delta); m_camera.transform.rotation = SceneCamera.transform.rotation; Vector2 guiMousePositon = Input.mousePosition; guiMousePositon.y = Screen.height - guiMousePositon.y; bool isMouseOverButton = m_buttonRect.Contains(guiMousePositon, true); RuntimeTools.IsSceneGizmoSelected = isMouseOverButton; if (m_camera.pixelRect.Contains(Input.mousePosition)) { if (!m_mouseOver || updateAlpha) { EnableColliders(); } Collider collider = HitTest(); if (collider == null || m_rotateAnimation != null && m_rotateAnimation.InProgress) { m_selectedAxis = Vector3.zero; } else if (collider == m_colliderProj) { m_selectedAxis = Vector3.one; } else if (collider == m_colliderUp) { m_selectedAxis = Vector3.up; } else if (collider == m_colliderDown) { m_selectedAxis = Vector3.down; } else if (collider == m_colliderForward) { m_selectedAxis = Vector3.forward; } else if (collider == m_colliderBackward) { m_selectedAxis = Vector3.back; } else if (collider == m_colliderRight) { m_selectedAxis = Vector3.right; } else if (collider == m_colliderLeft) { m_selectedAxis = Vector3.left; } if (m_selectedAxis != Vector3.zero || isMouseOverButton) { RuntimeTools.IsSceneGizmoSelected = true; } else { RuntimeTools.IsSceneGizmoSelected = false; } if (Input.GetMouseButtonUp(0)) { if (m_selectedAxis != Vector3.zero) { if (m_selectedAxis == Vector3.one) { IsOrthographic = !IsOrthographic; } else { if (m_rotateAnimation == null || !m_rotateAnimation.InProgress) { if (OrientationChanging != null) { OrientationChanging.Invoke(); } } if (m_rotateAnimation != null) { m_rotateAnimation.Abort(); } Vector3 pivot = Pivot.transform.position; Vector3 radiusVector = Vector3.back * (SceneCamera.transform.position - pivot).magnitude; Quaternion targetRotation = Quaternion.LookRotation(-m_selectedAxis, Vector3.up); m_rotateAnimation = new QuaternionAnimationInfo(SceneCamera.transform.rotation, targetRotation, 0.4f, QuaternionAnimationInfo.EaseOutCubic, (target, value, t, completed) => { SceneCamera.transform.position = pivot + value * radiusVector; SceneCamera.transform.rotation = value; if (completed) { DisableColliders(); EnableColliders(); if (OrientationChanged != null) { OrientationChanged.Invoke(); } } }); Run.Instance.Animation(m_rotateAnimation); } } } m_mouseOver = true; } else { if (m_mouseOver) { DisableColliders(); RuntimeTools.IsSceneGizmoSelected = false; } m_mouseOver = false; } }
public void Remove(IAnimationInfo animation) { m_animations.Remove(animation); }
private void Update() { Sync(); float delta = Time.deltaTime / m_animationDuration; bool updateAlpha = UpdateAlpha(ref m_xAlpha, Vector3.right, delta); updateAlpha |= UpdateAlpha(ref m_yAlpha, Vector3.up, delta); updateAlpha |= UpdateAlpha(ref m_zAlpha, Vector3.forward, delta); if (RuntimeTools.IsPointerOverGameObject()) { if (RuntimeTools.ActiveTool == this) { RuntimeTools.ActiveTool = null; } m_selectedAxis = Vector3.zero; return; } if (RuntimeTools.IsViewing) { m_selectedAxis = Vector3.zero; return; } if (RuntimeTools.ActiveTool != null && RuntimeTools.ActiveTool != this) { m_selectedAxis = Vector3.zero; return; } Vector2 guiMousePositon = InputController._MousePosition; guiMousePositon.y = Screen.height - guiMousePositon.y; bool isMouseOverButton = m_buttonRect.Contains(guiMousePositon, true); if (isMouseOverButton) { RuntimeTools.ActiveTool = this; } else { RuntimeTools.ActiveTool = null; } if (m_camera.pixelRect.Contains(InputController._MousePosition)) { if (!m_mouseOver || updateAlpha) { EnableColliders(); } Collider collider = HitTest(); if (collider == null || m_rotateAnimation != null && m_rotateAnimation.InProgress) { m_selectedAxis = Vector3.zero; } else if (collider == m_colliderProj) { m_selectedAxis = Vector3.one; } else if (collider == m_colliderUp) { m_selectedAxis = Vector3.up; } else if (collider == m_colliderDown) { m_selectedAxis = Vector3.down; } else if (collider == m_colliderForward) { m_selectedAxis = Vector3.forward; } else if (collider == m_colliderBackward) { m_selectedAxis = Vector3.back; } else if (collider == m_colliderRight) { m_selectedAxis = Vector3.right; } else if (collider == m_colliderLeft) { m_selectedAxis = Vector3.left; } if (m_selectedAxis != Vector3.zero || isMouseOverButton) { //RuntimeTools.IsSceneGizmoSelected = true; RuntimeTools.ActiveTool = this; } else { //RuntimeTools.IsSceneGizmoSelected = false; RuntimeTools.ActiveTool = null; } if (InputController._GetMouseButtonUp(0)) { if (m_selectedAxis != Vector3.zero) { if (m_selectedAxis == Vector3.one) { IsOrthographic = !IsOrthographic; } else { if (m_rotateAnimation == null || !m_rotateAnimation.InProgress) { if (OrientationChanging != null) { OrientationChanging.Invoke(); } } if (m_rotateAnimation != null) { m_rotateAnimation.Abort(); } Vector3 pivot = Pivot.transform.position; Vector3 radiusVector = Vector3.back * (SceneCamera.transform.position - pivot).magnitude; Quaternion targetRotation = Quaternion.LookRotation(-m_selectedAxis, Up); m_rotateAnimation = new QuaternionAnimationInfo(SceneCamera.transform.rotation, targetRotation, 0.4f, QuaternionAnimationInfo.EaseOutCubic, (target, value, t, completed) => { SceneCamera.transform.position = pivot + value * radiusVector; SceneCamera.transform.rotation = value; if (completed) { DisableColliders(); EnableColliders(); if (OrientationChanged != null) { OrientationChanged.Invoke(); } } }); Run.Instance.Animation(m_rotateAnimation); } } } m_mouseOver = true; } else { if (m_mouseOver) { DisableColliders(); RuntimeTools.ActiveTool = null; } m_mouseOver = false; } }