public void Resize(Vector3 direction, float tension) { while (segmentList.Count > numberOfSegments) { JBirdRopeNode node = segmentList[segmentList.Count - 1]; segmentList.RemoveAt(segmentList.Count - 1); if (Application.isPlaying) { Destroy(node.gameObject); } else { DestroyImmediate(node.gameObject); } } segmentList[segmentList.Count - 1].next = null; for (int i = segmentList.Count - 1; i < numberOfSegments - 1; i++) { MakeNewSegment(segmentList[i].transform.position + direction * tension * segmentLength); } for (int i = 0; i < segmentList.Count; i++) { segmentList[i].isAnchor = false; } UpdateAnchors(); UpdateTapering(); }
public override void OnInspectorGUI() { targetNode = (JBirdRopeNode)target; EditorGUILayout.Space(); EditorGUILayout.LabelField("The rope that this segment is part of:", EditorStyles.boldLabel); EditorGUILayout.ObjectField("Parent Rope", targetNode.rope, typeof(JBirdRope), true); EditorGUILayout.Space(); base.OnInspectorGUI(); EditorGUILayout.Space(); EditorGUILayout.LabelField("Check to lock anchors during translation:", EditorStyles.boldLabel); AnchorLock.lockAnchors = EditorGUILayout.Toggle("Lock Anchors?", AnchorLock.lockAnchors); }
JBirdRopeNode MakeNewSegment(Vector3 position) { JBirdRopeNode newNode = Instantiate(segmentPrefab, position, Quaternion.identity) as JBirdRopeNode; segmentList.Add(newNode); newNode.transform.parent = transform; newNode.rope = this; newNode.index = segmentList.Count - 1; newNode.rend = newNode.GetComponent <Renderer>(); if (segmentList.Count > 1) { segmentList[segmentList.Count - 2].next = segmentList[segmentList.Count - 1]; segmentList[segmentList.Count - 1].prev = segmentList[segmentList.Count - 2]; } return(newNode); }
void BringTowardsThis(JBirdRopeNode other) { float dist = Vector3.Distance(transform.position, other.transform.position); float newDist = dist; if (dist < _rope.segmentLength * _rope.minTension * (scale + other.scale) / 2f) { newDist = _rope.segmentLength * _rope.minTension * (scale + other.scale) / 2f; } else if (dist > _rope.segmentLength * _rope.maxTension * (scale + other.scale) / 2f) { newDist = _rope.segmentLength * _rope.maxTension * (scale + other.scale) / 2f; } if (newDist == dist) { return; } other.transform.position = transform.position + (other.transform.position - transform.position).normalized * newDist; }
void OnSceneGUI() { targetNode = (JBirdRopeNode)target; if (Tools.current != Tool.None) { AnchorLock.prevTool = Tools.current; } if (Tools.current == Tool.Move || Tools.current == Tool.None) { Tools.current = Tool.None; pos = Handles.PositionHandle(targetNode.transform.position, Tools.handleRotation); targetNode.PullRaw(pos, !AnchorLock.lockAnchors); if (targetNode.rope.equalizeTension) { targetNode.rope.EqualizeTension(); } if (targetNode.rope.reorientSegments) { targetNode.rope.ReorientSegments(); } targetNode.rope.segmentList[0].UpdateRopeHead(); } }