You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.3 KiB

package mock.model;
import network.Messages.Enums.BoatStatusEnum;
import network.Messages.LatestMessages;
import shared.dataInput.BoatDataSource;
import shared.dataInput.RaceDataSource;
import shared.dataInput.RegattaDataSource;
import shared.model.*;
import java.util.Iterator;
import java.util.List;
public class RaceLogic {
private RaceState raceState;
/**
* The scale factor of the race.
* See {@link Constants#RaceTimeScale}.
*/
private int scaleFactor;
/**
* Object used to generate changes in wind speed/direction.
*/
private WindGenerator windGenerator;
public RaceLogic(BoatDataSource boatDataSource, RaceDataSource raceDataSource, RegattaDataSource regattaDataSource, LatestMessages latestMessages, Polars polars, int timeScale) {
this.raceState = new RaceState(boatDataSource, raceDataSource, regattaDataSource, latestMessages, polars);
this.raceState.run();
//Set up wind generator. It may be tidier to create this outside the race (with the values sourced from a data file maybe?) and pass it in.
this.windGenerator = new WindGenerator(
Bearing.fromDegrees(225),
Bearing.fromDegrees(215),
Bearing.fromDegrees(235),
12d,
8d,
16d );
raceState.setWind(windGenerator.generateBaselineWind());
}
private void changeWindDirection() {
Wind nextWind = windGenerator.generateNextWind(raceState.getWind());
raceState.setWind(nextWind);
}
/**
* Returns the number of boats that are still active in the race.
* They become inactive by either finishing or withdrawing.
* @return The number of boats still active in the race.
*/
protected int getNumberOfActiveBoats() {
int numberOfActiveBoats = 0;
for (MockBoat boat : raceState.getBoats()) {
//If the boat is currently racing, count it.
if (boat.getStatus() == BoatStatusEnum.RACING) {
numberOfActiveBoats++;
}
}
return numberOfActiveBoats;
}
/**
* Returns a list of boats in the race.
* @return List of boats in the race.
*/
public List<MockBoat> getBoats() {
return raceState.getBoats();
}
}