Beispiel #1
0
int World::loadSurroundingColumns(v3d_t pos) {
  // this will follow a 'square spiral' pattern starting at the
  // given pos
  int numColumnsLoaded = 0;
  v3di_t regionIndex = WorldUtil::getRegionIndex (pos);

  int maxCount = mWorldMap->mXWidth * mWorldMap->mZWidth;
  static int nextAdd[4][2] = {
    { +1, 0 },
    { 0, +1 },
    { -1, 0 },
    { 0, -1 }};
  int direction = 0;
  int runLength = 1;
  int twosCounter = 0;

  // check under the player
  if (!mWorldMap->isColumnLoaded(regionIndex.x, regionIndex.z)) {
    loadColumn(regionIndex.x, regionIndex.z, true);
  }

  for (int count = 1; count < maxCount; /*count++*/ ) {
    for (int i = 0; i < runLength; i++) {
      // move to the next column region
      regionIndex.x += nextAdd[direction][0];
      regionIndex.z += nextAdd[direction][1];

      // check it
      if (!mWorldMap->isColumnLoaded(regionIndex.x, regionIndex.z)) {
        numColumnsLoaded += loadColumn(regionIndex.x, regionIndex.z, true);

//        v3di_print("loaded", regionIndex);

        if (++numColumnsLoaded > 1) {
          return numColumnsLoaded;
        }
      }
      count++;
      if (count == maxCount) {
        return 0;
      }
    }

    direction = (direction + 1) % 4;
    if (++twosCounter == 2) {
      runLength++;
      twosCounter = 0;
    }
  }

  return numColumnsLoaded;
}
Beispiel #2
0
void WMLoadBrowserColumnZero(WMBrowser * bPtr)
{
	if (!bPtr->flags.loaded) {
		/* create column 0 */
		WMAddBrowserColumn(bPtr);

		loadColumn(bPtr, 0);

		/* make column 0 visible */
		scrollToColumn(bPtr, 0, True);

		bPtr->flags.loaded = 1;
	}
}
Beispiel #3
0
int World::loadColumn(int xIndex, int zIndex, const int *heightMap) {
  int columnIndex = mWorldMap->getColumnIndexByRegionCoords (xIndex, zIndex);

  int numBlocks = loadColumn(mWorldMap->mColumns[columnIndex], xIndex, zIndex, heightMap, false);

  mWorldMap->mColumns[columnIndex].mNeedShadowVolume = true;
  mWorldMap->mColumns[columnIndex].mNeedLightingApplied = false;
  mWorldMap->mColumns[columnIndex].mNeedVisibility = false;
  mWorldMap->mColumns[columnIndex].mNeedDisplayList = false;

  // prevent fluids from starting...
  // FIXME: this is a hack to compensate for a crappy
  // fluid sim
  mWorldMap->removeFromChangedList(columnIndex);

  return numBlocks;
}
Beispiel #4
0
static void listCallback(void *self, void *clientData)
{
	WMBrowser *bPtr = (WMBrowser *) clientData;
	WMList *lPtr = (WMList *) self;
	WMListItem *item;
	int i, selNo;
	static WMListItem *oldItem = NULL;
	static int oldSelNo = 0;

	item = WMGetListSelectedItem(lPtr);
	selNo = WMGetArrayItemCount(WMGetListSelectedItems(lPtr));

	if (oldItem == NULL || oldItem != item || oldSelNo != selNo) {
		for (i = 0; i < bPtr->columnCount; i++) {
			if (lPtr == bPtr->columns[i])
				break;
		}
		assert(i < bPtr->columnCount);

		bPtr->selectedColumn = i;

		/* columns at right must be cleared */
		removeColumn(bPtr, i + 1);
		/* open directory */
		if (item && item->isBranch && selNo == 1) {
			WMAddBrowserColumn(bPtr);
		}
		if (bPtr->usedColumnCount < bPtr->maxVisibleColumns)
			i = 0;
		else
			i = bPtr->usedColumnCount - bPtr->maxVisibleColumns;
		scrollToColumn(bPtr, i, True);
		if (item && item->isBranch && selNo == 1) {
			loadColumn(bPtr, bPtr->usedColumnCount - 1);
		}
	}

	/* call callback for click */
	if (bPtr->action)
		(*bPtr->action) (bPtr, bPtr->clientData);

	oldItem = item;
	oldSelNo = selNo;
}
Beispiel #5
0
int World::loadColumn(int xIndex, int zIndex, bool doOutcroppings) {
  int columnIndex = mWorldMap->getColumnIndexByRegionCoords(xIndex, zIndex);

  if (xIndex == mWorldMap->mColumns[columnIndex].mWorldIndex.x &&
    zIndex == mWorldMap->mColumns[columnIndex].mWorldIndex.z) {
    printf ("World::loadColumn() - tried to load a column that is already loaded\n");
    return 0;
  }

  mWorldMap->clearColumn(columnIndex);

  int numBlocks;

  // try to load from the inactive columns
  if (mWorldMap->mInactiveColumnManager.loadFromInactiveColumns(xIndex, zIndex, mWorldMap->mColumns[columnIndex]) == 0) {
//    printf ("loaded column from InactiveColumnManager\n");

    numBlocks = 0;
  }
  else {
    // generate this column fresh from the Periodics
    int worldX = xIndex * WORLD_CHUNK_SIDE;
    int worldZ = zIndex * WORLD_CHUNK_SIDE;

    int heightMap[(WORLD_CHUNK_SIDE + 2) * (WORLD_CHUNK_SIDE + 2)];

    for (int k = 0; k < (WORLD_CHUNK_SIDE + 2); k++) {
      for (int i = 0; i < (WORLD_CHUNK_SIDE + 2); i++) {
        heightMap[i + (k * (WORLD_CHUNK_SIDE + 2))] = mPeriodics.getTerrainHeight(worldX + i - 1, worldZ + k - 1);
      }
    }

    numBlocks = loadColumn(mWorldMap->mColumns[columnIndex], xIndex, zIndex, heightMap, doOutcroppings);
  }

  // prevent fluids from starting...
  // FIXME: this is a hack to compensate for a crappy
  // fluid sim
  mWorldMap->removeFromChangedList(columnIndex);

  return numBlocks;
}
Beispiel #6
0
char *WMSetBrowserPath(WMBrowser * bPtr, char *path)
{
	int i;
	char *str;
	char *tmp, *retPtr = NULL;
	int item;
	WMListItem *listItem;

	/* WMLoadBrowserColumnZero must be call first */
	if (!bPtr->flags.loaded) {
		return False;
	}

	removeColumn(bPtr, 1);

	WMSelectListItem(bPtr->columns[0], -1);
	WMSetListPosition(bPtr->columns[0], 0);

	i = 0;
	str = wstrdup(path);
	tmp = strtok(str, bPtr->pathSeparator);
	while (tmp) {
		/* select it in the column */
		item = WMFindRowOfListItemWithTitle(bPtr->columns[i], tmp);
		if (item < 0) {
			retPtr = &path[(int)(tmp - str)];
			break;
		}
		WMSelectListItem(bPtr->columns[i], item);
		WMSetListPosition(bPtr->columns[i], item);

		listItem = WMGetListItem(bPtr->columns[i], item);
		if (!listItem || !listItem->isBranch) {
			break;
		}

		/* load next column */
		WMAddBrowserColumn(bPtr);

		loadColumn(bPtr, i + 1);

		tmp = strtok(NULL, bPtr->pathSeparator);

		i++;
	}

	wfree(str);

	for (i = bPtr->usedColumnCount - 1; (i > -1) && !WMGetListSelectedItem(bPtr->columns[i]); i--) ;

	bPtr->selectedColumn = i;

	if (bPtr->columnCount < bPtr->maxVisibleColumns) {
		int i = bPtr->maxVisibleColumns - bPtr->columnCount;
		int curUsedColumnCount = bPtr->usedColumnCount;
		bPtr->usedColumnCount = bPtr->columnCount;
		while (i--) {
			WMAddBrowserColumn(bPtr);
		}
		bPtr->usedColumnCount = curUsedColumnCount;
	}

	scrollToColumn(bPtr, bPtr->columnCount - bPtr->maxVisibleColumns, True);

	return retPtr;
}