コード例 #1
0
 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();
 }
コード例 #2
0
 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);
 }
コード例 #3
0
    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);
    }
コード例 #4
0
    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;
    }
コード例 #5
0
 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();
     }
 }