public void update() {
		maybeAddPher();
		move(map.getSurround(xy));
		if(map.home(xy)) {
			state = AntState.Searching;
			incr = state.getIncrement();
			dir = Ordinal.getRandomDirection();
		}else {
			Food f = map.getFood(xy);
			if(f != null && f.canTake() && carrying < CARRY_LIMIT) {
				carrying += f.take();
				if(state != AntState.Returning) {
					dir = dir.flipDirection();
				}
				state = AntState.Returning;
				incr = state.getIncrement();
			}
		}
		if(carrying > 0.0f && 
				(map.home(xy) || 
						state == AntState.Returning && steps < 0)) {
			incr = Math.max(1.0f, incr * 0.8f);
			dir = Ordinal.getRandomDirection();
			state = AntState.Searching;
			steps = 0;
			map.addFood((Point) xy.clone(),carrying);
			carrying = 0;
		}
	}