This repository has been archived on 2023-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
station_obscurum_unity/Assets/Scripts/Item/FlareBeacon/FlareBeacon.cs

69 lines
1.6 KiB
C#
Raw Normal View History

2023-04-18 00:23:47 +02:00
using System.Collections.Generic;
using UnityEngine;
2023-04-18 06:29:51 +02:00
using UnityEngine.AI;
2023-04-18 00:23:47 +02:00
public class FlareBeacon : MonoBehaviour
{
2023-06-01 17:03:48 +02:00
[SerializeField] private float range = 1;
2023-04-18 00:23:47 +02:00
2023-06-01 17:03:48 +02:00
[SerializeField] private float duration = 5f;
[SerializeField] private NavMeshObstacle obstacle;
private readonly List<GameObject> inRange = new();
2023-04-18 00:23:47 +02:00
2023-04-21 09:30:43 +02:00
private FlareRegister register;
2023-06-01 17:03:48 +02:00
public float Range => range;
2023-04-18 00:23:47 +02:00
// Start is called before the first frame update
2023-06-01 17:03:48 +02:00
private void Start()
2023-04-18 00:23:47 +02:00
{
2023-04-21 09:30:43 +02:00
register = FlareRegister.instance;
register.beacons.Add(this);
2023-04-18 04:29:21 +02:00
transform.localEulerAngles = new Vector3(-89.98f, 0, 0);
2023-06-01 17:03:48 +02:00
var r = new Ray();
2023-04-18 04:29:21 +02:00
r.direction = -transform.forward;
r.origin = transform.position;
RaycastHit hit;
2023-06-01 17:03:48 +02:00
var rays = Physics.RaycastAll(r);
foreach (var _hit in rays)
2023-04-18 04:29:21 +02:00
{
2023-06-01 17:03:48 +02:00
if (_hit.transform.gameObject.GetComponent<FlareBeacon>() != null) continue;
2023-04-18 04:29:21 +02:00
transform.position = _hit.point;
break;
}
2023-06-01 17:03:48 +02:00
if (Physics.Raycast(r, out hit))
{
// transform.position = hit.point;
2023-04-18 04:29:21 +02:00
}
2023-04-21 09:30:43 +02:00
2023-06-01 17:03:48 +02:00
if (obstacle != null)
obstacle.radius = range / 10;
2023-04-18 00:23:47 +02:00
}
// Update is called once per frame
2023-06-01 17:03:48 +02:00
private void Update()
2023-04-18 00:23:47 +02:00
{
}
2023-06-01 17:03:48 +02:00
private void OnDrawGizmosSelected()
{
// Draw a yellow sphere at the transform's position
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(transform.position, range);
}
2023-04-18 00:23:47 +02:00
private void OnTriggerEnter(Collider other)
{
inRange.Add(other.gameObject);
}
2023-06-01 17:03:48 +02:00
2023-04-18 00:23:47 +02:00
private void OnTriggerExit(Collider other)
{
inRange.Remove(other.gameObject);
}
2023-06-01 17:03:48 +02:00
}