Hooks
static bool BeforeestimateDirection(int iDX, int iDY, DirectionTypes& result);static void AfterestimateDirection(int iDX, int iDY, DirectionTypes& result);static DirectionTypes ReplaceestimateDirection(DirectionTypes (*original)(int, int), int iDX, int iDY);CivRegisterBefore<CivHooks::estimateDirection>(host, &BeforeestimateDirection);CivRegisterAfter<CivHooks::estimateDirection>(host, &AfterestimateDirection);CivRegisterReplace<CivHooks::estimateDirection>(host, &ReplaceestimateDirection);
Code
137DirectionTypes estimateDirection(int iDX, int iDY)138{139 const int displacementSize = 6;140 // NE E SE SW W NW141 static double displacements[displacementSize][2] = { {0.5, 0.866025}, {1, 0}, {0.5, -0.866025}, {-0.5, -0.866025}, {-1, 0}, {-0.5, -0.866025}};142 double maximum = 0;143 int maximumIndex = -1;144 for(int i=0; i<displacementSize; i++)145 {146 double dotProduct = iDX * displacements[i][0] + iDY * displacements[i][1];147 if(dotProduct > maximum)148 {149 maximum = dotProduct;150 maximumIndex = i;151 }152 }153154 return (DirectionTypes) maximumIndex;155}