diff options
Diffstat (limited to 'GameCode/LegRenderer.cs')
-rw-r--r-- | GameCode/LegRenderer.cs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/GameCode/LegRenderer.cs b/GameCode/LegRenderer.cs new file mode 100644 index 0000000..094b0c9 --- /dev/null +++ b/GameCode/LegRenderer.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using UnityEngine; + +public class LegRenderer : MonoBehaviour +{ + public Transform start; + + public Transform mid; + + public Transform end; + + public int segmentCount = 10; + + public GameObject segment; + + public float segmentLength = 1f; + + private List<Transform> segments = new List<Transform>(); + + private void Awake() + { + for (int i = 0; i < segmentCount; i++) + { + GameObject gameObject = Object.Instantiate(segment, base.transform); + gameObject.SetActive(value: true); + segments.Add(gameObject.transform); + if (i == segmentCount - 1) + { + gameObject.transform.localScale *= 0f; + } + } + } + + private void LateUpdate() + { + for (int i = 0; i < segments.Count; i++) + { + float t = (float)i / ((float)segments.Count - 1f); + _ = Vector3.zero; + if (i == 0) + { + _ = segments[i + 1].position - segments[i].position; + } + else if (i == segments.Count - 1) + { + _ = segments[i].position - segments[i - 1].position; + } + else + { + Vector3 vector = segments[i].position - segments[i - 1].position; + Vector3 vector2 = segments[i + 1].position - segments[i].position; + _ = (vector + vector2) * 0.5f; + } + segments[i].position = BezierCurve.QuadraticBezier(start.position, mid.position, end.position, t); + } + for (int j = 0; j < segments.Count; j++) + { + _ = (float)j / ((float)segments.Count - 1f); + Vector3 zero = Vector3.zero; + if (j == 0) + { + zero = segments[j + 1].position - segments[j].position; + } + else if (j == segments.Count - 1) + { + zero = segments[j].position - segments[j - 1].position; + } + else + { + Vector3 vector3 = segments[j].position - segments[j - 1].position; + Vector3 vector4 = segments[j + 1].position - segments[j].position; + zero = (vector3 + vector4) * 0.5f; + } + segments[j].rotation = Quaternion.LookRotation(Vector3.forward, zero); + } + } +} |