public override void GetItems(bool refresh, bool rebuildGlobalLists, bool resetTextures) { bool newBounds = true; active = visible; if (resetTextures) { DisposeTextures(); } maskNodeGroup = GetGroup <TC_NodeGroup>(0, refresh, resetTextures); if (maskNodeGroup == null) { active = false; } else { maskNodeGroup.type = NodeGroupType.Mask; if (maskNodeGroup.active) { if (newBounds) { bounds = maskNodeGroup.bounds; } else { bounds.Encapsulate(maskNodeGroup.bounds); } } } if (t.childCount <= 1) { active = false; } else { Transform child = t.GetChild(1); groupResult = child.GetComponent <TC_LayerGroupResult>(); if (groupResult == null) { TC.MoveToDustbin(child); active = false; } else { groupResult.SetParameters(this, 1); groupResult.GetItems(refresh, rebuildGlobalLists, resetTextures); if (!groupResult.active) { active = false; } } } }
public void AddLayerNodeGroups(TC_Layer layer) { layer.Add <TC_NodeGroup>("Mask Group", false); TC_NodeGroup selectNodeGroup = (TC_NodeGroup)layer.Add <TC_NodeGroup>("Select Group", false); selectNodeGroup.Add <TC_Node>("", false, false, false); layer.Add <TC_SelectItemGroup>("", false); }
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 LinkClone(TC_NodeGroup nodeGroupS) { preview = nodeGroupS.preview; for (int i = 0; i < itemList.Count; i++) { TC_Node node = itemList[i] as TC_Node; if (node != null) { TC_Node sNode = nodeGroupS.itemList[i] as TC_Node; node.preview = sNode.preview; node.Init(); } } }
static public void LeftClickMenu(object obj) { int instanceID; string command = TD.ObjectToCommandAndInstanceID(obj, out instanceID); TC_NodeGroup nodeGroup = EditorUtility.InstanceIDToObject(instanceID) as TC_NodeGroup; if (nodeGroup != null) { if (command == "Clear Nodes") { nodeGroup.Clear(true); } } }
static public void DropDownMenu(Rect rect, TC_NodeGroup nodeGroup) { if (TD.ClickRect(rect) != 1) { return; } GenericMenu menu = new GenericMenu(); // menu.AddItem(new GUIContent("Add Layer"), false, LeftClickMenu, "Add Layer"); string instanceID = nodeGroup.GetInstanceID().ToString(); menu.AddItem(new GUIContent("Clear Nodes"), false, LeftClickMenu, instanceID + ":Clear Nodes"); menu.ShowAsContext(); }
static public int Draw(TC_NodeGroup nodeGroup, ref Vector2 pos, Color colGroupNode, Color colNode, Color colBracket, float activeMulti, bool nodeFoldout, bool drawMethod, bool colorPreviewTex, bool hideSelectNodes) { if (nodeGroup == null) { return(0); } // bool select = false; // Draw total node Rect dropDownRect; float activeMultiOld = activeMulti; activeMulti *= nodeGroup.active ? 1 : 0.75f; bool isCulled = false; TC_GlobalSettings g = TC_Settings.instance.global; // if ((nodeGroup.foldout == 1 && nodeGroup.itemList.Count == 1) || nodeGroup.itemList.Count == 0) nodeGroup.foldout = 0; // Closing Bracket TD.DrawBracket(ref pos, nodeFoldout, true, colBracket * activeMultiOld, ref nodeGroup.foldout, true, nodeGroup.itemList.Count > 0); if (nodeGroup.foldout > 0) { if ((nodeGroup.itemList.Count != 1 || nodeGroup.foldout != 1) && nodeGroup.itemList.Count != 0 && !hideSelectNodes) { pos.x -= TD.texCardBody.width; } if (nodeGroup.itemList.Count > 1 && !hideSelectNodes) { dropDownRect = TD.DrawNode(nodeGroup, pos, colGroupNode, Color.white, ref isCulled, activeMulti, nodeFoldout, drawMethod, false); if (nodeGroup.foldout == 2) { pos.x -= TD.texCardBody.width + g.nodeHSpace; } DropDownMenu(dropDownRect, nodeGroup); } //if (colorPreviewTex) //{ // startOffset.x -= TD.nodeWidth; // TD.DrawNode(nodeGroup, drawMethod, ref startOffset, true, color, click, Color.white, ref isCulled); // startOffset.x -= TD.nodeWidth; //} // Draw () //if (nodeGroup.itemList.Count > 1) //{ // startOffset.x += 10; // Draw ItemList Count // if (!nodeGroup.foldout) // { // TD.DrawRect(new Rect(startOffset.x - 9, (startOffset.y + TD.nodeHeight / 2) - 5, 18, 10), TC_Settings.instance.global.colTextBackGround); // TD.DrawText(new Vector2(startOffset.x + 2, startOffset.y + TD.nodeHeight / 2), nodeGroup.itemList.Count.ToString(), 8, FontStyle.Bold, Color.white, HorTextAlign.Center, VerTextAlign.Center); // } // startOffset.x -= TD.nodeWidthSpace; //} if (nodeGroup.foldout == 2 && !hideSelectNodes) { if (nodeGroup.itemList.Count > 1 && nodeFoldout) { TD.DrawMethod(nodeGroup, pos + new Vector2(TD.texCardBody.width - 18, 172), true, colNode, activeMulti); } for (int i = nodeGroup.itemList.Count - 1; i >= 0; --i) { TC_Node node = nodeGroup.itemList[i] as TC_Node; if (node != null) { TC_NodeGUI.Draw(node, nodeFoldout, i == 0 ? false : true, pos, colNode, activeMulti); if (i != 0) { pos.x -= TD.nodeWidthHSpace; } if (node.inputKind != InputKind.Current && node.inputKind != InputKind.Portal && i != 0 && nodeFoldout) { TD.DrawMethod(node, pos + new Vector2(TD.texCardBody.width - 18, 172), false, colNode, (node.active ? 1 : 0.5f) * activeMulti); } } else { TC_NodeGroup nodeGroupChild = nodeGroup.itemList[i] as TC_NodeGroup; if (nodeGroupChild != null) { pos.x += TD.nodeWidthHSpace; Draw(nodeGroupChild, ref pos, colGroupNode, colNode, colBracket, activeMulti, nodeFoldout, drawMethod, false, false); if (i != 0) { pos.x -= TD.nodeWidthHSpace; TD.DrawMethod(nodeGroupChild, pos + new Vector2(TD.texCardBody.width - 18, 172), false, colNode, (nodeGroupChild.active ? 1 : 0.5f) * activeMulti); } } } } } } if (nodeFoldout) { int mouseClick = TD.DrawNodeCount(nodeGroup, ref pos, nodeGroup.itemList.Count, nodeFoldout, ref nodeGroup.foldout, (nodeGroup.foldout == 1 && nodeGroup.itemList.Count != 1 ? colGroupNode * 0.75f : colBracket) * activeMulti); if (mouseClick == 0 && nodeGroup.itemList.Count == 0) { nodeGroup.Add <TC_Node>("", false, false, true); } } // Opening Bracket TD.DrawBracket(ref pos, nodeFoldout, false, colBracket * activeMultiOld, ref nodeGroup.foldout, true, nodeGroup.itemList.Count > 0); return(0); }
public ComputeBuffer ComputeValue(float seedParent) { TC_Compute compute = TC_Compute.instance; if (compute == null) { Debug.Log("Compute is null"); } ComputeBuffer nodeBuffer = null; ComputeBuffer totalBuffer = null; bool inputCurrent; if (totalActive > 1) { InitPreviewRenderTexture(true, name); } int length = useConstant ? 1 : itemList.Count; float seedTotal = seed + seedParent; for (int i = 0; i < length; i++) { TC_Node node = itemList[i] as TC_Node; if (node != null) { node.Init(); if (!node.active) { continue; } if (node.clamp) { // if (node.OutOfBounds()) continue; } inputCurrent = (node.inputKind == InputKind.Current); node.InitPreviewRenderTexture(true, node.name); if (totalBuffer == null && !inputCurrent) { totalBuffer = compute.RunNodeCompute(this, node, seedTotal); } else { if (!inputCurrent) { // Debug.Log(totalBuffer == null); nodeBuffer = compute.RunNodeCompute(this, node, seedTotal, totalBuffer, false); } else { for (int j = 0; j < node.iterations; j++) { totalBuffer = compute.RunNodeCompute(this, node, seedTotal, totalBuffer, true); } // if (preview && totalBuffer != null) { compute.DisposeBuffer(ref totalBuffer); } } // if (preview && nodeBuffer != null) { compute.DisposeBuffer(ref nodeBuffer); } } if (totalBuffer != null && nodeBuffer != null && !inputCurrent) { compute.RunComputeMethod(this, node, totalBuffer, ref nodeBuffer, itemList.Count, i == lastActive ? rtPreview : null); } } else { TC_NodeGroup nodeGroup = itemList[i] as TC_NodeGroup; if (nodeGroup != null) { if (!nodeGroup.active) { continue; } if (totalBuffer == null) { totalBuffer = nodeGroup.ComputeValue(seedTotal); } else { nodeBuffer = nodeGroup.ComputeValue(seedTotal); } if (totalBuffer != null && nodeBuffer != null) { compute.RunComputeMethod(this, nodeGroup, totalBuffer, ref nodeBuffer, itemList.Count, i == lastActive ? rtPreview : null); } } } } if (totalActive == 1) { TC_Compute.DisposeRenderTexture(ref rtPreview); rtDisplay = itemList[firstActive].rtDisplay; } if (isPortalCount > 0 && totalBuffer != null) { TC_Compute.instance.MakePortalBuffer(this, totalBuffer); } return(totalBuffer); }
public override void GetItems(bool refresh, bool rebuildGlobalLists, bool resetTextures) { if (resetTextures) { DisposeTextures(); } int childCount = transform.childCount; // Init(); itemList.Clear(); active = visible; firstActive = lastActive = -1; totalActive = 0; bool newBounds = true; int listIndex = 0; for (int i = childCount - 1; i >= 0; i--) { Transform child = t.GetChild(i); TC_Node node = child.GetComponent <TC_Node>(); if (node != null) { if (resetTextures) { node.DisposeTextures(); } node.active = true; node.Init(); if (node.inputKind == InputKind.Current && totalActive == 0) { TC.AddMessage("'Current' can only be used if there is active node/s before it."); node.active = false; } if (!node.visible) { node.active = false; // Debug.Log(node.name); } node.SetParameters(this, listIndex); node.nodeGroupLevel = nodeGroupLevel + 1; node.nodeType = type; node.UpdateVersion(); if (node.active) { if (node.clamp) { node.CalcBounds(); } if (newBounds) { bounds = node.bounds; newBounds = false; } else { bounds.Encapsulate(node.bounds); } lastActive = listIndex; if (firstActive == -1) { firstActive = lastActive; } ++totalActive; } if (i == childCount - 1) // TODO: Consider hide and do in calculation { if (node.method != Method.Add && node.method != Method.Subtract) { node.method = Method.Add; } } itemList.Add(node); ++listIndex; } else { TC_NodeGroup nodeGroup = child.GetComponent <TC_NodeGroup>(); if (nodeGroup != null) { nodeGroup.SetParameters(this, listIndex); nodeGroup.nodeGroupLevel = nodeGroupLevel + 1; itemList.Add(nodeGroup); ++listIndex; nodeGroup.GetItems(refresh, rebuildGlobalLists, resetTextures); if (nodeGroup.active) { lastActive = listIndex; if (firstActive == -1) { firstActive = lastActive; } ++totalActive; } } //else //{ // TC_NodeClone nodeClone = child.GetComponent<TC_NodeClone>(); //} } } if (itemList.Count == 1) { if (itemList[0].active) { active = visible = true; } } if (!active) { totalActive = 0; } if (totalActive == 0) { active = false; } }
public override void GetItems(bool refresh, bool rebuildGlobalLists, bool resetTextures) { if (resetTextures) { DisposeTextures(); } active = visible; // Init(); // InitPreview(ref rtPreview); bool newBounds = true; maskNodeGroup = GetGroup <TC_NodeGroup>(0, refresh, resetTextures); if (maskNodeGroup != null) { maskNodeGroup.type = NodeGroupType.Mask; if (maskNodeGroup.totalActive > 0) { bounds = maskNodeGroup.bounds; newBounds = false; } } selectNodeGroup = GetGroup <TC_NodeGroup>(1, refresh, resetTextures); if (selectNodeGroup != null) { selectNodeGroup.type = NodeGroupType.Select; if (selectNodeGroup.totalActive == 0) { TC_Reporter.Log("SelectNodeGroup 0 active"); active = false; } else { if (newBounds) { bounds = selectNodeGroup.bounds; } else { bounds.Encapsulate(selectNodeGroup.bounds); } } } else { active = false; } if (outputId != TC.heightOutput) { selectItemGroup = GetGroup <TC_SelectItemGroup>(2, refresh, resetTextures); if (selectItemGroup != null) { if (selectItemGroup.totalActive == 0) { TC_Reporter.Log("itemGroup 0 active"); active = false; } else if (selectItemGroup.itemList.Count <= 1) { // TODO: Make better solution for this selectNodeGroup.useConstant = true; if (selectNodeGroup.itemList.Count > 0) { selectNodeGroup.itemList[0].visible = true; active = visible; GetGroup <TC_NodeGroup>(1, true, resetTextures); } } else { selectNodeGroup.useConstant = false; } } else { active = false; } } }