Exemple #1
0
        static public void DeleteKey()
        {
            if (Selection.transforms != null)
            {
                for (int i = 0; i < Selection.transforms.Length; i++)
                {
                    Transform t = Selection.transforms[i];

                    TC_LayerGroup       layerGroup      = t.GetComponent <TC_LayerGroup>();
                    TC_LayerGroupResult groupResult     = t.GetComponent <TC_LayerGroupResult>();
                    TC_SelectItemGroup  selectItemGroup = t.GetComponent <TC_SelectItemGroup>();
                    TC_NodeGroup        nodeGroup       = t.GetComponent <TC_NodeGroup>();
                    TC_Node             node            = t.GetComponent <TC_Node>();

                    if (node != null)
                    {
                        if (node.nodeType == NodeGroupType.Select)
                        {
                            TC_NodeGroup nodeGroupParent = (TC_NodeGroup)node.parentItem;
                            if (nodeGroupParent.itemList.Count == 1 && node.outputId != TC.heightOutput)
                            {
                                TC.AddMessage("Select node cannot be deleted as there is always minimum one needed in a Layer."); continue;
                            }
                        }
                    }
                    else if (layerGroup != null)
                    {
                        if (layerGroup.level == 0)
                        {
                            TC.AddMessage("The main " + TC.outputNames[layerGroup.outputId] + " Output Layer Group cannot be deleted. \n\nRight click to clear it."); continue;
                        }
                    }
                    else if (groupResult != null)
                    {
                        TC.AddMessage("A Result Node cannot be deleted. The Layer Group itself needs to be deleted."); continue;
                    }
                    else if (selectItemGroup != null)
                    {
                        selectItemGroup.Clear(true); continue;
                    }
                    else if (nodeGroup != null)
                    {
                        nodeGroup.Clear(true); continue;
                    }

                    Undo.DestroyObjectImmediate(Selection.gameObjects[i]);
                    --i;
                }
            }
        }
Exemple #2
0
        static public void DuplicateKey()
        {
            Transform[] transforms = (Transform[])Selection.transforms.Clone();

            if (transforms != null)
            {
                List <GameObject> gos = new List <GameObject>();

                for (int i = 0; i < transforms.Length; i++)
                {
                    Transform t = transforms[i];

                    TC_LayerGroup       layerGroup      = t.GetComponent <TC_LayerGroup>();
                    TC_LayerGroupResult groupResult     = t.GetComponent <TC_LayerGroupResult>();
                    TC_SelectItemGroup  selectItemGroup = t.GetComponent <TC_SelectItemGroup>();
                    TC_NodeGroup        nodeGroup       = t.GetComponent <TC_NodeGroup>();

                    if (layerGroup != null)
                    {
                        if (layerGroup.level == 0)
                        {
                            TC.AddMessage("The main " + TC.outputNames[layerGroup.outputId] + " Output Layer Group cannot be duplicated."); continue;
                        }
                    }
                    else if (groupResult != null)
                    {
                        TC.AddMessage("A Result Node cannot be duplicated."); continue;
                    }
                    else if (selectItemGroup != null)
                    {
                        TC.AddMessage("A " + TC.outputNames[selectItemGroup.outputId] + " Group cannot be directly duplicated.\n\nDrag & drop works with it, while dropping hold the alt key to duplicate it."); continue;
                    }
                    else if (nodeGroup != null)
                    {
                        TC.AddMessage("A " + nodeGroup.type.ToString() + " Group cannot be directly duplicated.\n\nDrag & drop works with it, while dropping hold the alt key to duplicate it."); continue;
                    }

                    TC_ItemBehaviour item = t.GetComponent <TC_ItemBehaviour>();
                    if (item != null)
                    {
                        gos.Add(item.Duplicate(item.transform.parent).gameObject);
                    }
                }
                if (gos.Count > 0)
                {
                    Selection.objects = gos.ToArray();
                }
            }
        }
Exemple #3
0
        public void GetItem(int outputId, bool rebuildGlobalLists, bool resetTextures)
        {
            // Debug.Log("Terrain Layer GetItem " + TC.outputNames[outputId]);
            active = visible;

            if (t.childCount < 6)
            {
                active = false;
                return;
            }

            if (outputId == TC.objectOutput)
            {
                if (objectSelectItems == null)
                {
                    objectSelectItems = new List <TC_SelectItem>();
                }
                else
                {
                    objectSelectItems.Clear();
                }
            }
            else if (outputId == TC.treeOutput)
            {
                if (treeSelectItems == null)
                {
                    treeSelectItems = new List <TC_SelectItem>();
                }
                else
                {
                    treeSelectItems.Clear();
                }
            }

            Transform     child      = t.GetChild(outputId);
            TC_LayerGroup layerGroup = child.GetComponent <TC_LayerGroup>();

            if (layerGroup != null)
            {
                layerGroup.level      = 0;
                layerGroup.outputId   = outputId;
                layerGroup.listIndex  = outputId;
                layerGroup.parentItem = this;

                layerGroup.GetItems(true, rebuildGlobalLists, resetTextures);
                layerGroups[outputId] = layerGroup;
            }
        }
