public void think(double dt) {
		super.think(dt);

		if (built == false) {
			if (percent_complete > 1)
				built = true;
			return;
		}

		if (gatherx == -1 || gathery == -1) {
			int[] index = resource_grid.getClosestResource(point.x, point.y,
					600);
			if (index != null) {
				gatherx = (int) resource_grid.getX(index[0]);
				gathery = (int) resource_grid.getY(index[1]);
			}
		} else {
			int gatheri = resource_grid.getI(gatherx);
			int gatherj = resource_grid.getJ(gathery);
			if (resource_grid.voxels[gatheri][gatherj] == 0) {
				gatherx = -1;
				gathery = -1;
			}
		}

		elapsed_time += dt;
		if (elapsed_time > FIRE_RATE[level]) {
			fire_at = null;
			fire_at = grid
					.getClosestZombie(point.x, point.y, FIRE_RANGE[level]);
			if (fire_at != null)
				fire_at.hurt(FIRE_DAMAGE[level]);
			elapsed_time = 0;
		}
	}