public void OnChildTriggerEnter(ConnectableNode other, Transform child) { if (child.name == "LowerTrigger" && other.tag != "Event") { if (connectedNodes.FirstOrDefault() != other) { if (!other.before) { isAfter = true; ShowPreview(other.transform); previewOwner = this; isBetween = MoveConnected(connectedNodes, 1); } } } else if (child.name == "UpperTrigger") { if (!other.connectedNodes.Any()) { isAfter = isBetween = false; ShowPreview(other.transform); previewOwner = this; } } }
public void OnMouseUp() { dragTarget = dragInvolved = false; if (preview) { if (isAfter) { transform.position = preview.transform.position; transform.rotation = preview.transform.rotation; before = previewOwner; if (before.connectedNodes.FirstOrDefault() != this) { List <ConnectableNode> newConnections = new List <ConnectableNode> { this }; newConnections.AddRange(connectedNodes); if (isBetween) { before.connectedNodes[0].before = this; foreach (ConnectableNode a in connectedNodes) { a.connectedNodes.AddRange(before.connectedNodes); } connectedNodes.AddRange(before.connectedNodes); before.UpdateConnections(newConnections, before.connectedNodes[0]); } else { before.UpdateConnections(newConnections); } } } else { ConnectableNode first = connectedNodes.Any() ? connectedNodes.LastOrDefault() : this; List <ConnectableNode> newConnections = new List <ConnectableNode> { previewOwner }; newConnections.AddRange(previewOwner.connectedNodes); first.UpdateConnections(newConnections); previewOwner.before = this; previewOwner.transform.Find("UpperTrigger").GetComponent <Collider>().enabled = false; } RemovePreview(); } transform.Find("LowerTrigger").GetComponent <Collider>().enabled = true; Collider upperTrigger = transform.Find("UpperTrigger").GetComponent <Collider>(); if (upperTrigger && !before) { upperTrigger.GetComponent <Collider>().enabled = true; } foreach (ConnectableNode a in connectedNodes) { a.transform.Find("LowerTrigger").GetComponent <Collider>().enabled = true; a.dragInvolved = false; } }
public void UpdateConnections(List <ConnectableNode> newConnections, ConnectableNode after) { int from = connectedNodes.IndexOf(after); connectedNodes.InsertRange(from, newConnections); if (before) { before.UpdateConnections(newConnections, after); } }
public void UpdateConnections(ConnectableNode disconnected) { int from = connectedNodes.IndexOf(disconnected); connectedNodes.RemoveRange(from, connectedNodes.Count - from); if (before) { before.UpdateConnections(disconnected); } }
public void OnChildTriggerStay(ConnectableNode other, Transform child) { if (!preview && other.GetComponent <ConnectableNode>().dragTarget&& other.tag != "Event") { isAfter = child.name == "LowerTrigger"; ShowPreview(other.transform); previewOwner = this; isBetween = MoveConnected(connectedNodes, 1); } }
protected void RemovePreview() { if (preview) { MoveConnected(connectedNodes); Destroy(preview); preview = null; previewOwner = null; } }
public void OnChildTriggerExit(ConnectableNode other, Transform child) { if (other.dragInvolved && this == previewOwner) { RemovePreview(); if (connectedNodes.FirstOrDefault() == other) { other.before = null; UpdateConnections(other); } } }