Exemple #4
0
        static public void LeftClickMenu(object obj)
        {
            int    instanceID;
            string command = TD.ObjectToCommandAndInstanceID(obj, out instanceID);

            TC_LayerGroup layerGroup = EditorUtility.InstanceIDToObject(instanceID) as TC_LayerGroup;

            if (layerGroup != null)
            {
                if (command == "Add Mask")
                {
                    layerGroup.maskNodeGroup.Add <TC_Node>("", false, false, true, 0);
                }
                else if (command == "Add Layer Inside")
                {
                    layerGroup.groupResult.Add <TC_Layer>("", false, true);
                }
                else if (command == "Add LayerGroup Inside")
                {
                    layerGroup.groupResult.Add <TC_LayerGroup>("", false, false, true);
                }
                else if (command == "Add Layer")
                {
                    layerGroup.groupResult.Add <TC_Layer>("", true, true);
                }
                else if (command == "Add LayerGroup")
                {
                    layerGroup.groupResult.Add <TC_LayerGroup>("", true, false, true);
                }
                else if (command == "Duplicate LayerGroup")
                {
                    layerGroup.Duplicate(layerGroup.t.parent);
                }
                else if (command == "Clear LayerGroup")
                {
                    layerGroup.groupResult.Clear(true);
                }
                else if (command == "Erase LayerGroup")
                {
                    layerGroup.DestroyMe(true);
                }
            }
        }
Exemple #5
0
 public void ResetObjects()
 {
     for (int i = 0; i < itemList.Count; i++)
     {
         TC_Layer layer = itemList[i] as TC_Layer;
         if (layer != null)
         {
             layer.ResetObjects();
         }
         else
         {
             TC_LayerGroup layerGroup = itemList[i] as TC_LayerGroup;
             if (layerGroup != null)
             {
                 layerGroup.ResetObjects();
             }
         }
     }
 }
Exemple #6
0
        static void DropDownMenu(Rect rect, TC_LayerGroup layerGroup)
        {
            if (TD.ClickRect(rect) != 1)
            {
                return;
            }

            GenericMenu menu = new GenericMenu();

            // menu.AddItem(new GUIContent("Add Layer"), false, LeftClickMenu, "Add Layer");
            string instanceID = layerGroup.GetInstanceID().ToString();

            //if (layerGroup.level > 1)
            //{
            //    menu.AddSeparator("");
            //    menu.AddItem(new GUIContent("Add Layer"), false, LeftClickMenu, instanceID + ":Add Layer");
            //    menu.AddItem(new GUIContent("Add Layer Group"), false, LeftClickMenu, instanceID + ":Add LayerGroup");
            //    menu.AddItem(new GUIContent("Duplicate Layer Group"), false, LeftClickMenu, instanceID + ":Duplicate LayerGroup");
            //    menu.AddSeparator("");
            //}
            if (layerGroup.groupResult.itemList.Count > 0)
            {
                //if (layerGroup.level == 0 && layerGroup.outputId == TC.heightOutput)
                //{
                //    menu.AddItem(new GUIContent("Export Heightmap"), false, LeftClickMenu, instanceID + ":Export Heightmap");
                //    menu.AddSeparator("");
                //}
                //else if (layerGroup.level == 0 && layerGroup.outputId == TC.colorOutput)
                //{
                //    menu.AddItem(new GUIContent("Export Colormap"), false, LeftClickMenu, instanceID + ":Export Colormap");
                //    menu.AddSeparator("");
                //}

                menu.AddItem(new GUIContent("Clear Layer Group"), false, LeftClickMenu, instanceID + ":Clear LayerGroup");
            }
            // if (layerGroup.level > 1) menu.AddItem(new GUIContent("Erase Layer Group"), false, LeftClickMenu, instanceID + ":Erase LayerGroup");

            menu.ShowAsContext();
        }
Exemple #7
0
        public int CalcPlaced()
        {
            int placed = 0;

            for (int i = 0; i < itemList.Count; i++)
            {
                TC_Layer layer = itemList[i] as TC_Layer;
                if (layer != null)
                {
                    placed += layer.CalcPlaced();
                }
                else
                {
                    TC_LayerGroup layerGroup = itemList[i] as TC_LayerGroup;
                    if (layerGroup != null)
                    {
                        placed += layerGroup.CalcPlaced();
                    }
                }
            }

            return(placed);
        }
