Example #1
0
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;
}
Example #2
0
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;
}