Пример #1
0
        public override void Setup(HierarchyData data)
        {
            base.Setup(data);

            // First time setup
            if (cubeMaterial == null)
            {
                // Cube material might change for hover state, so we always instance it
                m_CubeRenderer = m_Cube.GetComponent <Renderer>();
                cubeMaterial   = MaterialUtils.GetMaterialClone(m_CubeRenderer);
                m_NormalColor  = cubeMaterial.color;

                m_LockRenderer       = m_Lock.GetComponent <Renderer>();
                m_Lock.hoverStarted += (bh, ed) => { m_HoveringLock = true; };
                m_Lock.hoverEnded   += (bh, ed) => { m_HoveringLock = false; };
                m_Lock.dragEnded    += ToggleLock;

                m_ExpandArrowRenderer    = m_ExpandArrow.GetComponent <Renderer>();
                m_ExpandArrow.dragEnded += ToggleExpanded;
                m_Cube.dragStarted      += OnDragStarted;
                m_Cube.dragging         += OnDragging;
                m_Cube.dragEnded        += OnDragEnded;

                m_Cube.hoverStarted += OnHoverStarted;
                m_Cube.hoverEnded   += OnHoverEnded;

                m_Cube.click += OnClick;

                m_Cube.getDropObject = GetDropObject;
                m_Cube.canDrop       = CanDrop;
                m_Cube.receiveDrop   = ReceiveDrop;

                var dropZoneRenderer = m_DropZone.GetComponent <Renderer>();
                dropZoneMaterial = MaterialUtils.GetMaterialClone(dropZoneRenderer);
                var color = dropZoneMaterial.color;
                m_DropZoneHighlightAlpha = color.a;
                color.a = 0;
                dropZoneMaterial.color = color;

                m_DropZone.dropHoverStarted += OnDropHoverStarted;
                m_DropZone.dropHoverEnded   += OnDropHoverEnded;

                m_DropZone.canDrop       = CanDrop;
                m_DropZone.receiveDrop   = ReceiveDrop;
                m_DropZone.getDropObject = GetDropObject;
            }

            m_CubeTransform     = m_Cube.transform;
            m_DropZoneTransform = m_DropZone.transform;
            m_Text.text         = data.name;

            // HACK: We need to kick the canvasRenderer to update the mesh properly
            m_Text.gameObject.SetActive(false);
            m_Text.gameObject.SetActive(true);

            hovering = false;
        }
        protected override void Setup()
        {
            base.Setup();

            m_TextMaterial        = Instantiate(m_TextMaterial);
            m_ExpandArrowMaterial = Instantiate(m_ExpandArrowMaterial);

            m_BottomDropZoneMaterial    = MaterialUtils.GetMaterialClone(m_BottomDropZone.GetComponent <Renderer>());
            m_BottomDropZoneStartHeight = m_BottomDropZone.transform.localScale.z;
            m_TopDropZoneMaterial       = MaterialUtils.GetMaterialClone(m_TopDropZone.GetComponent <Renderer>());
            var color = m_TopDropZoneMaterial.color;

            m_DropZoneAlpha                = color.a;
            color.a                        = 0;
            m_TopDropZoneMaterial.color    = color;
            m_BottomDropZoneMaterial.color = color;

            var dropZones = new[] { m_BottomDropZone, m_TopDropZone };

            foreach (var dropZone in dropZones)
            {
                dropZone.canDrop           = CanDrop;
                dropZone.receiveDrop       = RecieveDrop;
                dropZone.dropHoverStarted += DropHoverStarted;
                dropZone.dropHoverEnded   += DropHoverEnded;
            }

            m_BottomDropZone.gameObject.SetActive(false);             // Don't block scroll interaction
        }