Exemple #8
0
        public void LinkClone(TC_LayerGroupResult resultLayerGroupS)
        {
            preview = resultLayerGroupS.preview;

            for (int i = 0; i < itemList.Count; i++)
            {
                TC_Layer layer = itemList[i] as TC_Layer;
                if (layer != null)
                {
                    TC_Layer layerS = resultLayerGroupS.itemList[i] as TC_Layer;
                    layer.LinkClone(layerS);
                }
                else
                {
                    TC_LayerGroup layerGroup = itemList[i] as TC_LayerGroup;
                    if (layerGroup != null)
                    {
                        TC_LayerGroup layerGroupS = resultLayerGroupS.itemList[i] as TC_LayerGroup;
                        layerGroup.LinkClone(layerGroupS);
                    }
                }
            }
        }
        static public void Draw(TC_LayerGroup layerGroup, ref Vector2 pos, float posOldX, float activeMulti, bool nodeFoldout)
        {
            TC_GlobalSettings g = TC_Settings.instance.global;

            TC_LayerGroupResult groupResult = layerGroup.groupResult;

            float x1 = pos.x - 78;

            if (groupResult.foldout < 2)
            {
                x1 += nodeFoldout ? 126 : 135;
            }
            x1 -= TD.texCardBody.width / 2;
            float y1 = pos.y + (layerGroup.nodeFoldout ? TD.cardHeight : 32);

            TD.DrawTextureScaled(x1 - (TD.texShelfLinesConnectUp.width / 2), y1 - 16, TD.texShelfLinesConnectUp, Color.white);
            TD.DrawTextureScaled(x1 - (TD.texShelfLinesConnectUp.width / 2), y1 - 16, TD.texLineConnectUp, g.colLayer * activeMulti);
            x1 += 30;

            if (layerGroup.foldout == 2 && groupResult.itemList.Count > 0)
            {
                TD.DrawTextureScaled(x1, y1 + 16, posOldX - x1 - g.layerHSpace, TD.texShelfLinesHorizontal, Color.white);
                TD.DrawTextureScaled(x1, y1 + 16, posOldX - x1 - g.layerHSpace, TD.texLineHorizontal, g.colLayer * activeMulti);
            }
            else
            {
                Vector2 posOld = pos;
                pos.x  = x1 + 52;
                pos.y += layerGroup.nodeFoldout ? 258 : -94;
                int mouseClick = TD.DrawNodeCount(groupResult, ref pos, groupResult.itemList.Count, true, ref layerGroup.foldout, g.colLayer * activeMulti, g.rect.width);
                if (groupResult.itemList.Count == 0)
                {
                    if (mouseClick == 0)
                    {
                        groupResult.Add <TC_Layer>("", false);
                    }
                    else if (mouseClick == 1)
                    {
                        groupResult.Add <TC_LayerGroup>("", false);
                    }
                }
                else
                {
                    if (mouseClick == 0)
                    {
                        layerGroup.nodeFoldout = true;
                    }
                }

                pos = posOld;
            }

            TD.DrawBracket(ref pos, nodeFoldout, true, g.colLayerGroup * activeMulti, ref groupResult.foldout, true, true);
            if (groupResult.foldout == 2)
            {
                bool isCulled = false;
                pos.x -= TD.texCardBody.width;
                TD.DrawNode(groupResult, pos, g.colLayer, Color.white, ref isCulled, activeMulti, nodeFoldout, false, true);

                int mouseButton = TD.Button(new Rect(pos.x + 245.1f, pos.y + 6.5f, 20, 20), TD.texFoldout, true, new Color(1, 1, 1, 0.25f), Color.white, Color.white, true);
                if (mouseButton == 0)
                {
                    if (layerGroup.foldout == 0)
                    {
                        layerGroup.foldout = 2;
                    }
                    else
                    {
                        layerGroup.foldout = 0;
                    }
                }
            }
            else
            {
                if (nodeFoldout)
                {
                    TD.DrawNodeCount(groupResult, ref pos, 1, true, ref groupResult.foldout, g.colLayerGroup * activeMulti, 1);
                }
            }
            TD.DrawBracket(ref pos, nodeFoldout, false, g.colLayerGroup * activeMulti, ref groupResult.foldout, true, true);
        }
