aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Week14 Route 66/src/OO14route66/Car.java3
-rw-r--r--Week14 Route 66/src/com/camilstaps/route66/Overviewer.java46
2 files changed, 30 insertions, 19 deletions
diff --git a/Week14 Route 66/src/OO14route66/Car.java b/Week14 Route 66/src/OO14route66/Car.java
index 0058d8d..97d7b33 100644
--- a/Week14 Route 66/src/OO14route66/Car.java
+++ b/Week14 Route 66/src/OO14route66/Car.java
@@ -35,6 +35,7 @@ public class Car {
* - choose a random speed
* - set right location, direction and colour
* - create new Driver object
+ * - say hello to the Overviewer
*
* @param number of the car
* @param model the model the car is in
@@ -48,6 +49,7 @@ public class Car {
colour = carColours[number % carColours.length];
driver = new Driver(this);
this.model = model;
+ Overviewer.getInstance().hello(this);
}
/**
@@ -95,7 +97,6 @@ public class Car {
*/
public void step() {
location = getNewLocation();
- Overviewer.getInstance().setLocation(this, location);
model.update();
}
diff --git a/Week14 Route 66/src/com/camilstaps/route66/Overviewer.java b/Week14 Route 66/src/com/camilstaps/route66/Overviewer.java
index 762ded1..844f40c 100644
--- a/Week14 Route 66/src/com/camilstaps/route66/Overviewer.java
+++ b/Week14 Route 66/src/com/camilstaps/route66/Overviewer.java
@@ -7,23 +7,26 @@
package com.camilstaps.route66;
import OO14route66.Car;
-import java.util.HashMap;
-import java.util.Map;
+import OO14route66.Model;
/**
- *
- * @author pieterkoopman
+ * The Overviewer (always only one instance) tells Drivers when they can drive
+ *
+ * @author Camil Staps
*/
public class Overviewer {
-
+
+ /**
+ * This is a singleton
+ */
private static Overviewer instance;
- Map<Car, Integer> locations;
-
- protected Overviewer() {
- locations = new HashMap<>();
- }
+ Car[] cars = new Car[Model.NUMBEROFCARS];
+ /**
+ * This is a singleton
+ * @return the instance
+ */
public static Overviewer getInstance() {
if (instance == null) {
instance = new Overviewer();
@@ -31,17 +34,24 @@ public class Overviewer {
return instance;
}
- public synchronized void setLocation(Car car, int location) {
- if (locations.containsKey(car)) {
- locations.remove(car);
- }
- locations.put(car, location);
+ /**
+ * Add a car to the list of cars
+ * @param car
+ */
+ public synchronized void hello(Car car) {
+ cars[car.getNumber()] = car;
}
+ /**
+ * Check if a location is safe for a car to go to. This should always be
+ * checked by a driver before actually driving.
+ * @param car
+ * @param requested_location
+ * @return
+ */
public synchronized boolean isSafeLocation(Car car, int requested_location) {
- for (Map.Entry<Car, Integer> location : locations.entrySet()) {
- Car that_car = location.getKey();
- if (that_car != car &&
+ for (Car that_car : cars) {
+ if (that_car != null && that_car != car &&
that_car.getDirection() == car.getDirection() &&
that_car.getLocation() > requested_location &&
that_car.getLocation() < requested_location + Car.CARLENGTH + Car.MINCARSPACE) {