TID AdapterEx::AdaptTargetEntity(EntityClassType p_targetType, const PlanStepParameters& p_parameters) { GamePlayer *pPlayer; GameEntity *pEntity; vector<TID> entityIds; TID adaptedTargetId = INVALID_TID; double bestDistance = numeric_limits<double>::max(); CellFeature *pTarGetCellFeatureFromWorldPosition = new CellFeature(p_parameters); pPlayer = g_Game->Enemy(); assert(pPlayer); pPlayer->Entities(entityIds); for (size_t i = 0, size = entityIds.size(); i < size; ++i) { pEntity = pPlayer->GetEntity(entityIds[i]); assert(pEntity); if (p_targetType == pEntity->Type()) { CellFeature *pCandidateCellFearure = g_Game->Map()->GetCellFeatureFromWorldPosition(pEntity->GetPosition()); double dist = pTarGetCellFeatureFromWorldPosition->GetDistance(pCandidateCellFearure); if (dist <= bestDistance) { bestDistance = dist; adaptedTargetId = pEntity->Id(); } } } return adaptedTargetId; }
IStrategizer::TID IStrategizer::AdapterEx::AdaptResourceForGathering(ResourceType p_resourceType, const PlanStepParameters& p_parameters) { GamePlayer *pPlayer; GameEntity *pEntity; vector<TID> entityIds; TID adaptedResourceId = INVALID_TID; double bestDistance = numeric_limits<double>::max(); CellFeature *pResourceCellFeatureFromWorldPosition = new CellFeature(p_parameters); DefinitionCrossMapping pDefinitionCrossMapping = DefinitionCrossMapping::Instance(); pPlayer = g_Game->GetPlayer(PLAYER_Neutral); assert(pPlayer); pPlayer->Entities(entityIds); TID fetchedResourceId; if(pDefinitionCrossMapping.ResourceMapping.TryGetBySecond(p_resourceType, fetchedResourceId) == true) { for (size_t i = 0, size = entityIds.size(); i < size; ++i) { if (fetchedResourceId == entityIds[i]) { pEntity = pPlayer->GetEntity(entityIds[i]); assert(pEntity); CellFeature *pCandidateCellFearure = g_Game->Map()->GetCellFeatureFromWorldPosition(pEntity->GetPosition()); double dist = pResourceCellFeatureFromWorldPosition->GetDistance(pCandidateCellFearure); if (dist <= bestDistance) { bestDistance = dist; adaptedResourceId = pEntity->Id(); } } } } return adaptedResourceId; }