Exemple #10
0
        static public void Draw(TC_LayerGroup layerGroup, bool drawMethod, ref Vector2 pos, float activeMulti, bool isFirst, bool isLast, ref float shelfLineVerticalStartY)
        {
            TC_GlobalSettings g = TC_Settings.instance.global;

            if (layerGroup.level == 0)
            {
                pos.x -= TD.texShelfStartOutput.width;
            }

            float posOldX = pos.x;

            bool isCulled = false;

            layerGroup.nodePos = pos - new Vector2(0, TD.cardHeight);
            Rect rect = DrawLayerOrLayerGroup(layerGroup, ref pos, g.colLayerGroup, ref isCulled, activeMulti, drawMethod, isFirst, isLast);

            activeMulti = layerGroup.active ? activeMulti : activeMulti * 0.75f;

            // Rect rectFoldout = TD.GetRectScaled(pos.x + 240, pos.y + 43 + (layerGroup.nodeFoldout ? TD.cardHeight : 32), 20, 20);
            // if (GUI.Button(rectFoldout, "")) layerGroup.foldout = !layerGroup.foldout;

            shelfLineVerticalStartY = pos.y + (layerGroup.nodeFoldout ? TD.texShelfLayerStart1.height : TD.texShelfLayerCollapsed.height) - TD.shelfOffsetY;

            DropDownMenu(rect, layerGroup);

            Vector2 bar2 = pos;

            bar2.x -= TD.texCardBody.width * 1.5f;
            bar2.y += TD.cardHeight;

            TC_NodeGroupGUI.Draw(layerGroup.maskNodeGroup, ref pos, g.colMaskNodeGroup, g.colMaskNode, g.colLayerGroup, activeMulti, layerGroup.nodeFoldout, false, false, false);
            // if (startOffsetXMax > startOffset.x) startOffsetXMax = startOffset.x;

            // Draw Result Node
            TC_LayerGroupResultGUI.Draw(layerGroup, ref pos, posOldX, activeMulti, layerGroup.nodeFoldout);

            int layerGroupCount = 0;
            int layerCount      = 0;

            float lineOffsetX;

            if (layerGroup.maskNodeGroup.itemList.Count > 0)
            {
                lineOffsetX = 2.5f;
            }
            else
            {
                lineOffsetX = 0;
            }

            bool  m_isFirst, m_isLast;
            float m_shelfLineVerticalStartY = 0;

            pos.y += layerGroup.nodeFoldout ? (TD.cardHeight) : 32;

            if (layerGroup.foldout == 2)
            {
                for (int i = layerGroup.groupResult.itemList.Count - 1; i >= 0; --i)
                {
                    pos.x  = posOldX;// - lineOffsetX ;
                    pos.x -= g.layerHSpace;

                    TC_LayerGroup layerGroupChild = layerGroup.groupResult.itemList[i] as TC_LayerGroup;

                    m_isLast  = (i == 0);
                    m_isFirst = (i == layerGroup.groupResult.itemList.Count - 1);

                    if (layerGroupChild != null)
                    {
                        Draw(layerGroupChild, i != 0, ref pos, activeMulti, m_isFirst, m_isLast, ref m_shelfLineVerticalStartY);
                        if (!m_isLast)
                        {
                            pos.y += layerGroupChild.nodeFoldout ? 0 : 32;

                            TD.DrawTextureScaledV(pos.x + 64, m_shelfLineVerticalStartY, (pos.y - m_shelfLineVerticalStartY) + 16, TD.texShelfLinesVertical, Color.white);
                            TD.DrawTextureScaledV(pos.x + 64, m_shelfLineVerticalStartY, (pos.y - m_shelfLineVerticalStartY) + 16, TD.texLineVertical, g.colLayer * activeMulti);
                        }

                        ++layerGroupCount;
                    }
                    else
                    {
                        TC_Layer layer = layerGroup.groupResult.itemList[i] as TC_Layer;
                        if (layer == null)
                        {
                            continue;
                        }

                        TC_LayerGUI.Draw(layer, ref pos, activeMulti, i != 0, m_isFirst, m_isLast);
                        pos.y += layer.nodeFoldout ? TD.cardHeight : 32;
                        ++layerCount;
                    }
                }
            }

            pos.y += 64;

            Rect clickRect = TD.GetRectScaled(new Rect(bar2.x + (TD.texCardBody.width * 1.5f) - (2.5f + lineOffsetX), bar2.y - 5f, 10, 10));

            if (TD.ClickRect(clickRect, 0))
            {
                if (layerGroup.foldout == 0)
                {
                    layerGroup.foldout = 2;
                }
                else
                {
                    layerGroup.foldout = 0;
                }
            }

            pos.x = posOldX;
        }
