int CvMapGenerator::getRiverValueAtPlot(CvPlot* pPlot) { CvPlot* pAdjacentPlot; CvRandom riverRand; int iSum; int iI; FAssert(pPlot != NULL); long result = 0; CyPlot kPlot = CyPlot(pPlot); CyArgsList argsList; argsList.add(gDLL->getPythonIFace()->makePythonObject(&kPlot)); if (gDLL->getPythonIFace()->callFunction(gDLL->getPythonIFace()->getMapScriptModule(), "getRiverAltitude", argsList.makeFunctionArgs(), &result)) { if (!gDLL->getPythonIFace()->pythonUsingDefaultImpl()) // Python override { if (result >= 0) { return result; } else { FAssertMsg(false, "python getRiverAltitude() must return >= 0"); } } } iSum = result; iSum += ((NUM_PLOT_TYPES - pPlot->getPlotType()) * 20); for (iI = 0; iI < NUM_DIRECTION_TYPES; iI++) { pAdjacentPlot = plotDirection(pPlot->getX_INLINE(), pPlot->getY_INLINE(), ((DirectionTypes)iI)); if (pAdjacentPlot != NULL) { iSum += (NUM_PLOT_TYPES - pAdjacentPlot->getPlotType()); } else { iSum += (NUM_PLOT_TYPES * 10); } } riverRand.init((pPlot->getX_INLINE() * 43251267) + (pPlot->getY_INLINE() * 8273903)); iSum += (riverRand.get(10, "River Rand")); return iSum; }
void shuffleArray(int* piShuffle, int iNum, CvRandom& rand) { int iI, iJ; for(iI = 0; iI < iNum; iI++) { piShuffle[iI] = iI; } for(iI = 0; iI < iNum; iI++) { iJ = (rand.get(iNum - iI, NULL) + iI); if(iI != iJ) { int iTemp = piShuffle[iI]; piShuffle[iI] = piShuffle[iJ]; piShuffle[iJ] = iTemp; } } }