コード例 #1
0
            public CollectionNodeDynamic(CollectionNode node)
            {
                transform = node.transform;
                Name      = node.Name;
                Offset    = node.Offset;
                Radius    = node.Radius;

                localPositionOnStartup    = transform.localPosition;
                localEulerAnglesOnStartup = transform.localEulerAngles;
            }
コード例 #2
0
        /// <summary>
        /// Update the facing of a node given the nodes new position for facing orign with node and orientation type
        /// </summary>
        /// <param name="node"></param>
        /// <param name="orientType"></param>
        /// <param name="newPos"></param>
        private void UpdateNodeFacing(CollectionNode node, OrientTypeEnum orientType, Vector3 newPos = default(Vector3))
        {
            Vector3 centerAxis;
            Vector3 pointOnAxisNearestNode;

            switch (OrientType)
            {
            case OrientTypeEnum.FaceOrigin:
                node.transform.rotation = Quaternion.LookRotation(node.transform.position - transform.position, transform.up);
                break;

            case OrientTypeEnum.FaceOriginReversed:
                node.transform.rotation = Quaternion.LookRotation(transform.position - node.transform.position, transform.up);
                break;

            case OrientTypeEnum.FaceCenterAxis:
                centerAxis              = Vector3.Project(node.transform.position - transform.position, transform.up);
                pointOnAxisNearestNode  = transform.position + centerAxis;
                node.transform.rotation = Quaternion.LookRotation(node.transform.position - pointOnAxisNearestNode, transform.up);
                break;

            case OrientTypeEnum.FaceCenterAxisReversed:
                centerAxis              = Vector3.Project(node.transform.position - transform.position, transform.up);
                pointOnAxisNearestNode  = transform.position + centerAxis;
                node.transform.rotation = Quaternion.LookRotation(pointOnAxisNearestNode - node.transform.position, transform.up);
                break;

            case OrientTypeEnum.FaceFoward:
                node.transform.forward = transform.rotation * Vector3.forward;
                break;

            case OrientTypeEnum.FaceForwardReversed:
                node.transform.forward = transform.rotation * Vector3.back;
                break;

            case OrientTypeEnum.FaceParentUp:
                node.transform.forward = transform.rotation * Vector3.up;
                break;

            case OrientTypeEnum.FaceParentDown:
                node.transform.forward = transform.rotation * Vector3.down;
                break;

            case OrientTypeEnum.None:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #3
0
 /// <summary>
 /// Update the facing of a node given the nodes new position for facing orign with node and orientation type
 /// </summary>
 /// <param name="node"></param>
 /// <param name="orientType"></param>
 /// <param name="newPos"></param>
 private void UpdateNodeFacing(CollectionNode node, Vector3 newPos = default(Vector3))
 {
     node.transform.forward = transform.rotation * Vector3.forward;
 }
コード例 #4
0
        /// <summary>
        /// Update collection is called from the editor button on the inspector.
        /// This function rebuilds / updates the layout.
        /// </summary>
        public void UpdateCollection()
        {
            // Check for empty nodes and remove them
            List <CollectionNode> emptyNodes = new List <CollectionNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                if (NodeList[i].transform == null || (IgnoreInactiveTransforms && !NodeList[i].transform.gameObject.activeSelf) || NodeList[i].transform.parent == null || !(NodeList[i].transform.parent.gameObject == gameObject))
                {
                    emptyNodes.Add(NodeList[i]);
                }
            }

            // Now delete the empty nodes
            for (int i = 0; i < emptyNodes.Count; i++)
            {
                NodeList.Remove(emptyNodes[i]);
            }

            emptyNodes.Clear();

            // Check when children change and adjust
            for (int i = 0; i < transform.childCount; i++)
            {
                Transform child = transform.GetChild(i);

                if (!ContainsNode(child) && (child.gameObject.activeSelf || !IgnoreInactiveTransforms))
                {
                    CollectionNode node = new CollectionNode();

                    node.Name      = child.name;
                    node.transform = child;
                    NodeList.Add(node);
                }
            }

            switch (SortType)
            {
            case SortTypeEnum.None:
                break;

            case SortTypeEnum.Transform:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.transform.GetSiblingIndex().CompareTo(c2.transform.GetSiblingIndex())); });
                break;

            case SortTypeEnum.Alphabetical:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.Name.CompareTo(c2.Name)); });
                break;

            case SortTypeEnum.AlphabeticalReversed:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.Name.CompareTo(c2.Name)); });
                NodeList.Reverse();
                break;

            case SortTypeEnum.TransformReversed:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.transform.GetSiblingIndex().CompareTo(c2.transform.GetSiblingIndex())); });
                NodeList.Reverse();
                break;
            }

            _columns         = Mathf.CeilToInt((float)NodeList.Count / Rows);
            Width            = _columns * CellWidth;
            Height           = Rows * CellHeight;
            _halfCell        = new Vector2(CellWidth * 0.5f, CellHeight * 0.5f);
            _circumference   = 2f * Mathf.PI * Radius;
            _radialCellAngle = RadialRange / _columns;

            LayoutChildren();

            if (OnCollectionUpdated != null)
            {
                OnCollectionUpdated.Invoke(this);
            }
        }
