Major update
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
cc64faf912
commit
62c8fb22fa
@ -4,6 +4,7 @@ public class Bus extends CivilVehicle {
|
|||||||
private String UID;
|
private String UID;
|
||||||
private static int numeberOfBuses;
|
private static int numeberOfBuses;
|
||||||
private final int TIME_TO_FIX = 20; //in minutes
|
private final int TIME_TO_FIX = 20; //in minutes
|
||||||
|
public final int MAX_FORWARD = 900; //Meter/Min
|
||||||
|
|
||||||
public static final double STD_BUS_SIZE = 10;
|
public static final double STD_BUS_SIZE = 10;
|
||||||
|
|
||||||
|
@ -1,210 +1,216 @@
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class MakkahCity {
|
public class MakkahCity {
|
||||||
|
|
||||||
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
||||||
|
|
||||||
private static final ArrayList<Vehicle> listOfVehicles = new ArrayList<>();
|
private static final ArrayList<Vehicle> listOfVehicles = new ArrayList<>();
|
||||||
private static final Route[] stdRoutes = new Route[6];
|
private static final Route[] stdRoutes = new Route[6];
|
||||||
private static final Street[] stdStreet = new Street[8];
|
private static final Street[] stdStreet = new Street[8];
|
||||||
|
|
||||||
private static final PDate timeManager = new PDate(
|
private static final PDate timeManager = new PDate(
|
||||||
new GregorianCalendar(2020, Calendar.JANUARY, 1, 8, 0, 0),
|
new GregorianCalendar(2020, Calendar.JANUARY, 1, 4, 0, 0),
|
||||||
new GregorianCalendar(2020, Calendar.JANUARY, 2, 8, 0, 0)
|
new GregorianCalendar(2020, Calendar.JANUARY, 1, 20, 0, 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
//Gen Camp
|
//Gen Camp
|
||||||
generateCamps(District.ALAZIZIYA, getRandom(70, 100));
|
generateCamps(District.ALAZIZIYA, getRandom(70, 100));
|
||||||
generateCamps(District.ALMANSOOR, getRandom(110, 160));
|
generateCamps(District.ALMANSOOR, getRandom(110, 160));
|
||||||
generateCamps(District.ALHIJRA, getRandom(80, 110));
|
generateCamps(District.ALHIJRA, getRandom(80, 110));
|
||||||
|
|
||||||
fillBusesToList();
|
fillBusesToList();
|
||||||
|
|
||||||
//Make Streets
|
//Make Streets
|
||||||
makeStreets();
|
makeStreets();
|
||||||
|
|
||||||
//Make Routes
|
//Make Routes
|
||||||
makeRoutes();
|
makeRoutes();
|
||||||
|
|
||||||
//Set Routes for Campaigns
|
//Set Routes for Campaigns
|
||||||
setRoutesForCampaigns();
|
setRoutesForCampaigns();
|
||||||
|
|
||||||
//TODO: [1]Set Schedule for Campaigns
|
|
||||||
|
|
||||||
while(!timeManager.isEnded()) {
|
while(!timeManager.isEnded()) {
|
||||||
timeManager.step(Calendar.MINUTE, 1);
|
timeManager.step(Calendar.MINUTE, 1);
|
||||||
System.out.println(timeManager.getCurrentTime());
|
System.out.println(timeManager.getCurrentTime());
|
||||||
//TODO: [2]add civil cars in loop iterations. (noise)
|
//TODO: [2]add civil cars in loop iterations. (noise)
|
||||||
//noise based on time of day (From PDate)
|
//noise based on time of day (From PDate)
|
||||||
//TODO: [3]Move busses and vehicles.
|
//TODO: [3]Move busses and vehicles.
|
||||||
|
|
||||||
//TODO: [4]Update streets.
|
//TODO: [4]Update streets.
|
||||||
|
|
||||||
//TODO: [5]Streets move forward.
|
//TODO: [5]Streets move forward.
|
||||||
|
|
||||||
//TODO: [6]update vehicles on street.
|
for (Campaign campaign : listOfCampaigns){
|
||||||
}
|
for (Vehicle vehicle : campaign.getVehicles()){
|
||||||
}
|
vehicle.moveForward(((Bus)vehicle).MAX_FORWARD);
|
||||||
|
}
|
||||||
private static void setRoutesForCampaigns() {
|
}
|
||||||
for (Campaign camp : listOfCampaigns){
|
|
||||||
camp.setDestToHousingRoute(getShortestRoute(camp));
|
//TODO: [6]update vehicles on street.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
private static void setRoutesForCampaigns() {
|
||||||
This is not used. The campaign object sets the routes for the busses
|
for (Campaign camp : listOfCampaigns){
|
||||||
*/
|
camp.setDestToHousingRoute(getShortestRoute(camp));
|
||||||
@Deprecated
|
}
|
||||||
private static void setUpCampaginRoute(Campaign camp, int routeName) {
|
}
|
||||||
Route route = stdRoutes[routeName];
|
|
||||||
camp.setDestToHousingRoute(route);
|
/*
|
||||||
//For now set all busses to one route
|
This is not used. The campaign object sets the routes for the busses
|
||||||
for(Vehicle vehicle : camp.getVehicles()){
|
*/
|
||||||
vehicle.setRoute(route);
|
@Deprecated
|
||||||
}
|
private static void setUpCampaginRoute(Campaign camp, int routeName) {
|
||||||
}
|
Route route = stdRoutes[routeName];
|
||||||
|
camp.setDestToHousingRoute(route);
|
||||||
private static int getRandom(int min, int max) {
|
//For now set all busses to one route
|
||||||
return (int)(Math.random() * (max - min) + min);
|
for(Vehicle vehicle : camp.getVehicles()){
|
||||||
}
|
vehicle.setRoute(route);
|
||||||
|
}
|
||||||
private static void generateCamps(District area, int count) {
|
}
|
||||||
for (int i = 0; i < count; i++){
|
|
||||||
Campaign camp = new Campaign(area, getRandom(10, 15));
|
private static int getRandom(int min, int max) {
|
||||||
listOfCampaigns.add(camp);
|
return (int)(Math.random() * (max - min) + min);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private static void generateCamps(District area, int count) {
|
||||||
private static void makeStreets(){
|
for (int i = 0; i < count; i++){
|
||||||
stdStreet[StreetNames.KA_STREET.ordinal()] = new Street(22700,3);
|
Campaign camp = new Campaign(area, getRandom(10, 15));
|
||||||
stdStreet[StreetNames.FOURTH_HIGHWAY.ordinal()] = new Street(24600,4);
|
listOfCampaigns.add(camp);
|
||||||
stdStreet[StreetNames.KUDAY.ordinal()] = new Street(22000,3);
|
}
|
||||||
stdStreet[StreetNames.STREET1.ordinal()] = new Street(4000,2);
|
}
|
||||||
stdStreet[StreetNames.STREET2.ordinal()] = new Street(7000,2);
|
|
||||||
stdStreet[StreetNames.STREET3.ordinal()] = new Street(400,2);
|
private static void makeStreets(){
|
||||||
stdStreet[StreetNames.STREET4.ordinal()] = new Street(8200,2);
|
stdStreet[StreetNames.KA_STREET.ordinal()] = new Street(22700,3, StreetNames.KA_STREET);
|
||||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL.ordinal()] = new Street(100,2); //TODO: [7]Change numbers
|
stdStreet[StreetNames.FOURTH_HIGHWAY.ordinal()] = new Street(24600,4, StreetNames.FOURTH_HIGHWAY);
|
||||||
}
|
stdStreet[StreetNames.KUDAY.ordinal()] = new Street(22000,3, StreetNames.KUDAY);
|
||||||
|
stdStreet[StreetNames.STREET1.ordinal()] = new Street(4000,2, StreetNames.STREET1);
|
||||||
private static void makeRoutes() {
|
stdStreet[StreetNames.STREET2.ordinal()] = new Street(7000,2,StreetNames.STREET2);
|
||||||
|
stdStreet[StreetNames.STREET3.ordinal()] = new Street(400,2, StreetNames.STREET3);
|
||||||
stdRoutes[RouteName.mashierToAlHijra1.ordinal()] = new Route(
|
stdStreet[StreetNames.STREET4.ordinal()] = new Street(8200,2,StreetNames.STREET4);
|
||||||
new Street[]{
|
stdStreet[StreetNames.IBRAHIM_ALKHALIL.ordinal()] = new Street(100,2, StreetNames.IBRAHIM_ALKHALIL); //TODO: [7]Change numbers
|
||||||
stdStreet[StreetNames.STREET1.ordinal()],
|
}
|
||||||
stdStreet[StreetNames.STREET2.ordinal()],
|
|
||||||
stdStreet[StreetNames.KUDAY.ordinal()]},
|
private static void makeRoutes() {
|
||||||
District.ALHIJRA, Mashier.ARAFAT);
|
|
||||||
|
stdRoutes[RouteName.mashierToAlHijra1.ordinal()] = new Route(
|
||||||
stdRoutes[RouteName.mashierToAlHijra2.ordinal()] = new Route(new Street[]{
|
new Street[]{
|
||||||
stdStreet[StreetNames.STREET1.ordinal()],
|
stdStreet[StreetNames.STREET1.ordinal()],
|
||||||
stdStreet[StreetNames.FOURTH_HIGHWAY.ordinal()],
|
stdStreet[StreetNames.STREET2.ordinal()],
|
||||||
stdStreet[StreetNames.STREET4.ordinal()]
|
stdStreet[StreetNames.KUDAY.ordinal()]},
|
||||||
},District.ALHIJRA, Mashier.ARAFAT);
|
District.ALHIJRA, Mashier.ARAFAT);
|
||||||
|
|
||||||
stdRoutes[RouteName.mashierToAlMansoor1.ordinal()] = new Route(
|
stdRoutes[RouteName.mashierToAlHijra2.ordinal()] = new Route(new Street[]{
|
||||||
new Street[]{
|
stdStreet[StreetNames.STREET1.ordinal()],
|
||||||
stdStreet[StreetNames.STREET1.ordinal()],
|
stdStreet[StreetNames.FOURTH_HIGHWAY.ordinal()],
|
||||||
stdStreet[StreetNames.STREET2.ordinal()],
|
stdStreet[StreetNames.STREET4.ordinal()]
|
||||||
stdStreet[StreetNames.KA_STREET.ordinal()],
|
},District.ALHIJRA, Mashier.ARAFAT);
|
||||||
stdStreet[StreetNames.STREET3.ordinal()]
|
|
||||||
},District.ALMANSOOR, Mashier.ARAFAT);
|
stdRoutes[RouteName.mashierToAlMansoor1.ordinal()] = new Route(
|
||||||
|
new Street[]{
|
||||||
stdRoutes[RouteName.mashierToAlMansoor2.ordinal()] = new Route(
|
stdStreet[StreetNames.STREET1.ordinal()],
|
||||||
new Street[]{
|
stdStreet[StreetNames.STREET2.ordinal()],
|
||||||
stdStreet[StreetNames.STREET1.ordinal()],
|
stdStreet[StreetNames.KA_STREET.ordinal()],
|
||||||
stdStreet[StreetNames.STREET2.ordinal()],
|
stdStreet[StreetNames.STREET3.ordinal()]
|
||||||
stdStreet[StreetNames.KUDAY.ordinal()],
|
},District.ALMANSOOR, Mashier.ARAFAT);
|
||||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL.ordinal()]//TODO: [8]is actually half of ibrahim khalil.
|
|
||||||
},District.ALMANSOOR, Mashier.ARAFAT);
|
stdRoutes[RouteName.mashierToAlMansoor2.ordinal()] = new Route(
|
||||||
|
new Street[]{
|
||||||
//Optimal for Almansoor
|
stdStreet[StreetNames.STREET1.ordinal()],
|
||||||
stdRoutes[RouteName.mashierToAlMansoor3.ordinal()] = new Route(
|
stdStreet[StreetNames.STREET2.ordinal()],
|
||||||
new Street[]{
|
stdStreet[StreetNames.KUDAY.ordinal()],
|
||||||
stdStreet[StreetNames.STREET1.ordinal()],
|
stdStreet[StreetNames.IBRAHIM_ALKHALIL.ordinal()]//TODO: [8]is actually half of ibrahim khalil.
|
||||||
stdStreet[StreetNames.FOURTH_HIGHWAY.ordinal()],
|
},District.ALMANSOOR, Mashier.ARAFAT);
|
||||||
stdStreet[StreetNames.IBRAHIM_ALKHALIL.ordinal()]
|
|
||||||
},District.ALMANSOOR, Mashier.ARAFAT);
|
//Optimal for Almansoor
|
||||||
|
stdRoutes[RouteName.mashierToAlMansoor3.ordinal()] = new Route(
|
||||||
stdRoutes[RouteName.mashierToAlAzizi1.ordinal()] = new Route(
|
new Street[]{
|
||||||
new Street[]{
|
stdStreet[StreetNames.STREET1.ordinal()],
|
||||||
stdStreet[StreetNames.STREET1.ordinal()],
|
stdStreet[StreetNames.FOURTH_HIGHWAY.ordinal()],
|
||||||
stdStreet[StreetNames.STREET2.ordinal()],
|
stdStreet[StreetNames.IBRAHIM_ALKHALIL.ordinal()]
|
||||||
stdStreet[StreetNames.KA_STREET.ordinal()]
|
},District.ALMANSOOR, Mashier.ARAFAT);
|
||||||
},District.ALAZIZIYA, Mashier.ARAFAT);
|
|
||||||
|
stdRoutes[RouteName.mashierToAlAzizi1.ordinal()] = new Route(
|
||||||
}
|
new Street[]{
|
||||||
|
stdStreet[StreetNames.STREET1.ordinal()],
|
||||||
private static void fillBusesToList() {
|
stdStreet[StreetNames.STREET2.ordinal()],
|
||||||
for (Campaign camp : listOfCampaigns) {
|
stdStreet[StreetNames.KA_STREET.ordinal()]
|
||||||
listOfVehicles.addAll(camp.getVehicles());
|
},District.ALAZIZIYA, Mashier.ARAFAT);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private static void fillBusesToList() {
|
||||||
* Generates 'noise' cars to be used in streets
|
for (Campaign camp : listOfCampaigns) {
|
||||||
* @param numberOfCars
|
listOfVehicles.addAll(camp.getVehicles());
|
||||||
* @return Array of 70% Sedans and 30% SUVs
|
}
|
||||||
*/
|
}
|
||||||
private static CivilVehicle[] generateCivilVehicles(int numberOfCars) {
|
|
||||||
|
/**
|
||||||
CivilVehicle[] cars = new CivilVehicle[numberOfCars];
|
* Generates 'noise' cars to be used in streets
|
||||||
int sedans = (int)(numberOfCars*0.7);
|
* @param numberOfCars
|
||||||
int SUVs = numberOfCars - sedans;
|
* @return Array of 70% Sedans and 30% SUVs
|
||||||
|
*/
|
||||||
for (int i = 0; i < sedans; i++) {
|
private static CivilVehicle[] generateCivilVehicles(int numberOfCars) {
|
||||||
cars[i] = new Sedan(getRandom(25,32)/10);
|
|
||||||
}
|
CivilVehicle[] cars = new CivilVehicle[numberOfCars];
|
||||||
|
int sedans = (int)(numberOfCars*0.7);
|
||||||
for (int i = 0; i < SUVs; i++) {
|
int SUVs = numberOfCars - sedans;
|
||||||
try {
|
|
||||||
cars[sedans+i] = new SUV(getRandom(35,45)/10);
|
for (int i = 0; i < sedans; i++) {
|
||||||
}
|
cars[i] = new Sedan(getRandom(25,32)/10);
|
||||||
catch (IndexOutOfBoundsException ex) {
|
}
|
||||||
break;
|
|
||||||
}
|
for (int i = 0; i < SUVs; i++) {
|
||||||
}
|
try {
|
||||||
return cars;
|
cars[sedans+i] = new SUV(getRandom(35,45)/10);
|
||||||
}
|
}
|
||||||
|
catch (IndexOutOfBoundsException ex) {
|
||||||
public static PDate getTimeManager() {
|
break;
|
||||||
return timeManager;
|
}
|
||||||
}
|
}
|
||||||
|
return cars;
|
||||||
/**
|
}
|
||||||
* Find shortest path without respect to traffic
|
|
||||||
* @param campaign
|
public static PDate getTimeManager() {
|
||||||
* @return
|
return timeManager;
|
||||||
*/
|
}
|
||||||
private static Route getShortestRoute(Campaign campaign) {
|
|
||||||
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
/**
|
||||||
Route route = null;
|
* Find shortest path without respect to traffic
|
||||||
double min = Double.MAX_VALUE;
|
* @param campaign
|
||||||
for (Route r : routes) {
|
* @return
|
||||||
if (r.getTotalLength() < min) {
|
*/
|
||||||
min = r.getTotalLength();
|
private static Route getShortestRoute(Campaign campaign) {
|
||||||
route = r;
|
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
|
||||||
}
|
Route route = null;
|
||||||
}
|
double min = Double.MAX_VALUE;
|
||||||
return route;
|
for (Route r : routes) {
|
||||||
}
|
if (r.getTotalLength() < min) {
|
||||||
|
min = r.getTotalLength();
|
||||||
/**
|
route = r;
|
||||||
* Find routes that connect to a certain district.
|
}
|
||||||
* @param district
|
}
|
||||||
* @return Array of routes that connect to 'district'
|
return route;
|
||||||
*/
|
}
|
||||||
private static Route[] getRoutesToDistrict(District district) {
|
|
||||||
ArrayList<Route> routes = new ArrayList<>();
|
/**
|
||||||
for (Route route : stdRoutes) {
|
* Find routes that connect to a certain district.
|
||||||
if (route.getHotelArea() == district) {
|
* @param district
|
||||||
routes.add(route);
|
* @return Array of routes that connect to 'district'
|
||||||
}
|
*/
|
||||||
}
|
private static Route[] getRoutesToDistrict(District district) {
|
||||||
Route[] routesArray = new Route[routes.size()];
|
ArrayList<Route> routes = new ArrayList<>();
|
||||||
return routes.toArray(routesArray);
|
for (Route route : stdRoutes) {
|
||||||
}
|
if (route.getHotelArea() == district) {
|
||||||
|
routes.add(route);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
Route[] routesArray = new Route[routes.size()];
|
||||||
|
return routes.toArray(routesArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
public class SUV extends CivilVehicle {
|
public class SUV extends CivilVehicle {
|
||||||
|
|
||||||
private final int TIME_TO_FIX = 15; //in minutes
|
private final int TIME_TO_FIX = 15; //in minutes
|
||||||
|
public final int MAX_FORWARD = 1300;
|
||||||
|
|
||||||
public SUV(double vehicleSize){
|
public SUV(double vehicleSize){
|
||||||
super(vehicleSize);
|
super(vehicleSize);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
public class Sedan extends CivilVehicle {
|
public class Sedan extends CivilVehicle {
|
||||||
|
|
||||||
private final int TIME_TO_FIX = 15; //in minutes
|
private final int TIME_TO_FIX = 15; //in minutes
|
||||||
|
public final int MAX_FORWARD = 1500; // Meter/Min
|
||||||
|
|
||||||
public Sedan(double vehicleSize){
|
public Sedan(double vehicleSize){
|
||||||
super(vehicleSize);
|
super(vehicleSize);
|
||||||
|
@ -5,12 +5,14 @@ public class Street {
|
|||||||
private double length;
|
private double length;
|
||||||
private int numberOfLanes;
|
private int numberOfLanes;
|
||||||
private ArrayList<Vehicle> vehicles;
|
private ArrayList<Vehicle> vehicles;
|
||||||
|
private StreetNames name;
|
||||||
|
|
||||||
|
|
||||||
public Street(double length, int numberOfLanes) {
|
public Street(double length, int numberOfLanes, StreetNames name) {
|
||||||
vehicles = new ArrayList<>();
|
vehicles = new ArrayList<>();
|
||||||
setLength(length);
|
setLength(length);
|
||||||
setNumberOfLanes(numberOfLanes);
|
setNumberOfLanes(numberOfLanes);
|
||||||
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLength(double length) {
|
private void setLength(double length) {
|
||||||
@ -44,6 +46,10 @@ public class Street {
|
|||||||
return vehicles;
|
return vehicles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StreetNames getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
public double capcity() {
|
public double capcity() {
|
||||||
double totalLength = length * numberOfLanes;
|
double totalLength = length * numberOfLanes;
|
||||||
double totalLenthofCar=0;
|
double totalLenthofCar=0;
|
||||||
@ -70,5 +76,4 @@ public class Street {
|
|||||||
vehicles.add(vehicle);
|
vehicles.add(vehicle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ public abstract class Vehicle {
|
|||||||
public void setRoute(Route route) {
|
public void setRoute(Route route) {
|
||||||
this.route = route;
|
this.route = route;
|
||||||
this.currentStreetIndex = 0;
|
this.currentStreetIndex = 0;
|
||||||
|
this.currentStreet = route.getStreets()[0];
|
||||||
this.route.getStreets()[0].addVehicle(this);//TODO: [9]street might not add if capacity is low
|
this.route.getStreets()[0].addVehicle(this);//TODO: [9]street might not add if capacity is low
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,12 +43,22 @@ public abstract class Vehicle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void moveForward(double distance) {
|
public void moveForward(double distance) {
|
||||||
if (moving && !arrivedToDest){
|
if (!moving && !arrivedToDest) moving = true;
|
||||||
|
if (!arrivedToDest){
|
||||||
if (isAtEndOfCurrentStreet()) {
|
if (isAtEndOfCurrentStreet()) {
|
||||||
moveToNextStreet();
|
moveToNextStreet();
|
||||||
//this.currentLocation += distance;
|
//this.currentLocation += distance;
|
||||||
}
|
}
|
||||||
else this.currentLocation += distance;
|
else {
|
||||||
|
double dToNext = getDistanceToNextVehicle();
|
||||||
|
double trafficFactor = getCurrentStreet().getPercentRemainingCapacity() / 100.0;
|
||||||
|
if (dToNext == -1 ) {
|
||||||
|
this.currentLocation += distance * trafficFactor;
|
||||||
|
} else if (dToNext < distance){//TODO after I wake up
|
||||||
|
this.currentLocation += distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +71,7 @@ public abstract class Vehicle {
|
|||||||
this.currentStreetIndex++;
|
this.currentStreetIndex++;
|
||||||
Street nextStreet;
|
Street nextStreet;
|
||||||
try { nextStreet = this.getRoute().getStreets()[currentStreetIndex]; }
|
try { nextStreet = this.getRoute().getStreets()[currentStreetIndex]; }
|
||||||
catch (IndexOutOfBoundsException e) { this.arrivedToDest = true; return;}
|
catch (IndexOutOfBoundsException e) { this.arrivedToDest = true; this.moving = false; return;}
|
||||||
if (nextStreet.canTakeVehicles(this)){
|
if (nextStreet.canTakeVehicles(this)){
|
||||||
this.currentStreet = nextStreet;
|
this.currentStreet = nextStreet;
|
||||||
this.currentLocation = 0;
|
this.currentLocation = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user