Files
Infratest/Assets/Code/Example/Race/Track/CheckPoint.cs
T

44 lines
1.5 KiB
C#

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<Racer.Racer>();
if (racer.CurrentWaypointIndex != _id) return;
racer.NextWaypoint();
if (racer.Data.type == RacerType.Player)
{
Hide();
_eventBus.RaiseEvent<IPlayerPassedCheckpointHandler>(h => h.OnPlayerPassedCheckpoint(racer));
}
_eventBus.RaiseEvent<IRacerPassedCheckpointHandler>(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);
}
}