Exemple #11
0
        static public Rect DrawLayerOrLayerGroup(TC_ItemBehaviour item, ref Vector2 pos, Color color, ref bool isCulled, float activeMulti, bool drawMethod, bool isFirst, bool isLast)
        {
            TC_GlobalSettings g          = TC_Settings.instance.global; // TODO: Make global static and init
            TC_LayerGroup     layerGroup = item as TC_LayerGroup;
            TC_Layer          layer      = item as TC_Layer;
            bool nodeFoldout             = (layerGroup != null) ? layerGroup.nodeFoldout : layer.nodeFoldout;

            if (isFirst)
            {
                pos.y += TD.shelfOffsetY;
                TD.DrawTextureScaled(pos.x, pos.y, TD.texShelfLinesConnectDown, Color.white);
                TD.DrawTextureScaled(pos.x, pos.y, TD.texLineConnectDown, g.colLayer * activeMulti);
                pos.y += TD.texShelfLinesConnectDown.height;
            }
            else if (item.level == 0)
            {
                TD.DrawTextureScaled(pos.x + 64, pos.y, TD.texShelfStartConnect, Color.white);
            }
            else
            {
                pos.y += 15;
            }

            Texture texShelf;
            Texture texLine = null;

            if (item.level == 0)
            {
                if (nodeFoldout)
                {
                    texShelf = TD.texShelfStartOutput;
                }
                else
                {
                    texShelf = TD.texShelfStartOutputCollapsed;
                }
            }
            else if (isLast)
            {
                if (nodeFoldout)
                {
                    texShelf = TD.texShelfLayerStart2; texLine = TD.texLineLayerStart2;
                }
                else
                {
                    texShelf = TD.texShelfLayerCollapsedStart2; texLine = TD.texLineLayerStart2;
                }
            }
            else
            {
                if (nodeFoldout)
                {
                    texShelf = TD.texShelfLayerStart1; texLine = TD.texLineLayerStart1;
                }
                else
                {
                    texShelf = TD.texShelfLayerCollapsedStart1; texLine = TD.texLineLayerCollapsedStart1;
                }
            }

            TD.DrawTextureScaled(pos.x, pos.y, texShelf, Color.white);
            if (item.level > 0)
            {
                TD.DrawTextureScaled(pos.x, pos.y, texLine, g.colLayer * activeMulti);
            }

            TD.DrawTextureScaled(pos.x - TD.texShelfStartOutput.width, pos.y, nodeFoldout ? TD.texShelfLayer : TD.texShelfLayerCollapsed, Color.white, false, StretchMode.Left);

            pos.y += TD.shelfOffsetY;
            pos.x -= TD.texCardBody.width - (item.level == 0 ? 20 : 34);

            isCulled = false;

            Rect nodeRect = TD.DrawNode(item, pos, color, Color.white, ref isCulled, activeMulti, nodeFoldout, drawMethod);

            if (isCulled)
            {
                return(nodeRect);
            }

            int mouseButton = TD.Button(new Rect(pos.x + 245.1f, pos.y + 6.5f, 20, 20), TD.texFoldout, true, new Color(1, 1, 1, 0.25f), Color.white, Color.white, true);

            if (mouseButton >= 0)
            {
                if (layerGroup != null)
                {
                    layerGroup.nodeFoldout = !layerGroup.nodeFoldout;
                    if (mouseButton == 0)
                    {
                        layerGroup.foldout = layerGroup.nodeFoldout ? 2 : 0;
                    }
                }
                else
                {
                    layer.nodeFoldout = !layer.nodeFoldout;
                }

                Event.current.Use();
            }

            //if (GUI.Button(TD.GetRectScaled(pos.x + 225, pos.y + 2, 40, 25), ""))
            //{
            //    if (layerGroup != null) layerGroup.nodeFoldout = !layerGroup.nodeFoldout;
            //    else layer.nodeFoldout = !layer.nodeFoldout;
            //}

            if (item.method == Method.Lerp && drawMethod)
            {
                // TD.DrawSlider(startOffset, ref item.overlay, 0, 1);
                // if (GUI.changed) TC_Generate.singleton.AutoGenerate();
            }

            if (item.level > 0)
            {
                DrawConnectionIndicator(item, new Vector2(pos.x + 289, pos.y - 27), false, true);
                if (isLast)
                {
                    DrawConnectionIndicator(item, new Vector2(pos.x + 289, pos.y + TD.cardHeight + 4), true, nodeFoldout);
                }
            }

            return(nodeRect);
        }
        static public void DrawLayerGroup(TC_TerrainLayer terrainLayer, int index, ref Vector2 pos, ref float scrollY)
        {
            TC_GlobalSettings g            = TC_Settings.instance.global;
            Event             eventCurrent = Event.current;

            TC_LayerGroup layerGroup = terrainLayer.layerGroups[index];

            if (layerGroup == null)
            {
                return;
            }

            Vector2 posOld = pos;

            float t = 0;

            TC_LayerGroupGUI.Draw(layerGroup, false, ref pos, 1, false, false, ref t);

            Rect rect;

            rect = new Rect(posOld.x + 50, posOld.y - 18, 400, 100);
            TD.DrawTextureScaled(posOld.x - 44, posOld.y, 100, TD.texLineHorizontal, g.colLayerGroup);

            Color buttonColor;

            if (layerGroup.visible)
            {
                if (layerGroup.active)
                {
                    buttonColor = Color.green;
                }
                else
                {
                    buttonColor = Color.red;
                }
            }
            else
            {
                buttonColor = Color.white;
            }

            if (TD.DrawButton(rect, TC.outputNames[layerGroup.outputId], 64, true, Color.white, TD.editorSkinMulti == 1 ? buttonColor : new Color(buttonColor.r * 0.4f, buttonColor.g * 0.4f, buttonColor.b * 0.4f, 1)))
            {
                // Debug.Log("Clicked Button");
                TD.ClickOutputButton(layerGroup);
                eventCurrent.Use();
            }

            for (int i = 0; i < 3; i++)
            {
                rect = TD.GetRectScaled(pos.x - 32 + 25, pos.y + 33 + (i * 32), 32, 32); rect.xMin = 0;
                TD.DrawTexture(rect, TD.texSeparatorCenter, new Color(1, 1, 1, 0.5f));
                rect = TD.GetRectScaled(pos.x + 25, pos.y + 33 + (i * 32), 32, 32);
                TD.DrawTexture(rect, TD.texSeparatorRight, new Color(1, 1, 1, 0.5f));
            }

            pos.y += TD.cardHeight;
            pos.y += g.outputVSpace;

            // scrollY += startY - startOffset.y;
            // else GlobalManager.singleton.scrollAdd.y = 0;
            pos.x = posOld.x;
        }
