private DynamicTalentLinkUI CreateLinkBetweenNodes(DynamicTalentUI parent, DynamicTalentUI destination, TalentLink link) { var parentPos = parent.transform.position; var destinationPos = destination.transform.position; var linkClone = Instantiate(dynamicLinkUIPrefab, Vector3.zero, Quaternion.identity); var linkTransf = (RectTransform)linkClone.transform; linkTransf.SetParent(linksContainer); linkTransf.localPosition = Vector3.zero; createdLinkUIs.Add(linkClone); var linkPartsParent = linkTransf.GetChild(0); linkPartsParent.localPosition = Vector3.zero; var parts = CreateLinkParts(parent, destination, linkPartsParent); linkClone.Init(destination, link, parts); return(linkClone); }
public void Init(DynamicTalentUI destination, TalentLink talentLink, List <DynamicTalentLinkPartUI> parts) { this.destination = destination; this.parts = parts; weightRequiredInBase = talentLink.WeightRequiredInBase; InitLinkUIParts(); }
private List <DynamicTalentLinkUI> CreateSubtree(int index, Talent parentTalent, Talent nodeToCreate, DynamicTalentUI parentUi, TalentLink linkToParent, int depth = 1) { var linkList = new List <DynamicTalentLinkUI>(); if (nodeToCreate == null) { return(linkList); } var thisNodesLinks = new List <DynamicTalentLinkUI>(); var parentPos = parentUi.transform.position; var signedInd = parentTalent.Links.Count / 2 - index; var thisNodeUi = CreateNodeUI(nodeToCreate, new Vector3( parentPos.x + signedInd * xDistanceFromNode , treeRootPosition.y - yDistanceFromNode * depth, 0f)); createdTalentUIs.Add(thisNodeUi); var linkToParentUi = CreateLinkBetweenNodes(parentUi, thisNodeUi, linkToParent); linkList.Add(linkToParentUi); for (var i = 0; i < nodeToCreate.Links.Count; i++) { var link = nodeToCreate.Links[i]; thisNodesLinks.AddRange(CreateSubtree(i, nodeToCreate, link.Destination, thisNodeUi, link, depth + 1)); } thisNodeUi.Init(nodeToCreate, thisNodesLinks); return(linkList); }