private void TryConnect(ConnectItem otherItem) { if (!Input.GetMouseButtonDown(0)) { return; } ConnectItem element1 = firstItem; ConnectItem element2 = otherItem; bool canConnect = false; ConnectNode.PointGroup groupInfo = null; var node = SuarchOneNode(element1.Name, element2.Name, out groupInfo); if (node != null) { canConnect = ConnectUtil.TryConnect(element1, element2, groupInfo); node.TryComplete(); } ClearStarteds(); if (!canConnect && onError != null) { onError.Invoke(string.Format("{0}和{1}两点不需要连接", element1, element2)); } }
private void InitConnectViewer() { lineHolder = new GameObject("lineHolder"); lineHolder.hideFlags = HideFlags.HideInHierarchy; this.line = lineHolder.AddComponent <LineRenderer>(); line.positionCount = 1; ConnectUtil.UpdateLineStyle(line, lineWight, lineMaterial); }
private void DisconnetConnected() { if (collectNodeFeature.finalGroup != null) { for (int i = 0; i < connectGroup.Length; i++) { var groupi = connectGroup[i]; var idA = Array.IndexOf(elements, groupi.p1); var idB = Array.IndexOf(elements, groupi.p2); var itemA = collectNodeFeature.finalGroup[idA] as ConnectItem; var itemB = collectNodeFeature.finalGroup[idB] as ConnectItem; ConnectUtil.TryDisconnect(itemA, itemB); } } }
private void NoticeTargetPos(string connectItemName) { var elements = ElementController.Instence.GetElements <ConnectItem>(connectItemName, true); Debug.Assert(elements != null); foreach (var item in elements) { if (!ConnectUtil.HaveConnected(item, firstItem)) { firstItem.Notice(item.transform); if (!noticed.Contains(item.transform)) { noticed.Add(item.transform); } } } }
private void QuickConnectItems() { ConnectItem[] list = null; if (collectNodeFeature.finalGroup != null) { list = Array.ConvertAll(collectNodeFeature.finalGroup, x => x as ConnectItem); } else { list = new ConnectItem[elements.Length]; } //找到所有的组合,并判断是否已经连接 for (int i = 0; i < connectGroup.Length; i++) { var groupi = connectGroup[i]; var idA = Array.IndexOf(elements, groupi.p1); var idB = Array.IndexOf(elements, groupi.p2); var itemA = list[idA] as ConnectItem; var itemB = list[idB] as ConnectItem; if (ConnectUtil.HaveConnected(itemA, itemB)) { continue; } var itemAName = groupi.p1; var itemBName = groupi.p2; itemA = itemA != null ? itemA : collectNodeFeature.elementPool.Find(x => x.Name == itemAName && x is ConnectItem && x.OperateAble) as ConnectItem; itemB = itemB != null ? itemB : collectNodeFeature.elementPool.Find(x => x.Name == itemBName && x is ConnectItem && x.OperateAble) as ConnectItem; Debug.Assert(itemA != null && itemB != null); var connected = ConnectUtil.TryConnect(itemA, itemB, groupi); Debug.Assert(connected); list[idA] = itemA; list[idB] = itemB; } OnConnectOK(list); }
private IEnumerator AutoConnectItems() { ConnectItem[] list = new ConnectItem[elements.Length]; Debug.Log("自动连接未完成部分"); for (int i = 0; i < connectGroup.Length; i++) { var groupi = connectGroup[i]; var idA = Array.IndexOf(elements, groupi.p1); var idB = Array.IndexOf(elements, groupi.p2); var itemA = list[idA] as ConnectItem; var itemB = list[idB] as ConnectItem; if (ConnectUtil.HaveConnected(itemA, itemB)) { continue; } var itemAName = groupi.p1; var itemBName = groupi.p2; itemA = itemA != null ? itemA : collectNodeFeature.elementPool.Find(x => x.Name == itemAName && x is ConnectItem && x.OperateAble) as ConnectItem; itemB = itemB != null ? itemB : collectNodeFeature.elementPool.Find(x => x.Name == itemBName && x is ConnectItem && x.OperateAble) as ConnectItem; Debug.Assert(itemA != null && itemB != null); var parent = itemA.GetInstanceID() > itemB.GetInstanceID() ? itemA : itemB; var lineRender = ConnectUtil.TryConnect(itemA, itemB, groupi); for (float timer = 0; timer < autoTime; timer += Time.deltaTime) { var pos = Vector3.Lerp(itemA.transform.position, itemB.transform.position, timer / autoTime); lineRender.SetPositions(new Vector3[] { itemA.transform.position, pos }); yield return(null); } list[idA] = itemA; list[idB] = itemB; } OnConnectOK(list); OnEndExecute(false); }
private void WorpLineInfo(string itemA) { currentMat = null; currentLineWidth = 0; foreach (ConnectNode node in lockList) { var id = Array.FindIndex(node.elements, x => x == itemA); if (id >= 0) { if (node.lineMaterial) { currentMat = node.lineMaterial; } if (node.lineWight > 0) { currentLineWidth = node.lineWight; } } } ConnectUtil.UpdateLineStyle(line, lineWight, lineMaterial); }
public void TryComplete() { var list = new ConnectItem[elements.Length]; //找到所有的组合,并判断是否已经连接 for (int i = 0; i < connectGroup.Length; i++) { var groupi = connectGroup[i]; var itemAName = groupi.p1; var itemBName = groupi.p2; var itemAID = Array.IndexOf(elements, itemAName); var itemBID = Array.IndexOf(elements, itemBName); ConnectItem itemA = collectNodeFeature.elementPool.Find(x => x.Name == itemAName && x is ConnectItem) as ConnectItem; ConnectItem itemB = collectNodeFeature.elementPool.Find(x => x.Name == itemBName && x is ConnectItem) as ConnectItem; if (itemA != null && itemB != null) { if (!ConnectUtil.HaveConnected(itemA, itemB)) { return; } else { list[itemAID] = itemA; list[itemBID] = itemB; } } else { return; } } OnConnectOK(list); OnEndExecute(false); }