using Code.Example.Race.Racer; using Code.Infrastructure.EventBus; using Reflex.Attributes; using UnityEngine; namespace Code.Example.Race.Track { public class CheckPoint : MonoBehaviour { [Inject] private EventBus _eventBus; [SerializeField] private GameObject _checkPointMesh; [SerializeField] private int _id; // Костыль инвалид лестница private void OnTriggerEnter(Collider other) { var racer = other.GetComponent(); if (racer.CurrentWaypointIndex != _id) return; racer.NextWaypoint(); if (racer.Data.type == RacerType.Player) { Hide(); _eventBus.RaiseEvent(h => h.OnPlayerPassedCheckpoint(racer)); } _eventBus.RaiseEvent(h => h.OnRacerPassedCheckpoint(racer)); } public void Hide() => _checkPointMesh.SetActive(false); public void Show() => _checkPointMesh.SetActive(true); } public interface IRacerPassedCheckpointHandler : IGlobalSubscriber { void OnRacerPassedCheckpoint(Racer.Racer racer); void LapPassed(Racer.Racer racer); } public interface IPlayerPassedCheckpointHandler : IGlobalSubscriber { void OnPlayerPassedCheckpoint(Racer.Racer racer); void OnPlayerLapPassed(Racer.Racer racer); } }