protected override void UpdateOverride()
        {
            base.UpdateOverride();
            if (RuntimeEditorApplication.IsActiveWindow(this))
            {
                if (InputController._GetKeyDown(RemoveKey))
                {
                    if (m_treeView.SelectedItem != null)
                    {
                        ProjectItem projectItem = (ProjectItem)m_treeView.SelectedItem;
                        if (projectItem.Parent == null)
                        {
                            PopupWindow.Show("Unable to Remove", "Unable to remove root folder", "OK");
                        }
                        else
                        {
                            PopupWindow.Show("Remove Selected assets", "You can not undo this action", "Delete", args =>
                            {
                                m_treeView.RemoveSelectedItems();
                            }, "Cancel");
                        }
                    }
                }
            }


            if (RuntimeEditorApplication.IsPointerOverWindow(this))
            {
                if (m_dragProjectItem != null)
                {
                    m_treeView.ExternalItemDrag(InputController._MousePosition);
                }
            }
        }
        protected override void UpdateOverride()
        {
            base.UpdateOverride();
            if (!RuntimeEditorApplication.IsPointerOverWindow(this))
            {
                return;
            }

            if (InputController.GetKeyDown(SelectAllKey))
            {
                if (InputController.GetKey(ModifierKey))
                {
                    if (RuntimeEditorApplication.IsActiveWindow(this))
                    {
                        m_treeView.SelectedItems = m_treeView.Items;
                    }
                }
            }

            if (RuntimeTools.SpawnPrefab == null)
            {
                return;
            }

            m_treeView.ExternalItemDrag(Input.mousePosition);

            if (Input.GetMouseButtonUp(0))
            {
                m_isSpawningPrefab = true;
                GameObject prefabInstance = RuntimeTools.SpawnPrefab.InstantiatePrefab(Vector3.zero, Quaternion.identity);
                prefabInstance.SetActive(true);

                ExposeToEditor exposeToEditor = prefabInstance.GetComponent <ExposeToEditor>();
                if (exposeToEditor == null)
                {
                    exposeToEditor = prefabInstance.AddComponent <ExposeToEditor>();
                }

                exposeToEditor.SetName(RuntimeTools.SpawnPrefab.name);
                RuntimeUndo.BeginRecord();
                RuntimeUndo.RecordSelection();
                RuntimeUndo.BeginRegisterCreateObject(prefabInstance);
                RuntimeUndo.EndRecord();

                bool isEnabled = RuntimeUndo.Enabled;
                RuntimeUndo.Enabled = false;
                RuntimeSelection.activeGameObject = prefabInstance;
                RuntimeUndo.Enabled = isEnabled;

                RuntimeUndo.BeginRecord();
                RuntimeUndo.RegisterCreatedObject(prefabInstance);
                RuntimeUndo.RecordSelection();
                RuntimeUndo.EndRecord();

                RuntimeTools.SpawnPrefab = null;
            }
        }
示例#3
0
        protected override void UpdateOverride()
        {
            base.UpdateOverride();

            if (RuntimeTools.ActiveTool != null)
            {
                return;
            }

            HandleInput();

            if (RuntimeEditorApplication.IsPointerOverWindow(this))
            {
                SetCursor();
            }
            else
            {
                CursorHelper.ResetCursor(this);
            }
        }
示例#4
0
        private void CompleteSpawn(object item)
        {
            ItemContainer itemContainer = m_listBox.GetItemContainer(item);

            if (itemContainer != null)
            {
                ResourcePreview resource = itemContainer.GetComponentInChildren <ResourcePreview>();
                resource.CompleteSpawn();
            }

            if (RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.Resources))
            {
                RuntimeTools.SpawnPrefab = null;
            }

            if (Drop != null)
            {
                Drop(this, new ProjectResourcesEventArgs(new [] { (ProjectItemObjectPair)item }));
            }
        }
        public ProjectItem BeginDropProjectItem()
        {
            ProjectItem dropTarget = null;

            if (m_dragProjectItem != null)
            {
                if (m_treeView.DropAction == ItemDropAction.SetLastChild)
                {
                    dropTarget = (ProjectItem)m_treeView.DropTarget;
                }

                if (RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.ProjectTree))
                {
                    RuntimeTools.SpawnPrefab = null;
                }
            }
            m_treeView.ExternalItemDrop();
            m_dragProjectItem = null;

            return(dropTarget);
        }
