public void think(double dt) {
		switch (mode) {
		case WALK:
			VillagerEntity closest_villager = grid.getClosestVillager(point.x,
					point.y, ZOMBIE_FOLLOW_RADIUS);
			TowerEntity closest_tower = grid.getClosestTower(point.x, point.y,
					ZOMBIE_FOLLOW_RADIUS);

			Entity closest_entity = null;
			if (closest_tower != null) {
				closest_entity = closest_tower;
			} else if (closest_villager != null) {
				closest_entity = closest_villager;
			}

			if (closest_entity != null) {
				dx = closest_entity.point.x - point.x;
				dy = closest_entity.point.y - point.y;
			}

			if (closest_entity != null
					&& closest_entity.point.distance(point) < ZOMBIE_ATTACK_RADIUS) {
				switchMode(ATTACK);
				closest_entity.health -= ZOMBIE_DAMAGE;
			}

			break;
		case ATTACK:
			elapsed_time += dt;
			if (elapsed_time > ATTACK_TIME) {
				switchMode(WALK);
				elapsed_time = 0;
			}
			break;
		}

		super.think(dt);

	}