summaryrefslogtreecommitdiff
path: root/GameCode/LegRaycasters.cs
blob: db676b0f6161d4844aa6e194f1d03bcd3f8989e1 (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 UnityEngine;

public class LegRaycasters : MonoBehaviour
{
	public LayerMask mask;

	public float force;

	public float drag;

	public Transform[] legCastPositions;

	public AnimationCurve animationCurve;

	private PlayerVelocity rig;

	private CharacterData data;

	public AnimationCurve wobbleCurve;

	public AnimationCurve forceCurve;

	private IkLeg[] legs;

	private float totalStepTime;

	private void Awake()
	{
		legs = base.transform.root.GetComponentsInChildren<IkLeg>();
	}

	private void Start()
	{
		rig = GetComponentInParent<PlayerVelocity>();
		data = GetComponentInParent<CharacterData>();
	}

	private void FixedUpdate()
	{
		totalStepTime = 0f;
		for (int i = 0; i < legs.Length; i++)
		{
			if (!legs[i].footDown)
			{
				totalStepTime += legs[i].stepTime;
			}
		}
		for (int j = 0; j < legCastPositions.Length; j++)
		{
			RaycastHit2D[] array = Physics2D.RaycastAll(legCastPositions[j].transform.position + Vector3.up * 0.5f, Vector2.down, 1f * base.transform.root.localScale.x, mask);
			for (int k = 0; k < array.Length; k++)
			{
				if ((bool)array[k].transform && array[k].transform.root != base.transform.root)
				{
					HitGround(legCastPositions[j], array[k]);
					break;
				}
			}
		}
	}

	private void HitGround(Transform leg, RaycastHit2D hit)
	{
		if (!(data.sinceJump < 0.2f) && !(Vector3.Angle(Vector3.up, hit.normal) > 70f))
		{
			data.TouchGround(hit.point, hit.normal, hit.rigidbody);
			Vector3 vector = ((Vector3)hit.point - leg.transform.position) / base.transform.root.localScale.x;
			if (data.input.direction.x != 0f)
			{
				vector.y += wobbleCurve.Evaluate(totalStepTime) * base.transform.root.localScale.x;
				rig.AddForce(Vector3.up * forceCurve.Evaluate(totalStepTime) * rig.mass);
			}
			rig.AddForce(animationCurve.Evaluate(Mathf.Abs(vector.y)) * Vector3.up * rig.mass * force);
			rig.AddForce(animationCurve.Evaluate(Mathf.Abs(vector.y)) * (0f - rig.velocity.y) * Vector2.up * rig.mass * drag);
		}
	}
}