Exemple #13
0
        void DrawMenu()
        {
            TC_Settings settings = TC_Settings.instance;
            float       width    = 55;

            GUI.color = EditorGUIUtility.isProSkin ? new Color(0.2f, 0.2f, 0.2f) : new Color(0.5f, 0.5f, 0.5f);

            GUI.DrawTexture(new Rect(0, 0, TC_NodeWindow.window.position.width, 20), Texture2D.whiteTexture);
            GUI.color = Color.white;

            EditorGUILayout.BeginHorizontal();
            if (!TC_Settings.instance.hideMenuBar)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("File", EditorStyles.miniButtonMid, GUILayout.Width(width)))
                {
                    GenericMenu menu = new GenericMenu();
                    DrawFile(menu, false);
                    menu.DropDown(new Rect(1, 17, 1, 1));
                }
                if (GUILayout.Button("Options", EditorStyles.miniButtonMid, GUILayout.Width(width)))
                {
                    GenericMenu menu = new GenericMenu();
                    DrawOptions(menu, false);
                    menu.DropDown(new Rect(1 + width, 17, 1, 1));
                }
                if (GUILayout.Button("Help", EditorStyles.miniButtonMid, GUILayout.Width(width)))
                {
                    GenericMenu menu = new GenericMenu();
                    DrawHelp(menu, false);
                    menu.DropDown(new Rect(1 + width * 2, 17, 1, 1));
                }
                if (!TC_Settings.instance.global.documentationClicked)
                {
                    GUI.color = new Color(Mathf.Abs(Mathf.Sin(Time.realtimeSinceStartup)), Mathf.Abs(Mathf.Cos(Time.realtimeSinceStartup)), 0);
                }
                else
                {
                    GUI.color = Color.white;
                }

                if (GUILayout.Button("Documentation", EditorStyles.miniButtonMid, GUILayout.Width(width + 40)))
                {
                    if (Event.current.shift)
                    {
                        TC_Settings.instance.global.documentationClicked = false;
                    }
                    else
                    {
                        TC_Settings.instance.global.documentationClicked = true;
                        Application.OpenURL("http://www.terraincomposer.com/terraincomposer2-documentation/");
                    }
                }
                GUI.color = Color.white;

                GUILayout.Space(TC_NodeWindow.window.position.width - 620 - ((width * 2) + 45));
            }
            else
            {
                GUILayout.Space(TC_NodeWindow.window.position.width - 449 - (width + 5));
            }

            GUI.changed = false;
            float labelWidthOld = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 45;
            settings.seed = EditorGUILayout.FloatField("Seed", settings.seed, GUILayout.Width(100));
            if (GUILayout.Button("Random", EditorStyles.miniButtonMid, GUILayout.Width(50)))
            {
                if (eventCurrent.control)
                {
                    TC_Settings.instance.seed = 0;
                }
                else
                {
                    float oldSeed;
                    do
                    {
                        oldSeed = TC_Settings.instance.seed;
                        TC_Settings.instance.seed = Random.Range(-20000.0f, 20000.0f);
                    }while (oldSeed == TC_Settings.instance.seed);
                }
                GUI.changed = true;
            }
            if (GUI.changed)
            {
                EditorUtility.SetDirty(settings);
                TC.AutoGenerate();
            }
            GUILayout.Space(20);
            EditorGUIUtility.labelWidth = labelWidthOld;

            for (int i = 0; i < 6; i++)
            {
                TC_LayerGroup layerGroup = terrainLayer.layerGroups[i];
                if (layerGroup == null)
                {
                    break;
                }
                if (layerGroup.visible)
                {
                    if (layerGroup.active)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    else
                    {
                        GUI.backgroundColor = Color.red;
                    }
                }
                if (GUILayout.Button(TC.outputNames[i][0].ToString(), EditorStyles.miniButtonMid, GUILayout.Width(25)))
                {
                    if (eventCurrent.control)
                    {
                        settings.scrollOffset = -layerGroup.nodePos;
                    }
                    else
                    {
                        TD.ClickOutputButton(layerGroup);
                    }
                }
                GUI.backgroundColor = Color.white;
            }
            GUILayout.Space(5);

            if (GUILayout.Button("Generate", EditorStyles.miniButtonMid, GUILayout.Width(width + 5)))
            {
                ClickMenuMain("Generate");
            }
            if (TC_Generate.instance.autoGenerate)
            {
                GUI.backgroundColor = Color.green;
            }
            else if (TC.autoGenerateCallTimeStart + 0.05f > Time.realtimeSinceStartup)
            {
                GUI.backgroundColor = Color.red;
            }
            if (GUILayout.Button("Auto", EditorStyles.miniButtonMid, GUILayout.Width(width)))
            {
                ClickMenuMain("Auto Generate");
            }
            GUI.backgroundColor = Color.white;

            if (GUILayout.Button("Refresh", EditorStyles.miniButtonMid, GUILayout.Width(width)))
            {
                ClickMenuMain("Refresh");
            }

            EditorGUILayout.EndHorizontal();
        }
