using System; using Controller.Bicycle; using Pools; using Routes; using UnityEngine; namespace Roads { [RequireComponent(typeof(BoxCollider))] public class StraightRoadExtras : MonoBehaviour, IRoad { public GameObject arcPrefab; private GameObject arc; private bool hasArc; public TriggerState ArcState { get; private set; } = TriggerState.Outside; public float SlopeDeg { get; private set; } public float MinY { get; private set; } public delegate void OnArcEnteredEvent(); public delegate void OnArcPassedEvent(); public event OnArcEnteredEvent OnArcEntered; public event OnArcPassedEvent OnArcPassed; private void Start() { SlopeDeg = transform.localRotation.eulerAngles.z; MinY = GetComponent().bounds.center.y; } public void ShowArc() { arc = Instantiate(arcPrefab, transform); hasArc = arc != null; } private void OnTriggerEnter(Collider other) { if (other.CompareTag("bike")) { if (hasArc) { OnArcEntered?.Invoke(); ArcState = TriggerState.Inside; } } } private void OnTriggerExit(Collider other) { if (hasArc && other.CompareTag("bike")) { Destroy(arc); ArcState = TriggerState.Outside; OnArcPassed?.Invoke(); } } } }