update Vehicle and Campaign
- Added movment in vehicle. - Now Campaign sets Routes for it's Vehicles. - Fixed Array size of stdRoutes - Added getShortestRoute(Campaign) and getRoutesToDistrict(District) in MakkahCity Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
f4bb5e6099
commit
16ff81a44c
@ -45,6 +45,9 @@ public class Campaign {
|
||||
|
||||
public void setDestToHousingRoute(Route destToHousingRoute) {
|
||||
this.destToHousingRoute = destToHousingRoute;
|
||||
for(Vehicle vehicle : this.getVehicles()){
|
||||
vehicle.setRoute(destToHousingRoute);
|
||||
}
|
||||
}
|
||||
|
||||
public District getHotelDistrict(){ return this.hotelDistrict; }
|
||||
|
@ -5,7 +5,7 @@ public class MakkahCity {
|
||||
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
||||
|
||||
private static final ArrayList<Vehicle> listOfVehicles = new ArrayList<>();
|
||||
private static final Route[] stdRoutes = new Route[9];
|
||||
private static final Route[] stdRoutes = new Route[6];
|
||||
private static final Street[] stdStreet = new Street[8];
|
||||
|
||||
private static final PDate timeManager = new PDate(
|
||||
@ -31,37 +31,33 @@ public class MakkahCity {
|
||||
//Set Routes for Campaigns
|
||||
setRoutesForCampaigns();
|
||||
|
||||
//TODO: Set Schedule for Campaigns
|
||||
//TODO: [1]Set Schedule for Campaigns
|
||||
|
||||
while(!timeManager.isEnded()) {
|
||||
timeManager.step(Calendar.MINUTE, 1);
|
||||
System.out.println(timeManager.getCurrentTime());
|
||||
//TODO: add civil cars in loop iterations. (noise)
|
||||
//TODO: [2]add civil cars in loop iterations. (noise)
|
||||
//noise based on time of day (From PDate)
|
||||
//TODO: Move busses and vehicles.
|
||||
//TODO: [3]Move busses and vehicles.
|
||||
|
||||
//TODO: Update streets.
|
||||
//TODO: [4]Update streets.
|
||||
|
||||
//TODO: Streets move forward.
|
||||
//TODO: [5]Streets move forward.
|
||||
|
||||
//TODO: update vehicles on street.
|
||||
//TODO: [6]update vehicles on street.
|
||||
}
|
||||
}
|
||||
|
||||
private static void setRoutesForCampaigns() {
|
||||
for (Campaign camp : listOfCampaigns){
|
||||
if (camp.getHotelDistrict() == District.ALAZIZIYA) {
|
||||
setUpCampaginRoute(camp, RouteName.mashierToAlAzizi1);
|
||||
}
|
||||
else if (camp.getHotelDistrict() == District.ALMANSOOR){
|
||||
setUpCampaginRoute(camp, RouteName.mashierToAlMansoor2);
|
||||
}
|
||||
else {
|
||||
setUpCampaginRoute(camp, RouteName.mashierToAlHijra1);
|
||||
}
|
||||
camp.setDestToHousingRoute(getShortestRoute(camp));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
This is not used. The campaign object sets the routes for the busses
|
||||
*/
|
||||
@Deprecated
|
||||
private static void setUpCampaginRoute(Campaign camp, int routeName) {
|
||||
Route route = stdRoutes[routeName];
|
||||
camp.setDestToHousingRoute(route);
|
||||
@ -90,7 +86,7 @@ public class MakkahCity {
|
||||
stdStreet[StreetNames.STREET2] = new Street(7000,2);
|
||||
stdStreet[StreetNames.STREET3] = new Street(400,2);
|
||||
stdStreet[StreetNames.STREET4] = new Street(8200,2);
|
||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL] = new Street(100,2); //TODO: Change numbers
|
||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL] = new Street(100,2); //TODO: [7]Change numbers
|
||||
}
|
||||
|
||||
private static void makeRoutes() {
|
||||
@ -106,7 +102,7 @@ public class MakkahCity {
|
||||
stdStreet[StreetNames.STREET1],
|
||||
stdStreet[StreetNames.FOURTH_HIGHWAY],
|
||||
stdStreet[StreetNames.STREET4]
|
||||
},District.ALAZIZIYA, Mashier.ARAFAT);
|
||||
},District.ALHIJRA, Mashier.ARAFAT);
|
||||
|
||||
stdRoutes[RouteName.mashierToAlMansoor1] = new Route(
|
||||
new Street[]{
|
||||
@ -121,7 +117,7 @@ public class MakkahCity {
|
||||
stdStreet[StreetNames.STREET1],
|
||||
stdStreet[StreetNames.STREET2],
|
||||
stdStreet[StreetNames.KUDAY],
|
||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL]//TODO: is actually half of ibrahim khalil.
|
||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL]//TODO: [8]is actually half of ibrahim khalil.
|
||||
},District.ALMANSOOR, Mashier.ARAFAT);
|
||||
|
||||
//Optimal for Almansoor
|
||||
@ -176,4 +172,39 @@ public class MakkahCity {
|
||||
public static PDate getTimeManager() {
|
||||
return timeManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find shortest path without respect to traffic
|
||||
* @param campaign
|
||||
* @return
|
||||
*/
|
||||
private static Route getShortestRoute(Campaign campaign) {
|
||||
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
||||
Route route = null;
|
||||
double min = Double.MAX_VALUE;
|
||||
for (Route r : routes) {
|
||||
if (r.getTotalLength() < min) {
|
||||
min = r.getTotalLength();
|
||||
route = r;
|
||||
}
|
||||
}
|
||||
return route;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find routes that connect to a certain district.
|
||||
* @param district
|
||||
* @return Array of routes that connect to 'district'
|
||||
*/
|
||||
private static Route[] getRoutesToDistrict(District district) {
|
||||
ArrayList<Route> routes = new ArrayList<>();
|
||||
for (Route route : stdRoutes) {
|
||||
if (route.getHotelArea() == district) {
|
||||
routes.add(route);
|
||||
}
|
||||
}
|
||||
Route[] routesArray = new Route[routes.size()];
|
||||
return routes.toArray(routesArray);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,15 @@
|
||||
import java.util.Date;
|
||||
|
||||
public abstract class Vehicle {
|
||||
|
||||
private double vehicleSize;
|
||||
private Route route;
|
||||
private Street currentStreet;
|
||||
private double currentLocation;
|
||||
private int currentStreetIndex;
|
||||
private boolean arrivedToDest;
|
||||
private boolean moving;
|
||||
private Date timeStartedMoving;
|
||||
|
||||
public Vehicle(double vehicleSize){
|
||||
setVehicleSize(vehicleSize);
|
||||
@ -18,6 +24,8 @@ public abstract class Vehicle {
|
||||
|
||||
public void setRoute(Route route) {
|
||||
this.route = route;
|
||||
this.currentStreetIndex = 0;
|
||||
this.route.getStreets()[0].addVehicle(this);//TODO: [9]street might not add if capacity is low
|
||||
}
|
||||
|
||||
private void setVehicleSize(double vehicleSize) {
|
||||
@ -33,11 +41,30 @@ public abstract class Vehicle {
|
||||
return currentLocation;
|
||||
}
|
||||
|
||||
//TODO: Manage movement and setStreet and location ons street.
|
||||
|
||||
public void moveForward(double distance) {
|
||||
//TODO: Check if at end of street move to next street in Route.
|
||||
this.currentLocation += distance;
|
||||
if (moving && !arrivedToDest){
|
||||
if (isAtEndOfCurrentStreet()) {
|
||||
moveToNextStreet();
|
||||
//this.currentLocation += distance;
|
||||
}
|
||||
else this.currentLocation += distance;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isAtEndOfCurrentStreet() {
|
||||
//At last meter of current street
|
||||
return (this.currentStreet.getLength() - this.currentLocation) < 1;
|
||||
}
|
||||
|
||||
private void moveToNextStreet() {
|
||||
this.currentStreetIndex++;
|
||||
Street nextStreet;
|
||||
try { nextStreet = this.getRoute().getStreets()[currentStreetIndex]; }
|
||||
catch (IndexOutOfBoundsException e) { this.arrivedToDest = true; return;}
|
||||
if (nextStreet.canTakeVehicles(this)){
|
||||
this.currentStreet = nextStreet;
|
||||
this.currentLocation = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -45,9 +72,13 @@ public abstract class Vehicle {
|
||||
*/
|
||||
public double getDistanceToNextVehicle() {
|
||||
if (getCurrentStreet() != null) {
|
||||
int indexOfNxt = getCurrentStreet().getVehicles().indexOf(this) + 1; //next
|
||||
Vehicle nextVehicle = getCurrentStreet().getVehicles().get(indexOfNxt);
|
||||
return nextVehicle.getCurrentLocation() - this.getCurrentLocation();
|
||||
int indexOfNxt = getCurrentStreet().getVehicles().indexOf(this) - 1; //next
|
||||
//Index may be out of bound if this car is the only or first (end if street)
|
||||
try {
|
||||
Vehicle nextVehicle = getCurrentStreet().getVehicles().get(indexOfNxt);
|
||||
return nextVehicle.getCurrentLocation() - this.getCurrentLocation();
|
||||
}
|
||||
catch (IndexOutOfBoundsException e) {return -1;}
|
||||
}
|
||||
return -1;//open or unlimited
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user