Exemple #14
0
        // Compute height, trees and objects
        public ComputeBuffer ComputeSingle(float seedParent, bool first = false)
        {
            TC_Compute compute = TC_Compute.instance;

            ComputeBuffer totalBuffer     = null;
            ComputeBuffer layerBuffer     = null;
            ComputeBuffer layerMaskBuffer = null;

            RenderTexture[] rtsPreview     = null;
            RenderTexture   rtRightPreview = null;
            RenderTexture   rtLeftPreview  = null;

            if (outputId != TC.heightOutput)
            {
                rtsPreview = new RenderTexture[2];
            }

            SetPreviewTextureBefore();

            int even = 0;

            float seedTotal = seed + seedParent;

            for (int i = 0; i < itemList.Count; i++)
            {
                TC_Layer layer = itemList[i] as TC_Layer;

                if (layer != null)
                {
                    if (!layer.active)
                    {
                        TC_Reporter.Log("Inactive layer " + i); continue;
                    }

                    if (totalBuffer == null)
                    {
                        if (outputId == TC.heightOutput)
                        {
                            layer.ComputeHeight(ref totalBuffer, ref layerMaskBuffer, seedTotal, i == firstActive);
                        }
                        else
                        {
                            layer.ComputeItem(ref totalBuffer, ref layerMaskBuffer, seedTotal, i == firstActive);
                            if (totalBuffer != null)
                            {
                                rtLeftPreview = layer.rtDisplay;
                            }
                        }

                        TC_Area2D.current.layerGroupBuffer = totalBuffer; // Portal

                        compute.DisposeBuffer(ref layerMaskBuffer);
                    }
                    else
                    {
                        if (outputId == TC.heightOutput)
                        {
                            layer.ComputeHeight(ref layerBuffer, ref layerMaskBuffer, seedTotal);
                        }
                        else
                        {
                            layer.ComputeItem(ref layerBuffer, ref layerMaskBuffer, seedTotal);
                        }

                        if (layerBuffer != null)
                        {
                            if (outputId == TC.heightOutput)
                            {
                                compute.RunComputeMethod(this, layer, totalBuffer, ref layerBuffer, totalActive, i == lastActive ? rtPreview : null, layerMaskBuffer);
                            }
                            else
                            {
                                rtRightPreview = layer.rtDisplay;
                                compute.RunComputeObjectMethod(this, layer, totalBuffer, ref layerBuffer, layerMaskBuffer, rtPreview, ref rtsPreview[even++ % 2], ref rtLeftPreview, rtRightPreview);
                            }
                            TC_Area2D.current.layerGroupBuffer = totalBuffer;
                        }
                        compute.DisposeBuffer(ref layerMaskBuffer);
                    }
                }
                else
                {
                    TC_LayerGroup layerGroup = itemList[i] as TC_LayerGroup;
                    if (layerGroup == null)
                    {
                        continue;
                    }
                    if (!layerGroup.active)
                    {
                        continue;
                    }

                    if (totalBuffer == null)
                    {
                        layerMaskBuffer = layerGroup.ComputeSingle(ref totalBuffer, seedTotal, i == firstActive);
                        if (totalBuffer != null)
                        {
                            rtLeftPreview = layerGroup.rtDisplay;
                        }

                        TC_Area2D.current.layerGroupBuffer = totalBuffer;

                        compute.DisposeBuffer(ref layerMaskBuffer);
                    }
                    else
                    {
                        layerMaskBuffer = layerGroup.ComputeSingle(ref layerBuffer, seedTotal);

                        if (layerBuffer != null)
                        {
                            if (outputId == TC.heightOutput)
                            {
                                compute.RunComputeMethod(this, layerGroup, totalBuffer, ref layerBuffer, totalActive, i == lastActive ? rtPreview : null, layerMaskBuffer);
                            }
                            else
                            {
                                rtRightPreview = layerGroup.rtDisplay;
                                compute.RunComputeObjectMethod(this, layerGroup, totalBuffer, ref layerBuffer, layerMaskBuffer, rtPreview, ref rtsPreview[even++ % 2], ref rtLeftPreview, rtRightPreview);
                            }
                            TC_Area2D.current.layerGroupBuffer = totalBuffer;
                        }
                        compute.DisposeBuffer(ref layerMaskBuffer);
                    }
                }
            }

            SetPreviewTextureAfter();

            if (outputId != TC.heightOutput)
            {
                TC_Compute.DisposeRenderTextures(ref rtsPreview);
            }
            compute.DisposeBuffer(ref layerMaskBuffer);

            if (totalBuffer == null)
            {
                TC_Reporter.Log("Layer buffer null");
            }
            return(totalBuffer);
        }
Exemple #15
0
 public void LinkClone(TC_LayerGroup layerGroupS)
 {
     preview = layerGroupS.preview;
     maskNodeGroup.LinkClone(layerGroupS.maskNodeGroup);
     groupResult.LinkClone(layerGroupS.groupResult);
 }
