Bazaar developer reference

getRotatedPosition(int, int, DirectionTypes, int &, int &)

Defined in
CvGameCoreUtils.cpp, line 1318
Hook name
CivHooks::getRotatedPosition

Hooks

static bool BeforegetRotatedPosition(int inHexspaceX, int inHexspaceY, DirectionTypes rotatedDirection, int& outRotatedX, int& outRotatedY);static void AftergetRotatedPosition(int inHexspaceX, int inHexspaceY, DirectionTypes rotatedDirection, int& outRotatedX, int& outRotatedY);static void ReplacegetRotatedPosition(void (*original)(int, int, DirectionTypes, int&, int&), int inHexspaceX, int inHexspaceY, DirectionTypes rotatedDirection, int& outRotatedX, int& outRotatedY);CivRegisterBefore<CivHooks::getRotatedPosition>(host, &BeforegetRotatedPosition);CivRegisterAfter<CivHooks::getRotatedPosition>(host, &AftergetRotatedPosition);CivRegisterReplace<CivHooks::getRotatedPosition>(host, &ReplacegetRotatedPosition);

Code

1318void getRotatedPosition(int inHexspaceX, int inHexspaceY, DirectionTypes rotatedDirection, int& outRotatedX, int& outRotatedY)1319{1320	outRotatedX = inHexspaceX;1321	outRotatedY = inHexspaceY;13221323	// early out if the facing is NE as that is the base rotation that the data is supposed to be stored in1324	// also early out if we are looking at the pivot1325	if(DIRECTION_NORTHEAST == rotatedDirection || (inHexspaceX == 0 && inHexspaceY == 0))1326	{1327		return;1328	};13291330	// find the ring that this is on1331	int ring = hexDistance(inHexspaceX, inHexspaceY);13321333	// find the nearest spike direction1334	DirectionTypes spikeDirection = hexspaceSpikeDirection(inHexspaceX, inHexspaceY);13351336	int spikeX = 0;1337	int spikeY = 0;1338	switch(spikeDirection)1339	{1340	case DIRECTION_NORTHEAST:1341	{1342		spikeY = ring;1343	}1344	break;1345	case DIRECTION_EAST:1346	{1347		spikeX = ring;1348	}1349	break;1350	case DIRECTION_SOUTHEAST:1351	{1352		spikeX = ring;1353		spikeY = -ring;1354	}1355	break;1356	case DIRECTION_SOUTHWEST:1357	{1358		spikeY = -ring;1359	}1360	break;1361	case DIRECTION_WEST:1362	{1363		spikeX = -ring;1364	}1365	break;1366	case DIRECTION_NORTHWEST:1367	{1368		spikeX = -ring;1369		spikeY = ring;1370	}1371	break;1372	}13731374	// find the offset of this point from the spike1375	int offsetOnThisRing = hexDistance(spikeX-inHexspaceX,spikeY-inHexspaceY);13761377	// find the rotated spike1378	int newSpikeX = 0;1379	int newSpikeY = 0;1380	DirectionTypes newSpikeDirection = (DirectionTypes)((spikeDirection + rotatedDirection) % (NUM_DIRECTION_TYPES));1381	switch(newSpikeDirection)1382	{1383	case DIRECTION_NORTHEAST:1384	{1385		newSpikeY = ring;1386		// add in the offset in the appropriate direction1387		outRotatedX = newSpikeX+offsetOnThisRing;1388		outRotatedY = newSpikeY-offsetOnThisRing;1389	}1390	break;1391	case DIRECTION_EAST:1392	{1393		newSpikeX = ring;1394		// add in the offset in the appropriate direction1395		outRotatedX = newSpikeX;1396		outRotatedY = newSpikeY-offsetOnThisRing;1397	}1398	break;1399	case DIRECTION_SOUTHEAST:1400	{1401		newSpikeX = ring;1402		newSpikeY = -ring;1403		// add in the offset in the appropriate direction1404		outRotatedX = newSpikeX-offsetOnThisRing;1405		outRotatedY = newSpikeY;1406	}1407	break;1408	case DIRECTION_SOUTHWEST:1409	{1410		newSpikeY = -ring;1411		// add in the offset in the appropriate direction1412		outRotatedX = newSpikeX-offsetOnThisRing;1413		outRotatedY = newSpikeY+offsetOnThisRing;1414	}1415	break;1416	case DIRECTION_WEST:1417	{1418		newSpikeX = -ring;1419		// add in the offset in the appropriate direction1420		outRotatedX = newSpikeX;1421		outRotatedY = newSpikeY+offsetOnThisRing;1422	}1423	break;1424	case DIRECTION_NORTHWEST:1425	{1426		newSpikeX = -ring;1427		newSpikeY = ring;1428		// add in the offset in the appropriate direction1429		outRotatedX = newSpikeX+offsetOnThisRing;1430		outRotatedY = newSpikeY;1431	}1432	break;1433	}1434}

Calls