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.

59 lines
1.6KB

  1. package de.hems.trafficsim;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Observable;
  5. public class Track extends Observable {
  6. protected List<Vehicle> vehicles;
  7. protected float trackLength;
  8. public List<Vehicle> getVehicles() {
  9. return vehicles;
  10. }
  11. public float getTrackLength() {
  12. return trackLength;
  13. }
  14. public Track(int numberVehicles, float trackLength) {
  15. this.trackLength = trackLength;
  16. this.vehicles = createVehiclesList(numberVehicles);
  17. }
  18. protected List<Vehicle> createVehiclesList(int numberVehicles){
  19. List<Vehicle> result = new ArrayList<>();
  20. for(int i=0;i<numberVehicles;i++){
  21. Vehicle vehicle = new Vehicle(i, i, 5, 0.2f, this.trackLength);
  22. result.add(vehicle);
  23. }
  24. return result;
  25. }
  26. public void timeElapse(float timeStep) {
  27. for(int i=0; i<vehicles.size();i++) {
  28. Vehicle v = vehicles.get(i);
  29. int forerunnerIndex = i + 1;
  30. if (forerunnerIndex >= vehicles.size()) {
  31. forerunnerIndex -= vehicles.size();
  32. }
  33. Vehicle forerunner = vehicles.get(forerunnerIndex);
  34. float distanceForerunner = forerunner.getPosition() - v.getPosition() - 1;
  35. if(distanceForerunner < 0.0){
  36. distanceForerunner += this.trackLength;
  37. }
  38. v.updateVelocity(distanceForerunner);
  39. }
  40. for(Vehicle v: vehicles){
  41. v.timeElapse(50);
  42. }
  43. this.setChanged();
  44. this.notifyObservers(this);
  45. this.clearChanged();
  46. }
  47. }