Global Game Jam 2023
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

69 lines
2.1 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class vine : MonoBehaviour
{
private LineRenderer lineRenderer;
[SerializeField]
private GameObject position1;
[SerializeField]
private GameObject position2;
private Vector3 lastPosition1;
private Vector3 lastPosition2;
private float lastDipMagnitude;
private int lastNumberPoints;
[SerializeField]
private AnimationCurve vineCurve;
[SerializeField]
private float dipMagnitude = 1f;
[SerializeField]
private int numberOfPoints = 20;
// Start is called before the first frame update
void Awake()
{
lineRenderer = GetComponent<LineRenderer>();
}
void Update()
{
//if both positions are defined
if (position1 != null && position2 != null)
{
//if either of the points have moved
if ((position1.transform.position != lastPosition1) || (position2.transform.position != lastPosition2) || (dipMagnitude != lastDipMagnitude) || (numberOfPoints != lastNumberPoints))
{
Recalculate();
}
}
}
[ContextMenu("Recalculate")]
void Recalculate()
{
lineRenderer.positionCount = numberOfPoints;
//set start and end
lineRenderer.SetPosition(0, position1.transform.position);
lineRenderer.SetPosition(lineRenderer.positionCount-1, position2.transform.position);
for (int i = 0; i<lineRenderer.positionCount; i++)
{
Vector3 newLerpPos = Vector3.Lerp(position1.transform.position, position2.transform.position, i / (float)(lineRenderer.positionCount - 1));
Vector3 newDip = Vector3.up * dipMagnitude * (1f - vineCurve.Evaluate(i / (float)(lineRenderer.positionCount - 1)));
lineRenderer.SetPosition(i, newLerpPos - newDip);
}
lastPosition1 = position1.transform.position;
lastPosition2 = position2.transform.position;
lastDipMagnitude = dipMagnitude;
lastNumberPoints = numberOfPoints;
}
}