Bazaar developer reference

CvFractal::getHeight(int, int)

Defined in
CvFractal.cpp, line 283
Class
CvFractal
Hook name
CivHooks::CvFractal_getHeight

Hooks

static bool BeforeCvFractal_getHeight(CvFractal* self, int iX, int iY, int& result);static void AfterCvFractal_getHeight(CvFractal* self, int iX, int iY, int& result);static int ReplaceCvFractal_getHeight(int (*original)(CvFractal*, int, int), CvFractal* self, int iX, int iY);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::CvFractal_getHeight::ID, CIV_HOOK_BEFORE, (void*)&BeforeCvFractal_getHeight);host->RegisterHook(host->pluginIndex, CivHooks::CvFractal_getHeight::ID, CIV_HOOK_AFTER, (void*)&AfterCvFractal_getHeight);host->RegisterHook(host->pluginIndex, CivHooks::CvFractal_getHeight::ID, CIV_HOOK_REPLACE, (void*)&ReplaceCvFractal_getHeight);

Code

283int CvFractal::getHeight(int iX, int iY)284{285	int iErrX = 0;286	int iErrY = 0;287	int iSum = 0;288	int iHeight = 0;289	int iLowX = 0;290	int iLowY = 0;291292	CvAssertMsg(0 <= iX && iX < m_iXs, "iX out of range");293	if(!(0 <= iX && iX < m_iXs)) return 0;294295	CvAssertMsg(0 <= iY && iY < m_iYs, "iY out of range");296	if(!(0 <= iY && iY < m_iYs)) return 0;297298	iLowX = ((m_iXInc * iX) / FLOAT_PRECISION);299	if(iLowX > m_iFracX - 1)300	{301		iLowX = m_iFracX - 1;	// clamp so that iLowX+1 doesn't overrun array302	}303304	iLowY = ((m_iYInc * iY) / FLOAT_PRECISION);305	if(iLowY > m_iFracY - 1)306	{307		iLowY = m_iFracY - 1;	// clamp so that iLowY+1 doesn't overrun array308	}309	iErrX = ((m_iXInc * iX) - (iLowX * FLOAT_PRECISION));310	iErrY = ((m_iYInc * iY) - (iLowY * FLOAT_PRECISION));311312	if(iLowX < 0 || iLowX > FRACTAL_MAX_DIMS) return 0; // array is defined as FRACTAL_MAX_DIMS+1313	if(iLowY < 0 || iLowY > FRACTAL_MAX_DIMS) return 0; // array is defined as FRACTAL_MAX_DIMS+1314315	iSum = 0;316	iSum += ((FLOAT_PRECISION - iErrX) * (FLOAT_PRECISION - iErrY) * m_aaiFrac[iLowX    ][iLowY    ]);317	iSum += ((iErrX) * (FLOAT_PRECISION - iErrY) * m_aaiFrac[iLowX + 1][iLowY    ]);318	iSum += ((FLOAT_PRECISION - iErrX) * (iErrY) * m_aaiFrac[iLowX    ][iLowY + 1]);319	iSum += ((iErrX) * (iErrY) * m_aaiFrac[iLowX + 1][iLowY + 1]);320321	iSum /= (FLOAT_PRECISION * FLOAT_PRECISION);322323	iHeight = range(iSum, 0, 255);324325	if(m_iFlags & FRAC_PERCENT)326	{327		return ((iHeight * 100) >> 8);328	}329	else330	{331		return iHeight;332	}333}

Calls

Called by