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
TID AdapterEx::AdaptBuildingForTraining(EntityClassType p_traineeType)
{
    // Gets first building to train entity from type p_traineeType
    // If no empty building is found, last non-idle building will be returned
    GamePlayer            *pPlayer;
    GameEntity            *pEntity;
    vector<TID>            entityIds;
    EntityClassType        trainerType;
    TID                    id = INVALID_TID;

    trainerType = g_Game->Self()->TechTree()->SourceEntity(p_traineeType);
    pPlayer = g_Game->Self();
    assert(pPlayer);

    pPlayer->Entities(entityIds);

    for (size_t i = 0, size = entityIds.size(); i < size; ++i)
    {
        pEntity = pPlayer->GetEntity(entityIds[i]);
        assert(pEntity);

        if (trainerType == pEntity->Type())
        {
            id = pEntity->Id();

            if (pEntity->Attr(EOATTR_State) == OBJSTATE_Idle)
            {
                id = pEntity->Id();
                break;
            }
        }
    }

    return id;
}
GameEntity* InfluenceMap::GetObj(RegObjEntry* p_pObjEntry)
{
    GameEntity *pGameObj = nullptr;
    GamePlayer *pPlayer = nullptr;

    pPlayer = g_Game->GetPlayer(p_pObjEntry->OwnerId);
    _ASSERTE(pPlayer);

    pGameObj = pPlayer->GetEntity(p_pObjEntry->ObjId);
    _ASSERTE(pGameObj);

    return pGameObj;
}
Example #4
0
TID AdapterEx::GetEntityObjectId(EntityClassType p_entityType,const RankedStates& p_rankedStates)
{
    /*
    Entity Object Adaptation Algorithm:
    IF player has Type THEN
    return the entity with the best state (based on input ranked states)
    ELSE
    adaptation failed and return nullptr entity Id
    */
    GamePlayer     *pPlayer;
    GameEntity     *pEntity;
    vector<TID>    entityIds;
    EntityClassType     entityTypeId;
    ObjectStateType     curEntityState;
    TID      adaptedEntityId = INVALID_TID;
    vector<UnitEntry>    validEntities;
    if(!IsRankedStatesInitialized)
    initializePredefinedRankedStates();

    pPlayer = g_Game->Self();
    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_entityType == pEntity->Type() && !pEntity->IsLocked())
        {
            curEntityState = (ObjectStateType)pEntity->Attr(EOATTR_State);

            if (IsValidEntityState(curEntityState,p_rankedStates))
                validEntities.push_back(MakePair(pEntity->Id(), curEntityState));
        }
    }

    if (!validEntities.empty())
    {
        sort(validEntities.begin(), validEntities.end(), [p_rankedStates](UnitEntry leftEntity,UnitEntry rightEntity)
        {
            return GetEntityStateIndex(leftEntity.second,p_rankedStates) < GetEntityStateIndex(rightEntity.second,p_rankedStates);
        });
        adaptedEntityId = validEntities[0].first;
    }

    return adaptedEntityId;
}
Example #5
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;
}
Example #6
0
IStrategizer::TID IStrategizer::AdapterEx::GetEntityObjectId(EntityClassType p_entityType )
{
    GamePlayer            *pPlayer;
    GameEntity            *pEntity;
    vector<TID>            entityIds;
    EntityClassType        entityTypeId;
    TID                    adaptedEntityId = INVALID_TID;

    pPlayer = g_Game->Self();
    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_entityType == pEntity->Type() && !pEntity->IsLocked())
        {
            return pEntity->Id();
        }
    }
    return adaptedEntityId;
}