summaryrefslogtreecommitdiff
path: root/GameCode/PlayerInRangeTrigger.cs
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;
			}
		}
	}
}