protected void goToRestaurant() { int restNumber; if (!goToWork || jobBuilding == null) { while (true) { restNumber = (int) (Math.random() * 7); if (restNumber >= 6) { bigState = BigState.goHome; return; } else if ((cityData.restaurants.get(restNumber)).isOpen()) break; } destinationBuilding = cityData.restaurants.get(restNumber); } else { destinationBuilding = jobBuilding; } if (destinationBuilding != currentBuilding) { System.out.println("Going to restaurant as " + desiredRole); GoToDestination(); personGui.DoGoToBuilding(destinationBuilding.buildingNumber); try { atBuilding.acquire(); } catch (InterruptedException e) { // Auto-generated catch block e.printStackTrace(); } currentBuilding = destinationBuilding; } Building restaurant = destinationBuilding; if (goToWork && !desiredRole.equals("Customer")) { if (desiredRole.equals("Host") && !restaurant.hasHost()) { personGui.DoGoIntoBuilding(); currentBuilding.EnterBuilding(this, desiredRole); return; } else if (restaurant.openToEmployee()) { if (desiredRole.equals("Waiter") || desiredRole.equals("Cook")) { personGui.DoGoIntoBuilding(); currentBuilding.EnterBuilding(this, desiredRole); return; } else if (desiredRole.equals("Cashier") && !restaurant.hasCashier()) { personGui.DoGoIntoBuilding(); currentBuilding.EnterBuilding(this, desiredRole); return; } } } // This is only reached if the person is unemployed if (desiredRole.equals("Customer") && restaurant.isOpen()) { personGui.DoGoIntoBuilding(); currentBuilding.EnterBuilding(this, desiredRole); bigState = BigState.waiting; return; } bigState = BigState.goHome; homeState = HomeState.onCouch; }