コード例 #5
0
        /// <summary>
        /// Update collection is called from the editor button on the inspector.
        /// This function rebuilds / updates the layout.
        /// </summary>
        public void UpdateCollection()
        {
            // Check for empty nodes and remove them

            List <CollectionNode> emptyNodes = new List <CollectionNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                if (NodeList[i].transform == null || (IgnoreInactiveTransforms && !NodeList[i].transform.gameObject.activeSelf) || NodeList[i].transform.parent == null || !(NodeList[i].transform.parent.gameObject == this.gameObject))
                {
                    emptyNodes.Add(NodeList[i]);
                }
            }

            // Now delete the empty nodes
            for (int i = 0; i < emptyNodes.Count; i++)
            {
                //Debug.Log("+++++ We removed : " + emptyNodes[i].Name);

                Debug.Log("I will remove: " + emptyNodes[i].Name);

                NodeList.Remove(emptyNodes[i]);


                //Debug.Log("+++++ Kinder: " + this.transform.childCount);


                //Destroy(emptyNodes[i].transform.gameObject);
            }

            emptyNodes.Clear();


            // Check when children change and adjust
            for (int i = 0; i < this.transform.childCount; i++)
            {
                Transform child = this.transform.GetChild(i);

                if (!ContainsNode(child) && (child.gameObject.activeSelf || !IgnoreInactiveTransforms))
                {
                    CollectionNode node = new CollectionNode();

                    node.Name      = child.name;
                    node.transform = child;
                    NodeList.Add(node);
                }
            }



            switch (SortType)
            {
            case SortTypeEnum.None:
                break;

            case SortTypeEnum.Transform:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.transform.GetSiblingIndex().CompareTo(c2.transform.GetSiblingIndex())); });
                break;

            case SortTypeEnum.Alphabetical:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.Name.CompareTo(c2.Name)); });
                break;

            case SortTypeEnum.AlphabeticalReversed:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.Name.CompareTo(c2.Name)); });
                NodeList.Reverse();
                break;

            case SortTypeEnum.TransformReversed:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2) { return(c1.transform.GetSiblingIndex().CompareTo(c2.transform.GetSiblingIndex())); });
                NodeList.Reverse();
                break;

            case SortTypeEnum.EmptyNodelast:
                NodeList.Sort(delegate(CollectionNode c1, CollectionNode c2)
                {
                    //return c1.Name.CompareTo("emptyGameObjectNode");
                    if (c2.Name == "emptyNode")
                    {
                        return(-1);
                    }
                    else
                    {
                        return(1);
                    }
                });
                break;
            }



            _columns         = Columns;
            _halfCell        = new Vector2(CellWidth * 0.5f, CellHeight * 0.5f);
            _circumference   = 2f * Mathf.PI * Radius;
            _radialCellAngle = RadialRange / _columns;

            //updateRowsColums();

            /*
             * Debug.Log("Die Daten:");
             * Debug.Log("--Width: " + Width);
             * Debug.Log("--Height: " + Height);
             * Debug.Log("--CellWidth: " + CellWidth);
             * Debug.Log("--CellHeight: " + CellHeight);
             * Debug.Log("--NodeTransform: " + NodeList[0].transform.localScale.ToString());
             * Debug.Log("--NodeTransform: " + NodeList[0].transform.position.ToString());
             */

            generateNodeGrid();
            LayoutChildren();

            if (OnCollectionUpdated != null)
            {
                OnCollectionUpdated.Invoke(this);
            }
        }