Exemple #16
0
        void DrawMenu()
        {
            TC_Settings settings = TC_Settings.instance;
            float       width    = 55;

            EditorGUILayout.BeginHorizontal();
            if (!TC_Settings.instance.hideMenuBar)
            {
                GUILayout.Space(2);
                if (GUILayout.Button("File", EditorStyles.miniButtonMid, GUILayout.Width(width)))
                {
                    GenericMenu menu = new GenericMenu();
                    DrawFile(menu, false);
                    menu.DropDown(new Rect(1, 17, 1, 1));
                }
                if (GUILayout.Button("Options", EditorStyles.miniButtonMid, GUILayout.Width(width)))
                {
                    GenericMenu menu = new GenericMenu();
                    DrawOptions(menu, false);
                    menu.DropDown(new Rect(1 + width, 17, 1, 1));
                }
                if (GUILayout.Button("Help", EditorStyles.miniButtonMid, GUILayout.Width(width)))
                {
                    GenericMenu menu = new GenericMenu();
                    DrawHelp(menu, false);
                    menu.DropDown(new Rect(1 + width * 2, 17, 1, 1));
                }

                GUILayout.Space(Screen.width - 540 - (width + 5));
            }
            else
            {
                GUILayout.Space(Screen.width - 536 - (width + 5));
            }

            GUI.changed = false;
            float labelWidthOld = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 45;
            settings.seed = EditorGUILayout.FloatField("Seed", settings.seed, GUILayout.Width(100));
            if (GUI.changed)
            {
                EditorUtility.SetDirty(settings);
                TC.AutoGenerate();
            }
            EditorGUIUtility.labelWidth = labelWidthOld;

            for (int i = 0; i < 6; i++)
            {
                TC_LayerGroup layerGroup = terrainLayer.layerGroups[i];
                if (layerGroup == null)
                {
                    break;
                }
                if (layerGroup.visible)
                {
                    if (layerGroup.active)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    else
                    {
                        GUI.backgroundColor = Color.red;
                    }
                }
                if (GUILayout.Button(TC.outputNames[i][0].ToString(), EditorStyles.miniButtonMid, GUILayout.Width(25)))
                {
                    if (eventCurrent.control)
                    {
                        settings.scrollOffset = -layerGroup.nodePos;
                    }
                    else
                    {
                        TD.ClickOutputButton(layerGroup);
                    }
                }
                GUI.backgroundColor = Color.white;
            }
            GUILayout.Space(5);

            if (GUILayout.Button("Generate", EditorStyles.miniButtonMid, GUILayout.Width(width + 5)))
            {
                ClickMenuMain("Generate");
            }
            if (TC_Generate.instance.autoGenerate)
            {
                GUI.backgroundColor = Color.green;
            }
            else if (TC.autoGenerateCallTimeStart + 0.05f > Time.realtimeSinceStartup)
            {
                GUI.backgroundColor = Color.red;
            }
            if (GUILayout.Button("Auto", EditorStyles.miniButtonMid, GUILayout.Width(width)))
            {
                ClickMenuMain("Auto Generate");
            }
            GUI.backgroundColor = Color.white;

            if (GUILayout.Button("Refresh", EditorStyles.miniButtonMid, GUILayout.Width(width)))
            {
                ClickMenuMain("Refresh");
            }

            EditorGUILayout.EndHorizontal();
        }
Exemple #17
0
        public override void GetItems(bool refresh, bool rebuildGlobalLists, bool resetTextures)
        {
            if (resetTextures)
            {
                DisposeTextures();
            }

            active = visible;

            itemList.Clear();

            firstActive = lastActive = -1;
            totalActive = 0;

            bool newBounds = true;
            int  listIndex = 0;

            // Debug.Log(name + " GetItems");

            for (int i = t.childCount - 1; i >= 0; i--)
            {
                Transform child = transform.GetChild(i);
                TC_Layer  layer = child.GetComponent <TC_Layer>();

                if (layer != null)
                {
                    layer.SetParameters(this, listIndex);

                    layer.GetItems(refresh, rebuildGlobalLists, resetTextures);
                    if (layer.active)
                    {
                        ++totalActive;
                        lastActive = listIndex;
                        if (firstActive == -1)
                        {
                            firstActive = lastActive;
                        }
                    }
                    itemList.Add(layer);
                    ++listIndex;

                    if (newBounds)
                    {
                        bounds = layer.bounds; newBounds = false;
                    }
                    else
                    {
                        bounds.Encapsulate(layer.bounds);
                    }
                }
                else
                {
                    TC_LayerGroup layerGroup = child.GetComponent <TC_LayerGroup>();

                    if (layerGroup == null)
                    {
                        TC.MoveToDustbin(child);
                    }
                    else
                    {
                        layerGroup.SetParameters(this, listIndex);
                        layerGroup.GetItems(refresh, rebuildGlobalLists, resetTextures);

                        if (layerGroup.active)
                        {
                            ++totalActive;
                            lastActive = listIndex;
                            if (firstActive == -1)
                            {
                                firstActive = lastActive;
                            }
                        }

                        if (layerGroup.groupResult == null)
                        {
                            TC.MoveToDustbin(child);
                        }
                        else
                        {
                            itemList.Add(layerGroup);
                            listIndex++;
                        }
                        if (newBounds)
                        {
                            bounds = layerGroup.bounds; newBounds = false;
                        }
                        else
                        {
                            bounds.Encapsulate(layerGroup.bounds);
                        }
                    }
                }
            }

            TC_Reporter.Log(TC.outputNames[outputId] + " Level " + level + " activeTotal " + totalActive);

            if (!active)
            {
                totalActive = 0;
            }
            else if (totalActive == 0)
            {
                active = false;
            }
        }