Exemplo n.º 1
0
    private void UpdateCarEvaluation(SensorCar car)
    {
        if (raceCars[car] < checkpoints.Count - 1)
        {
            Checkpoint checkpointToReach    = checkpoints[raceCars[car] + 1];
            double     distanceToCheckpoint = car.GlobalPosition.DistanceTo(checkpointToReach.GlobalPosition);
            if (distanceToCheckpoint < distanceThreshold)
            {
                raceCars[car] = raceCars[car] + 1;
                GD.Print("Car " + car.Name + " reached checkpoint " + raceCars[car]);
                lastCheckpointTimestamp[car] = System.Environment.TickCount;
            }

            double currentScore;
            if (raceCars[car] == checkpoints.Count - 1)
            {
                currentScore = checkpoints[raceCars[car]].Score;
            }
            else
            {
                Checkpoint currentCheckpoint = checkpoints[raceCars[car]];
                checkpointToReach = checkpoints[raceCars[car] + 1];
                double distanceBetweenCheckpoints = currentCheckpoint.GlobalPosition.DistanceTo(checkpointToReach.GlobalPosition);
                distanceToCheckpoint = car.GlobalPosition.DistanceTo(checkpointToReach.GlobalPosition);
                currentScore         = checkpoints[raceCars[car]].Score + (distanceBetweenCheckpoints - distanceToCheckpoint);
            }

            car.Agent.Genotype.Evaluation = Math.Max(0, currentScore);
        }
    }
Exemplo n.º 2
0
 private void LoadCars(Node parent, string carScenePath, int carsNumber)
 {
     for (int i = 0; i < carsNumber; i++)
     {
         var       carScene = (PackedScene)ResourceLoader.Load(carScenePath);
         SensorCar car      = (SensorCar)carScene.Instance();
         raceCars.Add(car, 0);
         lastCheckpointTimestamp.Add(car, 0);
         CallDeferred("AddCar", parent, car);
     }
 }
Exemplo n.º 3
0
 private void AddCar(Node parent, SensorCar car)
 {
     parent.AddChild(car);
     car.GlobalPosition = checkpoints[0].GlobalPosition;
 }