summaryrefslogtreecommitdiff
path: root/GameCode/PlayerInRangeTrigger.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-10-27 11:05:14 +0800
committerchai <215380520@qq.com>2023-10-27 11:05:14 +0800
commit766cdff5ffa72b65d7f106658d1603f47739b2ba (patch)
tree34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/PlayerInRangeTrigger.cs
+ init
Diffstat (limited to 'GameCode/PlayerInRangeTrigger.cs')
-rw-r--r--GameCode/PlayerInRangeTrigger.cs79
1 files changed, 79 insertions, 0 deletions
diff --git a/GameCode/PlayerInRangeTrigger.cs b/GameCode/PlayerInRangeTrigger.cs
new file mode 100644
index 0000000..a6bad07
--- /dev/null
+++ b/GameCode/PlayerInRangeTrigger.cs
@@ -0,0 +1,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;
+ }
+ }
+ }
+}