示例#6
0
        private void LateUpdate()
        {
            if (RuntimeTools.ActiveTool != null && RuntimeTools.ActiveTool != this)
            {
                return;
            }

            if (RuntimeTools.IsViewing)
            {
                return;
            }

            if (KeyCode == KeyCode.None || InputController.GetKeyDown(KeyCode))
            {
                m_active = true;
            }

            if (m_active)
            {
                if (Input.GetMouseButtonDown(MouseButton))
                {
                    m_startMousePosition = Input.mousePosition;
                    m_isDragging         = GetPoint(out m_startPt) &&
                                           (!RuntimeEditorApplication.IsOpened || RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.SceneView) && !RuntimeTools.IsPointerOverGameObject());
                    if (m_isDragging)
                    {
                        m_rectTransform.anchoredPosition = m_startPt;
                        m_rectTransform.sizeDelta        = new Vector2(0, 0);
                        CursorHelper.SetCursor(this, null, Vector3.zero, CursorMode.Auto);
                    }
                    else
                    {
                        RuntimeTools.ActiveTool = null;
                    }
                }
                else if (Input.GetMouseButtonUp(MouseButton))
                {
                    if (m_isDragging)
                    {
                        m_isDragging = false;

                        HitTest();
                        m_rectTransform.sizeDelta = new Vector2(0, 0);
                        CursorHelper.ResetCursor(this);
                    }

                    RuntimeTools.ActiveTool = null;
                    m_active = false;
                }
                else if (m_isDragging)
                {
                    GetPoint(out m_endPt);

                    Vector2 size = m_endPt - m_startPt;
                    if (size != Vector2.zero)
                    {
                        RuntimeTools.ActiveTool = this;
                    }
                    m_rectTransform.sizeDelta  = new Vector2(Mathf.Abs(size.x), Mathf.Abs(size.y));
                    m_rectTransform.localScale = new Vector3(Mathf.Sign(size.x), Mathf.Sign(size.y), 1);
                }
            }
        }
        public void CompleteSpawn()
        {
            if (RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.SceneView))
            {
                if (m_resource is Material)
                {
                    Material material    = (Material)m_resource;
                    Camera   sceneCamera = RuntimeEditorApplication.ActiveSceneCamera;
                    if (sceneCamera)
                    {
                        Ray        ray = sceneCamera.ScreenPointToRay(Input.mousePosition);
                        RaycastHit hitInfo;
                        if (Physics.Raycast(ray, out hitInfo))
                        {
                            MeshRenderer        renderer  = hitInfo.collider.GetComponentInChildren <MeshRenderer>();
                            SkinnedMeshRenderer sRenderer = hitInfo.collider.GetComponentInChildren <SkinnedMeshRenderer>();
                            if (renderer != null || sRenderer != null)
                            {
                                RuntimeUndo.BeginRecord();
                            }

                            if (renderer != null)
                            {
                                RuntimeUndo.RecordValue(renderer, Strong.PropertyInfo((MeshRenderer x) => x.sharedMaterials));
                                Material[] materials = renderer.sharedMaterials;
                                for (int i = 0; i < materials.Length; ++i)
                                {
                                    materials[i] = material;
                                }
                                renderer.sharedMaterials = materials;
                            }

                            if (sRenderer != null)
                            {
                                RuntimeUndo.RecordValue(sRenderer, Strong.PropertyInfo((SkinnedMeshRenderer x) => x.sharedMaterials));
                                Material[] materials = sRenderer.sharedMaterials;
                                for (int i = 0; i < materials.Length; ++i)
                                {
                                    materials[i] = material;
                                }
                                sRenderer.sharedMaterials = materials;
                            }

                            if (renderer != null || sRenderer != null)
                            {
                                RuntimeUndo.EndRecord();
                            }

                            if (renderer != null || sRenderer != null)
                            {
                                RuntimeUndo.BeginRecord();
                            }

                            if (renderer != null)
                            {
                                RuntimeUndo.RecordValue(renderer, Strong.PropertyInfo((MeshRenderer x) => x.sharedMaterials));
                            }

                            if (sRenderer != null)
                            {
                                RuntimeUndo.RecordValue(sRenderer, Strong.PropertyInfo((SkinnedMeshRenderer x) => x.sharedMaterials));
                            }

                            if (renderer != null || sRenderer != null)
                            {
                                RuntimeUndo.EndRecord();
                            }
                        }
                    }
                }
                else
                {
                    if (m_state == State.AfterSpawn)
                    {
                        bool isEnabled = RuntimeUndo.Enabled;
                        RuntimeUndo.Enabled      = false;
                        RuntimeSelection.objects = m_selection;
                        RuntimeUndo.Enabled      = isEnabled;

                        RuntimeUndo.BeginRecord();
                        RuntimeUndo.RecordSelection();
                        RuntimeUndo.BeginRegisterCreateObject(m_instance);
                        RuntimeUndo.EndRecord();

                        RuntimeUndo.Enabled = false;
                        RuntimeSelection.activeGameObject = m_instance;
                        RuntimeUndo.Enabled = isEnabled;

                        RuntimeUndo.BeginRecord();
                        RuntimeUndo.RegisterCreatedObject(m_instance);
                        RuntimeUndo.RecordSelection();
                        RuntimeUndo.EndRecord();
                    }
                }
                EndSpawn();
                RuntimeEditorApplication.ActivateWindow(RuntimeWindowType.SceneView);
            }
            else
            {
                if (!RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.Hierarchy))
                {
                    EndSpawn();
                }
            }
        }
        private void Update()
        {
            if (InputController._GetMouseButtonDown(0))
            {
                if (RuntimeTools.Current != Tool && RuntimeTools.Current != RuntimeTool.None || RuntimeTools.IsViewing)
                {
                    return;
                }

                if (RuntimeTools.IsPointerOverGameObject())
                {
                    return;
                }

                if (SceneCamera == null)
                {
                    Debug.LogError("Camera is null");
                    return;
                }

                if (RuntimeTools.ActiveTool != null)
                {
                    return;
                }

                if (RuntimeEditorApplication.ActiveSceneCamera != null && !RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.SceneView))
                {
                    return;
                }

                m_isDragging = OnBeginDrag();
                if (m_isDragging)
                {
                    RuntimeTools.ActiveTool = this;
                    RecordTransform();
                }
                else
                {
                    RuntimeTools.ActiveTool = null;
                }
            }
            else if (InputController._GetMouseButtonUp(0))
            {
                TryCancelDrag();
            }
            else
            {
                if (m_isDragging)
                {
                    if (InputController._GetKey(UnitSnapKey) || RuntimeTools.UnitSnapping)
                    {
                        EffectiveGridUnitSize = CurrentGridUnitSize;
                    }
                    else
                    {
                        EffectiveGridUnitSize = 0;
                    }

                    OnDrag();
                }
            }


            UpdateOverride();

            if (Model != null)
            {
                SyncModelTransform();
            }

            if (m_isDragging)
            {
                if (RuntimeTools.PivotMode == RuntimePivotMode.Center && m_commonCenterTarget != null && m_realTargets != null && m_realTargets.Length > 1)
                {
                    for (int i = 0; i < m_commonCenterTarget.Length; ++i)
                    {
                        Transform commonCenterTarget = m_commonCenterTarget[i];
                        Transform target             = m_realTargets[i];

                        target.transform.position   = commonCenterTarget.position;
                        target.transform.rotation   = commonCenterTarget.rotation;
                        target.transform.localScale = commonCenterTarget.localScale;
                    }
                }
            }
        }
        private void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (RuntimeTools.IsPointerOverGameObject())
                {
                    return;
                }

                if (SceneCamera == null)
                {
                    Debug.LogError("Camera is null");
                    return;
                }

                if (RuntimeTools.IsViewing)
                {
                    return;
                }

                if (RuntimeTools.ActiveTool != null)
                {
                    return;
                }

                if (RuntimeEditorApplication.ActiveSceneCamera != null && !RuntimeEditorApplication.IsPointerOverWindow(RuntimeWindowType.SceneView))
                {
                    return;
                }

                Vector2 pointer = Input.mousePosition;
                m_dragIndex = Hit(pointer, HandlesPositions, HandlesNormals);
                if (m_dragIndex >= 0 && OnBeginDrag(m_dragIndex))
                {
                    m_handlesTransform        = HandlesTransform;
                    m_handlesInverseTransform = Matrix4x4.TRS(Target.position, Target.rotation, Target.localScale).inverse;  // m_handlesTransform.inverse;
                    m_dragPlane  = GetDragPlane();
                    m_isDragging = GetPointOnDragPlane(Input.mousePosition, out m_prevPoint);
                    m_normal     = HandlesNormals[m_dragIndex].normalized;
                    if (m_isDragging)
                    {
                        RuntimeTools.ActiveTool = this;
                    }
                    if (EnableUndo)
                    {
                        bool isRecording = RuntimeUndo.IsRecording;
                        if (!isRecording)
                        {
                            RuntimeUndo.BeginRecord();
                        }
                        RecordOverride();
                        if (!isRecording)
                        {
                            RuntimeUndo.EndRecord();
                        }
                    }
                }
            }
            else if (Input.GetMouseButtonUp(0))
            {
                if (m_isDragging)
                {
                    OnDrop();
                    bool isRecording = RuntimeUndo.IsRecording;
                    if (!isRecording)
                    {
                        RuntimeUndo.BeginRecord();
                    }
                    RecordOverride();
                    if (!isRecording)
                    {
                        RuntimeUndo.EndRecord();
                    }
                    m_isDragging            = false;
                    RuntimeTools.ActiveTool = null;
                }
            }
            else
            {
                if (m_isDragging)
                {
                    Vector3 point;
                    if (GetPointOnDragPlane(Input.mousePosition, out point))
                    {
                        Vector3 offset = m_handlesInverseTransform.MultiplyVector(point - m_prevPoint);
                        offset = Vector3.Project(offset, m_normal);
                        if (InputController.GetKey(UnitSnapKey) || RuntimeTools.UnitSnapping)
                        {
                            Vector3 gridOffset = Vector3.zero;
                            if (Mathf.Abs(offset.x * 1.5f) >= GridSize)
                            {
                                gridOffset.x = GridSize * Mathf.Sign(offset.x);
                            }

                            if (Mathf.Abs(offset.y * 1.5f) >= GridSize)
                            {
                                gridOffset.y = GridSize * Mathf.Sign(offset.y);
                            }

                            if (Mathf.Abs(offset.z * 1.5f) >= GridSize)
                            {
                                gridOffset.z = GridSize * Mathf.Sign(offset.z);
                            }

                            if (gridOffset != Vector3.zero)
                            {
                                if (OnDrag(m_dragIndex, gridOffset))
                                {
                                    m_prevPoint = point;
                                }
                            }
                        }
                        else
                        {
                            if (OnDrag(m_dragIndex, offset))
                            {
                                m_prevPoint = point;
                            }
                        }
                    }
                }
            }

            UpdateOverride();
        }