Пример #3
0
        public override void Setup(FolderData listData)
        {
            base.Setup(listData);

            // First time setup
            if (m_CubeRenderer == null)
            {
                // Cube material might change for hover state, so we always instance it
                m_CubeRenderer = m_Cube.GetComponent <Renderer>();
                m_NormalColor  = m_CubeRenderer.sharedMaterial.color;
                MaterialUtils.GetMaterialClone(m_CubeRenderer);

                m_ExpandArrow.dragEnded += ToggleExpanded;
                m_Cube.dragStarted      += SelectFolder;
                m_Cube.dragEnded        += ToggleExpanded;

                m_Cube.hoverStarted += OnHoverStarted;
                m_Cube.hoverEnded   += OnHoverEnded;
            }

            m_CubeTransform = m_Cube.transform;
            m_Text.text     = listData.name;

            // HACK: We need to kick the canvasRenderer to update the mesh properly
            m_Text.gameObject.SetActive(false);
            m_Text.gameObject.SetActive(true);

            m_ExpandArrow.gameObject.SetActive(listData.children != null);
            m_Hovering = false;
        }
Пример #4
0
        public override void Setup(FolderData listData, bool firstTime = true)
        {
            base.Setup(listData, firstTime);

            if (firstTime)
            {
                // Cube material might change for hover state, so we always instance it
                m_CubeRenderer = m_Cube.GetComponent <Renderer>();
                m_NormalColor  = m_CubeRenderer.sharedMaterial.color;
                MaterialUtils.GetMaterialClone(m_CubeRenderer);

                m_ExpandArrow.pointerUp += ToggleExpanded;
                m_Cube.pointerDown      += SelectFolder;
                m_Cube.pointerUp        += ToggleExpanded;

                m_Cube.hoverStarted += OnHoverStarted;
                m_Cube.hoverEnded   += OnHoverEnded;
            }

            m_CubeTransform = m_Cube.transform;
            m_Text.text     = listData.name;

            m_ExpandArrow.gameObject.SetActive(listData.children != null);
            m_Hovering = false;
        }
        protected override void ShowHoverState(BaseHandle handle, bool hovering)
        {
            base.ShowHoverState(handle, hovering);

            if (handle is RadialHandle)
            {
                handle.GetComponent <MeshFilter>().sharedMesh = hovering ? m_FatRadialHandleMesh : m_RadialHandleMesh;
            }
        }
Пример #6
0
        protected virtual void ShowHoverState(BaseHandle handle, bool hovering)
        {
            var   type = handle.GetType();
            float scaleBump;

            if (m_ScaleBumps.TryGetValue(type, out scaleBump))
            {
                handle.transform.localScale = hovering ? handle.transform.localScale * scaleBump : handle.transform.localScale / scaleBump;
            }

            var handleRenderer = handle.GetComponent <Renderer>();
            var material       = handleRenderer.sharedMaterial;
            var color          = material.color;

            color.a        = hovering ? m_HandleHoverAlpha : m_HandleAlpha;
            material.color = color;
        }
Пример #7
0
        public virtual void SetMaterials(Material rowMaterial, Material backingCubeMaterial, Material uiMaterial, Material uiMaskMaterial, Material textMaterial, Material noClipBackingCube, Material[] highlightMaterials, Material[] noClipHighlightMaterials)
        {
            m_NoClipBackingCube        = noClipBackingCube;
            m_NoClipHighlightMaterials = noClipHighlightMaterials;

            m_Cube.GetComponent <Renderer>().sharedMaterial = rowMaterial;

            var cuboidLayouts = GetComponentsInChildren <CuboidLayout>(true);

            foreach (var cuboidLayout in cuboidLayouts)
            {
                cuboidLayout.SetMaterials(backingCubeMaterial, highlightMaterials);
            }

            var workspaceButtons = GetComponentsInChildren <WorkspaceButton>(true);

            foreach (var button in workspaceButtons)
            {
                button.buttonMeshRenderer.sharedMaterials = highlightMaterials;
            }

            var graphics = GetComponentsInChildren <Graphic>(true);

            foreach (var graphic in graphics)
            {
                graphic.material = uiMaterial;
            }

            // Texts need a specific shader
            var texts = GetComponentsInChildren <Text>(true);

            foreach (var text in texts)
            {
                text.material = textMaterial;
            }

            // Don't clip masks
            var masks = GetComponentsInChildren <Mask>(true);

            foreach (var mask in masks)
            {
                mask.graphic.material = uiMaskMaterial;
            }
        }
