public void Update(float deltaTime) { if (running) { if (!AllCarsDead()) { var bestBrain = FindBestBrain(); if (bestBrain.Id != currentBrainController.Id) { currentBrainController = bestBrain; debug.Log("found a better car: " + currentBrainController.Id); } } else { debug.Log("All cars are dead!"); debug.Log("Making a new generation!"); var newBrains = MakeNewGenerationOfBrains(brainControllerList); SetupGenerationOfBrains(newBrains); } var sensorData = currentBrainController.GetSensorData(); uiObject.SetSensorData(sensorData, "F2"); uiObject.SetScoreText(currentBrainController.Score.ToString()); uiObject.SetTurnText(currentBrainController.TurnOutput.ToString()); uiObject.SetCarIdText(currentBrainController.Id); mainGameObject.CameraFollowCar(currentBrainController.CarObjectId, deltaTime); } }
public int InstantiateCar(ICarBrainController brainController, bool manualControl) { var carGameObject = Instantiate(simpleCarPrefab, startPoint.position, startPoint.rotation); carGameObjectList.Add(carGameObject); var carObject = carGameObject.GetComponent <CarObject>(); carObject.manualControl = manualControl; carObject.BrainController = (CarBrainController)brainController; brainController.CarObject = carObject; carObjectList.Add(carObject); return(carGameObject.GetInstanceID()); }
public void Setup() { var uiObject = Substitute.For <IUiObject>(); ga = Substitute.For <IGeneticAlgorithm>(); debug = Substitute.For <IDebug>(); brain1 = Substitute.For <ICarBrainController>(); brain2 = Substitute.For <ICarBrainController>(); brain3 = Substitute.For <ICarBrainController>(); brain4 = Substitute.For <ICarBrainController>(); brain5 = Substitute.For <ICarBrainController>(); mainGameObject = Substitute.For <IMainGameObject>(); mainGameObject.CreateCarBrainController(Arg.Any <List <decimal> >()).Returns(brain1, brain2, brain3, brain4, brain5); controller = new GameController(debug, uiObject, ga, mainGameObject); controller.Init(5); }
private void SetupGenerationOfBrains(List <ICarBrainController> newBrains) { foreach (var brain in brainControllerList) { mainGameObject.DestroyCarObject(brain.CarObjectId); } mainGameObject.ClearCarObjects(); foreach (var brain in newBrains) { var carId = mainGameObject.InstantiateCar(brain, false); brain.CarObjectId = carId; brainControllerList.Add(brain); } //pick the first car to start watching if (brainControllerList.Count > 0) { currentBrainController = brainControllerList[0]; } }