44 lines
1.5 KiB
C#
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);
|
|
}
|
|
} |