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; } } }
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(); } } }
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; } }
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); } } }
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(); } } } }
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(); }
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); }
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); }
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; }
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; }
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(); }
// 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); }
public void LinkClone(TC_LayerGroup layerGroupS) { preview = layerGroupS.preview; maskNodeGroup.LinkClone(layerGroupS.maskNodeGroup); groupResult.LinkClone(layerGroupS.groupResult); }
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(); }
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; } }