private void tryToCookIt(final Order o) {
                EnumItemType food = o.choice;

                if(mRole.mItemInventory.get(food) < mItemThreshold) {
                    if(!mRole.mHasCreatedOrder.get(food)) {
                    	mRole.mItemsDesired.put(food,baseNeed);
                    }
                }
                
                if(mRole.mItemInventory.get(food) == 0) {
                        print("Out of choice " + food);
                        o.waiter.msgOutOfFood(o.choice.toString(), o.table);
                        orders.remove(o);
                        if(!mRole.mHasCreatedOrder.get(food)) {
                        	mRole.mItemsDesired.put(food,baseNeed);
                        }
                        return;
                }
                
                print("Cooking " + o.choice);
                o.s = OrderState.Cooking;

                for(int i=1;i<=NGRILLS;i++) {
                        if(!grills.get(i)) {
                                o.n = i;
                                grills.put(i, true);
                                break;
                        }
                }
                if(o.n == 0)
                        o.n = 1;
                
                DoGoToGrill(o);
                DoAddFoodItem(o);
                cookingTimer.schedule(new TimerTask() {        //runs a new timer to "cook" the food
                        public void run() {
                                msgOrderDone(o);
                        }
                },mCookTimes.get(food));
                mRole.mItemInventory.put(food,mRole.mItemInventory.get(food)-1);
        }