Пример #8
0
    public override void Setup(FolderData listData)
    {
        base.Setup(listData);
        // First time setup
        if (m_CubeRenderer == null)
        {
            // Cube material might change, so we always instance it
            m_CubeRenderer = m_Cube.GetComponent <Renderer>();
            m_NormalColor  = m_CubeRenderer.sharedMaterial.color;
            U.Material.GetMaterialClone(m_CubeRenderer);

            m_ExpandArrow.dragEnded += ToggleExpanded;
            m_Cube.dragStarted      += SelectFolder;

            m_Cube.hoverStarted += OnHoverStarted;
            m_Cube.hoverEnded   += OnHoverEnded;
        }

        m_Text.text = listData.name;
        m_ExpandArrow.gameObject.SetActive(listData.children != null);
        m_Hovering = false;
    }
Пример #9
0
        public override void Setup(HierarchyData data)
        {
            base.Setup(data);

            // First time setup
            if (cubeMaterial == null)
            {
                // Cube material might change for hover state, so we always instance it
                m_CubeRenderer = m_Cube.GetComponent <Renderer>();
                cubeMaterial   = MaterialUtils.GetMaterialClone(m_CubeRenderer);
                m_NormalColor  = cubeMaterial.color;

                m_LockRenderer       = m_Lock.GetComponent <Renderer>();
                m_Lock.hoverStarted += (bh, ed) => { m_HoveringLock = true; };
                m_Lock.hoverEnded   += (bh, ed) => { m_HoveringLock = false; };
                m_Lock.dragEnded    += ToggleLock;

                m_ExpandArrowRenderer    = m_ExpandArrow.GetComponent <Renderer>();
                m_ExpandArrow.dragEnded += ToggleExpanded;
                m_Cube.dragStarted      += OnDragStarted;
                m_Cube.dragging         += OnDragging;
                m_Cube.dragEnded        += OnDragEnded;

                m_Cube.hoverStarted += OnHoverStarted;
                m_Cube.hoverEnded   += OnHoverEnded;

                m_Cube.click += OnClick;

                m_Cube.getDropObject = GetDropObject;
                m_Cube.canDrop       = CanDrop;
                m_Cube.receiveDrop   = ReceiveDrop;

                var dropZoneRenderer = m_DropZone.GetComponent <Renderer>();
                dropZoneMaterial = MaterialUtils.GetMaterialClone(dropZoneRenderer);
                var color = dropZoneMaterial.color;
                m_DropZoneHighlightAlpha = color.a;
                color.a = 0;
                dropZoneMaterial.color = color;

                m_DropZone.dropHoverStarted += OnDropHoverStarted;
                m_DropZone.dropHoverEnded   += OnDropHoverEnded;

                m_DropZone.canDrop       = CanDrop;
                m_DropZone.receiveDrop   = ReceiveDrop;
                m_DropZone.getDropObject = GetDropObject;

                m_NormalTextColor = m_Text.color;
            }

            m_CubeTransform     = m_Cube.transform;
            m_DropZoneTransform = m_DropZone.transform;

            var name = data.name;

            if (data.gameObject == null)
            {
                m_SceneText.text = string.IsNullOrEmpty(name) ? "Untitled" : name;
                m_SceneIcon.gameObject.SetActive(true);
                m_SceneText.gameObject.SetActive(true);
                m_Text.gameObject.SetActive(false);
            }
            else
            {
                m_Text.text = name;
                m_SceneIcon.gameObject.SetActive(false);
                m_SceneText.gameObject.SetActive(false);
                m_Text.gameObject.SetActive(true);
            }

            hovering = false;
        }
Пример #10
0
 public void SetMaterials(Material textMaterial, Material expandArrowMaterial)
 {
     m_Text.material = textMaterial;
     m_ExpandArrow.GetComponent <Renderer>().sharedMaterial = expandArrowMaterial;
 }
