summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/PlayerAttackTargetFacer.cs
blob: 6692d4901e183c314c159692e02be10ee79bc702 (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
using UnityEngine;

public class PlayerAttackTargetFacer : MonoBehaviour
{
	public Transform targetTransform;

	public ManualAttack attack;

	public float maxRotationDelta = 360f;

	public float lookBackTime = 0.4f;

	private Vector3 desiredForwardVector;

	private Quaternion desiredRotation = Quaternion.identity;

	private float lookClock;

	private bool shouldReset;

	public void AssignAttack(ManualAttack _attack)
	{
		attack = _attack;
		attack.onAttack.AddListener(UpdateTarget);
		if (attack.cooldownTime <= lookBackTime)
		{
			lookBackTime = attack.cooldownTime + 0.05f;
		}
	}

	private void UpdateTarget()
	{
		if (!(attack.LastTargetPos == Vector3.zero))
		{
			desiredForwardVector = attack.LastTargetPos - targetTransform.position;
			desiredForwardVector.y = 0f;
			desiredForwardVector.Normalize();
			desiredRotation = Quaternion.LookRotation(desiredForwardVector, Vector3.up);
			lookClock = lookBackTime;
		}
	}

	private void Update()
	{
		if (lookClock >= 0f)
		{
			lookClock -= Time.deltaTime;
			if (!targetTransform.rotation.Equals(desiredRotation))
			{
				targetTransform.rotation = Quaternion.RotateTowards(targetTransform.rotation, desiredRotation, maxRotationDelta * Time.deltaTime);
			}
			if (lookClock <= 0f)
			{
				shouldReset = true;
			}
		}
		else if (shouldReset)
		{
			targetTransform.rotation = Quaternion.RotateTowards(targetTransform.rotation, targetTransform.parent.rotation, maxRotationDelta * Time.deltaTime);
			if (targetTransform.rotation.Equals(targetTransform.parent.rotation))
			{
				shouldReset = false;
			}
		}
	}
}