コード例 #1
0
ファイル: Run.cs プロジェクト: dada97/PointCloud_Viewer
        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);
                }
            }
        }
コード例 #2
0
        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;
                }
            }));
        }
コード例 #3
0
        public void Animation(IAnimationInfo animation)
        {
            if (m_animations.Contains(animation))
            {
                return;
            }

            m_animations.Add(animation);
        }
コード例 #4
0
        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;
                }
            }));
        }
コード例 #5
0
        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);
                }
            }
        }
コード例 #6
0
        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;
                }
            }));
        }
コード例 #7
0
        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;
            }
        }
コード例 #8
0
 public void Remove(IAnimationInfo animation)
 {
     m_animations.Remove(animation);
 }
コード例 #9
0
        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;
            }
        }