summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/SimpleWalk.cs
blob: b6c7e54f0977085169c1dd5d0421bcf6df69b8ad (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
using Pathfinding.RVO;
using UnityEngine;
using UnityEngine.Events;

public class SimpleWalk : MonoBehaviour
{
	public RVOController rvo;

	public Transform animationRoot;

	public float bounceHeight = 0.5f;

	public AnimationCurve bounceCurve;

	public float bounceSpeed = 1f;

	private float bounceClock;

	private float clockDelta;

	private float velocitySqrtDeadzone = 0.15f;

	[HideInInspector]
	public UnityEvent onGroundContact = new UnityEvent();

	private float lastGroundContactTimeStamp;

	private Vector3 initialRootPos;

	private void Start()
	{
		initialRootPos = animationRoot.localPosition;
		bounceClock = Random.value;
	}

	private void Update()
	{
		if (rvo.velocity.sqrMagnitude > velocitySqrtDeadzone)
		{
			clockDelta = Time.deltaTime * bounceSpeed;
			bounceClock += clockDelta;
			animationRoot.transform.localPosition = Vector3.Lerp(initialRootPos, initialRootPos + Vector3.up * bounceHeight, bounceCurve.Evaluate(bounceClock));
			if (bounceClock % 1f <= clockDelta && Mathf.Abs(bounceClock - lastGroundContactTimeStamp) > 0.5f)
			{
				lastGroundContactTimeStamp = bounceClock;
				onGroundContact.Invoke();
			}
		}
		else
		{
			animationRoot.transform.localPosition = initialRootPos;
			bounceClock = 0f;
		}
	}
}