Bazaar developer reference

RouteValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)

Defined in
CvAStar.cpp, line 2387
Hook name
CivHooks::RouteValid

Hooks

static bool BeforeRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceRouteValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::RouteValid>(host, &BeforeRouteValid);CivRegisterAfter<CivHooks::RouteValid>(host, &AfterRouteValid);CivRegisterReplace<CivHooks::RouteValid>(host, &ReplaceRouteValid);

Code

2385/// Route path finder - check validity of a coordinate2386/// This function does not require the global Tactical Analysis Map.2387int RouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2388{2389	CvPlot* pNewPlot;23902391	if(parent == NULL)2392	{2393		return TRUE;2394	}23952396	int iFlags = finder->GetInfo();2397	PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);2398	pNewPlot = GC.getMap().plotUnchecked(node->m_iX, node->m_iY);23992400	CvPlayer& kPlayer = GET_PLAYER(ePlayer);2401	if((iFlags & MOVE_ROUTE_ALLOW_UNEXPLORED) == 0 && !(pNewPlot->isRevealed(kPlayer.getTeam())))2402	{2403		return FALSE;2404	}24052406	if(kPlayer.GetPlayerTraits()->IsMoveFriendlyWoodsAsRoad())2407	{2408		if(pNewPlot->getOwner() == ePlayer)2409		{2410			if(pNewPlot->getFeatureType() == FEATURE_FOREST || pNewPlot->getFeatureType() == FEATURE_JUNGLE)2411			{2412				return TRUE;2413			}2414		}2415	}24162417	RouteTypes eRouteType = pNewPlot->getRouteType();2418	if(eRouteType == NO_ROUTE)2419	{2420		return FALSE;2421	}24222423	if(pNewPlot->IsRoutePillaged())2424	{2425		return FALSE;2426	}24272428	if(!pNewPlot->IsFriendlyTerritory(ePlayer))2429	{2430		PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2431		if(ePlotOwnerPlayer != NO_PLAYER)2432		{2433			PlayerTypes eMajorPlayer = NO_PLAYER;2434			PlayerTypes eMinorPlayer = NO_PLAYER;2435			CvPlayer& kPlotOwner = GET_PLAYER(ePlotOwnerPlayer);2436			if(kPlayer.isMinorCiv() && !kPlotOwner.isMinorCiv())2437			{2438				eMajorPlayer = ePlotOwnerPlayer;2439				eMinorPlayer = ePlayer;2440			}2441			else if(kPlotOwner.isMinorCiv() && !kPlayer.isMinorCiv())2442			{2443				eMajorPlayer = ePlayer;2444				eMinorPlayer = ePlotOwnerPlayer;2445			}2446			else2447			{2448				return FALSE;2449			}24502451			if(!GET_PLAYER(eMinorPlayer).GetMinorCivAI()->IsActiveQuestForPlayer(eMajorPlayer, MINOR_CIV_QUEST_ROUTE))2452			{2453				return FALSE;2454			}2455		}2456	}24572458	if(finder->GetInfo() & MOVE_ANY_ROUTE)2459	{2460#if defined(MOD_EVENTS_CITY_CONNECTIONS)2461		// Cities always have the best route, which permits "harbour to harbour" connections before The Wheel2462		if(pNewPlot->isCity())2463		{2464			return TRUE;2465		}2466#endif24672468		// if the player can't build2469		if(kPlayer.getBestRoute() == NO_ROUTE)2470		{2471			return FALSE;2472		}24732474		if(eRouteType != NO_ROUTE)2475		{2476			return TRUE;2477		}2478	}2479	else2480	{2481		int iRoute = iFlags & 0xFF00;2482		iRoute = iRoute >> 8;2483		iRoute = iRoute - 1;2484		RouteTypes eRequiredRoute = (RouteTypes)(iRoute);2485		if(eRouteType == eRequiredRoute)2486		{2487			return TRUE;2488		}2489	}24902491	return FALSE;2492}

Calls

Called by