public boolean isPerceived(Feeder fr) {
        // if food has been eaten, the feeder can't eat it again
        if (!active) return false;
        // if the food is already in the feeder's observed list, it has already
        // responded to it.
        if (fr.getObservedFood().contains(this)) return false;
        double distance = currentLocation.distance(fr.getCurrentLocation());
        // if the feeder is blind, it won't see anything, it will have to be at
        //  the food's location so that it can touch and/or smell it.
        if (fr.getEffectiveEyesight() == 0) {
            if (distance <= fr.getEffectiveSpeed()) {
                // we'll use the feeder's intelligence to see if it notices
                //  the object.
                //if (fr.isFood(this))
                    return true;
            }
        } else {
            if (distance <= 0 || distance <= fr.getEffectiveEyesight()) {
                 // check if food is located within cone of perception
                if (isInConeOfPerception(fr, this.getCenter()))
                {
                    // need to check intelligence to see if the feeder thinks
                    // this object is a food.
//                    if (fr.isFood(this))
                        return true;
                }
                else
                {
                    //check if food surrounds cone of perception in case the
                    // feeder isn't facing the food but is inside the food's circle
                    if (isBleedOver(fr))
                    {
                        // need to check intelligence to see if the feeder thinks
                        // this object is a food.
//                        if (fr.isFood(this))
                            return true;
                    }
                }
            }
        }

        // if all else fails, return false
        return false;
    }