blob: a6bad07758143ce52a4915de1ca0bf053a7416f1 (
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
78
79
|
using UnityEngine;
using UnityEngine.Events;
public class PlayerInRangeTrigger : MonoBehaviour
{
public enum TargetType
{
Any,
OtherPlayer
}
public TargetType targetType;
public float range = 5f;
public float cooldown;
public bool repeating;
private float counter;
private bool done;
[HideInInspector]
public bool inRange;
public UnityEvent triggerEvent;
[HideInInspector]
public Player target;
private Player ownPlayer;
public bool scaleWithRange;
private void Start()
{
ownPlayer = base.transform.root.GetComponent<Player>();
if (!ownPlayer)
{
ownPlayer = base.transform.root.GetComponentInParent<SpawnedAttack>().spawner;
}
if (scaleWithRange)
{
range *= base.transform.localScale.x;
}
}
private void Update()
{
counter += TimeHandler.deltaTime;
inRange = false;
target = null;
if (done)
{
return;
}
Player player = null;
if (targetType == TargetType.OtherPlayer)
{
player = PlayerManager.instance.GetOtherPlayer(ownPlayer);
}
if (targetType == TargetType.Any)
{
player = PlayerManager.instance.GetClosestPlayer(base.transform.position);
}
if (PlayerManager.instance.CanSeePlayer(base.transform.position, player).canSee && Vector3.Distance(base.transform.position, player.transform.position) < range * base.transform.root.localScale.x && !player.data.dead && counter >= cooldown)
{
counter = 0f;
triggerEvent.Invoke();
inRange = true;
target = player;
if (!repeating)
{
done = true;
}
}
}
}
|