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;
}
}
}
}
|