예제 #1
0
        public static void ExpectInvalidBranch(ref CSGTreeBranch operation)
        {
            CSGNodeType type = CSGTreeNode.Encapsulate(operation.NodeID).Type;

            Assert.AreEqual(false, operation.Valid);
            Assert.AreEqual(0, operation.UserID);
            Assert.AreEqual(CSGNodeType.None, type);
        }
예제 #2
0
        public static void ExpectInvalidTree(ref CSGTree model)
        {
            CSGNodeType type = CSGTreeNode.Encapsulate(model.NodeID).Type;

            Assert.AreEqual(false, model.Valid);
            Assert.AreEqual(0, model.UserID);
            Assert.AreEqual(CSGNodeType.None, type);
        }
예제 #3
0
        public static void ExpectInvalidBrush(ref CSGTreeBrush brush)
        {
            CSGNodeType type = CSGTreeNode.Encapsulate(brush.NodeID).Type;

            Assert.AreEqual(false, brush.Valid);
            Assert.AreEqual(0, brush.UserID);
            Assert.AreEqual(CSGNodeType.None, type);
        }
예제 #4
0
        public static void ExpectValidTreeWithUserID(ref CSGTree model, int userID)
        {
            CSGNodeType type = CSGTreeNode.Encapsulate(model.NodeID).Type;

            Assert.AreEqual(true, model.Valid);
            Assert.AreNotEqual(0, model.NodeID);
            Assert.AreEqual(userID, model.UserID);
            Assert.AreEqual(CSGNodeType.Tree, type);
        }
예제 #5
0
        public static void ExpectValidBranchWithUserID(ref CSGTreeBranch operation, int userID)
        {
            CSGNodeType type = CSGTreeNode.Encapsulate(operation.NodeID).Type;

            Assert.AreEqual(true, operation.Valid);
            Assert.AreNotEqual(0, operation.NodeID);
            Assert.AreEqual(userID, operation.UserID);
            Assert.AreEqual(CSGNodeType.Branch, type);
        }
예제 #6
0
        public static void ExpectValidBrushWithUserID(ref CSGTreeBrush brush, int userID)
        {
            CSGNodeType type = CSGTreeNode.Encapsulate(brush.NodeID).Type;

            Assert.AreEqual(true, brush.Valid);
            Assert.AreNotEqual(0, brush.NodeID);
            Assert.AreEqual(userID, brush.UserID);
            Assert.AreEqual(CSGNodeType.Brush, type);
        }
        void OnGUI()
        {
            if (styles == null)
            {
                UpdateStyles();
            }

            var selectedInstanceIDs = new HashSet <int>();

            foreach (var instanceID in Selection.instanceIDs)
            {
                var obj = EditorUtility.InstanceIDToObject(instanceID);
                var go  = obj as GameObject;
                if (go != null)
                {
                    foreach (var no in go.GetComponents <ChiselNode>())
                    {
                        var instanceID_ = no.GetInstanceID();
                        selectedInstanceIDs.Add(instanceID_);
                    }
                }
            }

            float kItemHeight = EditorGUIUtility.singleLineHeight;

            var allNodes        = CSGManager.AllTreeNodes;
            var allRootNodeList = new List <CSGTreeNode>();

            for (int i = 0; i < allNodes.Length; i++)
            {
                if (allNodes[i].Type != CSGNodeType.Tree &&
                    (allNodes[i].Tree.Valid || allNodes[i].Parent.Valid))
                {
                    continue;
                }

                allRootNodeList.Add(allNodes[i]);
            }

            var allRootNodes = allRootNodeList.ToArray();

            var totalCount = GetVisibleItems(allRootNodes, ref openNodes);

            var itemArea = position;

            itemArea.x       = 0;
            itemArea.y       = 0;
            itemArea.height -= 200;

            var totalRect = position;

            totalRect.x      = 0;
            totalRect.y      = 0;
            totalRect.width  = position.width - kScrollWidth;
            totalRect.height = (totalCount * kItemHeight) + (2 * kPadding);

            var itemRect = position;

            itemRect.x      = 0;
            itemRect.y      = kPadding;
            itemRect.height = kItemHeight;

            m_ScrollPos = GUI.BeginScrollView(itemArea, m_ScrollPos, totalRect);
            {
                Rect visibleArea = itemArea;
                visibleArea.x += m_ScrollPos.x;
                visibleArea.y += m_ScrollPos.y;

                AddFoldOuts(ref itemRect, ref visibleArea, allRootNodes, selectedInstanceIDs, ref openNodes);
            }
            GUI.EndScrollView();
            if (selectedInstanceIDs.Count == 1)
            {
                var instanceID = selectedInstanceIDs.First();
                var obj        = EditorUtility.InstanceIDToObject(instanceID) as ChiselNode;
                if (obj)
                {
                    var brush     = obj as ChiselBrush;
                    var operation = obj as ChiselOperation;
                    var model     = obj as ChiselModel;
                    int nodeID    = CSGTreeNode.InvalidNode.NodeID;
                    if (brush)
                    {
                        nodeID = brush.TopNode.NodeID;
                    }
                    else if (operation)
                    {
                        nodeID = operation.Node.NodeID;
                    }
                    else if (model)
                    {
                        nodeID = model.Node.NodeID;
                    }
                    else
                    {
                        for (int n = 0; n < allNodes.Length; n++)
                        {
                            if (allNodes[n].UserID == instanceID)
                            {
                                nodeID = allNodes[n].NodeID;
                                break;
                            }
                        }
                    }

                    if (nodeID != CSGTreeNode.InvalidNode.NodeID)
                    {
                        var labelArea = itemArea;
                        labelArea.x      = 0;
                        labelArea.y      = labelArea.height;
                        labelArea.height = kItemHeight;
                        CSGTreeNode node = CSGTreeNode.Encapsulate(nodeID);
                        GUI.Label(labelArea, "NodeID: " + (nodeID - 1)); labelArea.y      += kItemHeight;
                        GUI.Label(labelArea, "UserID: " + node.UserID); labelArea.y       += kItemHeight;
                        GUI.Label(labelArea, "Operation: " + node.Operation); labelArea.y += kItemHeight;
                        GUI.Label(labelArea, "Valid: " + node.Valid); labelArea.y         += kItemHeight;
                        GUI.Label(labelArea, "NodeType: " + node.Type); labelArea.y       += kItemHeight;
                        GUI.Label(labelArea, "ChildCount: " + node.Count); labelArea.y    += kItemHeight;
                        if (node.Type != CSGNodeType.Tree)
                        {
                            GUI.Label(labelArea, "Parent: " + (node.Parent.NodeID - 1) + " valid: " + node.Parent.Valid); labelArea.y += kItemHeight;
                            GUI.Label(labelArea, "Model: " + (node.Tree.NodeID - 1) + " valid: " + node.Tree.Valid); labelArea.y      += kItemHeight;
                        }
                        if (node.Type == CSGNodeType.Brush)
                        {
                            var treeBrush         = (CSGTreeBrush)node;
                            var brushMeshInstance = treeBrush.BrushMesh;
                            GUI.Label(labelArea, "BrushMeshInstance: " + brushMeshInstance.BrushMeshID + " valid: " + brushMeshInstance.Valid); labelArea.y += kItemHeight;
                        }
                    }
                }
            }
        }