/* * Copyright (c) 2015 Camil Staps */ package com.camilstaps.route66; import OO14route66.Car; import OO14route66.Model; import java.util.Random; /** * A Driver takes care its car doesn't collide * @author Camil Staps */ public class Driver implements Runnable { private final Car car; private final Model model; private final Random r; private boolean running, waitingToCross = false; private int delay; public Driver(Car car, Model model) { this.car = car; this.model = model; r = new Random(); } /** * Set running to false to disable driving altogether * @param value */ public void setRunning(boolean value) { running = value; } public void setWaitingToCross(boolean value) { waitingToCross = value; } public boolean getWaitingToCross() { return waitingToCross; } /** * Set some approximate delay for {@link Driver#pause()}. The actual delay * is still pseudorandom. * @param value */ public void setDelay(int value) { delay = value; } @Override @SuppressWarnings("empty-statement") public void run() { running = true; while (true) { while (!running || !model.isSafeLocation(car, car.getNewLocation())); car.step(); pause(); } } /** * Pause for some pseudorandom time */ protected void pause() { try { int bonus = 0; if (Math.abs((System.currentTimeMillis() / 1000) % Model.NUMBEROFCARS - car.getNumber()) < 2) { bonus = -50; } Thread.sleep(Math.abs(r.nextInt(50) + delay + bonus)); } catch (InterruptedException ex) {} } }