Пример #11
0
        protected virtual void UpdateHandleTip(BaseHandle handle, HandleEventData eventData, bool active)
        {
            var       rayOrigin = eventData.rayOrigin;
            HandleTip handleTip;
            Renderer  handleTipRenderer;

            if (!m_HandleTips.TryGetValue(rayOrigin, out handleTip))
            {
                handleTipRenderer = m_HandleTip;
                if (m_HandleTips.Count > 0)
                {
                    handleTipRenderer = ObjectUtils.Instantiate(handleTipRenderer.gameObject, transform).GetComponent <Renderer>();
                }

                handleTip = new HandleTip {
                    renderer = handleTipRenderer
                };
                m_HandleTips[rayOrigin] = handleTip;
            }
            else
            {
                handleTipRenderer = handleTip.renderer;
            }

            active = active && (handle is LinearHandle || handle is RadialHandle);

            var handleTipGameObject = handleTipRenderer.gameObject;
            var wasActive           = handleTipGameObject.activeSelf;

            handleTipGameObject.SetActive(active);
            var handleTipTransform = handleTipRenderer.transform;

            if (active)             // Reposition handle tip based on current raycast position when hovering or dragging
            {
                handleTipRenderer.sharedMaterial = handle.GetComponent <Renderer>().sharedMaterial;

                var handleTransform       = handle.transform;
                var handleTipPosition     = handleTipTransform.position;
                var distanceFromRayOrigin = Vector3.Distance(handleTipPosition, rayOrigin.position);

                var linearEventData = eventData as LinearHandle.LinearHandleEventData;
                var lerp            = wasActive ? k_LazyFollow * Time.deltaTime : 1;
                if (linearEventData != null)
                {
                    handleTipTransform.position = Vector3.Lerp(handleTipPosition,
                                                               handleTransform.TransformPoint(new Vector3(0, 0,
                                                                                                          handleTransform.InverseTransformPoint(linearEventData.raycastHitWorldPosition).z)),
                                                               lerp);

                    var handleForward = handleTransform.forward;
                    var delta         = handleTipPosition - handleTip.lastPosition;
                    if (delta.magnitude > k_MinHandleTipDirectionDelta * distanceFromRayOrigin)
                    {
                        handleTip.direction    = Mathf.Sign(Vector3.Dot(delta, handleForward));
                        handleTip.lastPosition = handleTipPosition;
                    }

                    handleTipTransform.forward = handleForward * handleTip.direction;
                }

                var radialEventData = eventData as RadialHandle.RadialHandleEventData;
                if (radialEventData != null)
                {
                    var positionOffset = handleTip.positionOffset;
                    if (positionOffset.HasValue)
                    {
                        handleTipTransform.position = handleTransform.TransformPoint(positionOffset.Value);
                    }
                    else
                    {
                        var newLocalPos = handleTransform.InverseTransformPoint(radialEventData.raycastHitWorldPosition);
                        newLocalPos.y = 0;
                        handleTipTransform.position = Vector3.Lerp(handleTipPosition,
                                                                   handleTransform.TransformPoint(newLocalPos.normalized * 0.5f * handleTransform.localScale.x),
                                                                   lerp);
                    }

                    var forward = Vector3.Cross(handleTransform.up, (handleTipPosition - handleTransform.position).normalized);
                    var delta   = handleTipPosition - handleTip.lastPosition;
                    if (delta.magnitude > k_MinHandleTipDirectionDelta * distanceFromRayOrigin)
                    {
                        handleTip.direction    = Mathf.Sign(Vector3.Dot(delta, forward));
                        handleTip.lastPosition = handleTipPosition;
                    }

                    if (forward != Vector3.zero)
                    {
                        handleTipTransform.forward = forward * handleTip.direction;
                    }
                }

                if (handle.hasDragSource && !handleTip.positionOffset.HasValue)
                {
                    handleTip.positionOffset = handle.transform.InverseTransformPoint(handleTipTransform.position);
                }
            }
            else if (!handle.hasDragSource)
            {
                handleTip.positionOffset = null;
            }
        }