private void SitDown() {
   Do("Being seated. Going to table");
   for (Table t : host.tables) {
     if (t.getOccupant() == this) {
       this.table = t.num;
       customerGui.DoGoToSeat(t.num);
       break;
     }
   }
   waiter.msgImReadyToOrder(this);
 }
 private void EatFood() {
   customerGui.setText(choice);
   Do("Eating Food");
   timer.schedule(
       new TimerTask() {
         public void run() {
           print("Done eating");
           event = AgentEvent.doneEating;
           stateChanged();
         }
       },
       getHungerLevel() * 1000);
 }
 private void OrderFood() {
   choice = name.toLowerCase();
   int count = 0;
   while (!menu.menuList.contains(choice)
       || unavailableFood.contains(choice)
       || (menu.menuItems.get(choice) > wallet.getAmt() && !name.equalsIgnoreCase("bad"))) {
     if (count == menu.menuList.size()) {
       state = AgentState.Leaving;
       eatingSuccess = false;
       LeaveRestaurant();
       return;
     }
     //	Random rand = new Random(System.currentTimeMillis());
     //	int det = Math.abs(rand.nextInt()%(menu.menuList.size()));
     choice = menu.menuList.get(count++);
     Do("" + choice);
   }
   waiter.msgHereIsMyChoice(this, choice);
   customerGui.setText(choice + "?");
 }
 private void LeaveRestaurant() {
   Do("Leaving.");
   customerGui.setText("");
   customerGui.DoExitRestaurant();
 }
 private void LeaveTableToGoPay() {
   Do("Going to pay");
   waiter.msgLeavingTable(this);
   customerGui.setText("check");
   customerGui.DoGoToCashier();
 }
  /** Scheduler. Determine what action is called for, and do it. */
  protected boolean pickAndExecuteAnAction() {
    //	CustomerAgent is a finite state machine
    try {
      if (state == AgentState.DoingNothing && event == AgentEvent.gotHungry) {
        if (host.isFull() && name.equalsIgnoreCase("wait")) {
          customerGui.setEnabled();
          customerGui.DoExitRestaurant();
          return true;
        }
        state = AgentState.Waiting;
        GoToRestaurant();
        return true;
      }
      if (state == AgentState.Waiting && event == AgentEvent.followHost) {
        state = AgentState.BeingSeated;
        SitDown();
        return true;
      }
      if (state == AgentState.BeingSeated && event == AgentEvent.seated) {
        state = AgentState.Seated;

        return true;
      }
      if (state == AgentState.Seated && event == AgentEvent.orderFood) {
        state = AgentState.Ordered;
        OrderFood();
        return true;
      }
      if (state == AgentState.Ordered && event == AgentEvent.orderTaken) {
        state = AgentState.WaitingForOrder;
        return true;
      }
      if (state == AgentState.WaitingForOrder && event == AgentEvent.foodArrived) {
        state = AgentState.Eating;
        EatFood();
        return true;
      }

      if (state == AgentState.Eating && event == AgentEvent.doneEating) {
        state = AgentState.WaitingForCheck;
        customerGui.setText("");
        waiter.msgDoneEating(this);
        return true;
      }
      if (state == AgentState.WaitingForCheck && event == AgentEvent.rcvdCheck) {
        state = AgentState.Paying;
        LeaveTableToGoPay();
        return true;
      }
      if (state == AgentState.Paying && event == AgentEvent.arrivedAtCashier) {
        host.cashier.msgHereIsMoney(this, wallet.getAmt());
        return true;
      }
      if (state == AgentState.Paying && event == AgentEvent.doDishes) {
        DoDishes();
        return true;
      }
      if (state == AgentState.Paying && event == AgentEvent.donePaying) {
        state = AgentState.Leaving;
        eatingSuccess = true;
        LeaveRestaurant();
        return true;
      }
      if (state == AgentState.Leaving && event == AgentEvent.doneLeaving) {
        state = AgentState.DoingNothing;
        //				person.msgDoneEating(eatingSuccess, wallet.getAmt()); // COMMENT THIS OUT IF THERE
        // AREN'T REAL PEOPLE IN THE RESTAURANT
        waiter.msgDoneLeaving(this);
        return true;
      }
      return false;
    } catch (ConcurrentModificationException e) {
      return false;
    }
  }