private void Awake() { car = container.InstantiatePrefab(carPrefab).GetComponent <CarController>(); container.Bind <CarController>().FromInstance(car).AsSingle(); signalBus.Subscribe <OnCheckpointAchievedSignal>(x => { if (levelEnded) { return; } if (x.CheckPoint.Index == nextCheckpoint) { x.CheckPoint.Close(); nextCheckpoint++; signalBus.Fire <OnTakeCheckpointSignal>(); if (nextCheckpoint + 1 < checkPoints.Count) { checkPoints[nextCheckpoint].ShowStraight(); checkPoints[nextCheckpoint + 1].Show(); cameraManager.RemoveTarget(checkPoints[nextCheckpoint - 1].transform); cameraManager.AddTarget(checkPoints[nextCheckpoint + 1].transform); } else { if (nextCheckpoint + 1 == checkPoints.Count) { finish.Show(); checkPoints[nextCheckpoint].ShowStraight(); cameraManager.RemoveTarget(checkPoints[nextCheckpoint - 1].transform); cameraManager.AddTarget(finish.transform); } else { cameraManager.RemoveTarget(checkPoints[nextCheckpoint - 1].transform); } } } else { signalBus.Fire <OnLoseCheckpointSignal>(); } }); signalBus.Subscribe <OnFinishAchievedSignal>(() => { if (levelEnded) { return; } if (nextCheckpoint == checkPoints.Count) { signalBus.Fire <OnLevelFinishedSignal>(); } else { signalBus.Fire <OnLoseCheckpointSignal>(); } }); signalBus.Subscribe <OnLevelFailedSignal>(() => { levelEnded = true; car.TakeControl(); }); signalBus.Subscribe <OnLevelFinishedSignal>(() => { levelEnded = true; car.TakeControl(); }); }