summaryrefslogtreecommitdiff
path: root/GameCode/LegRenderer.cs
blob: 094b0c960675a357b01c6e050f7a9c61c1199e90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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);
		}
	}
}