//---------------------------------------------------------------------------------------------- int BuildActionEx::ExecuteAux(unsigned long p_cycles) { EntityClassType builderType; EntityClassType buildingType; GameEntity *pGameBuilder; AbstractAdapter *pAdapter = g_OnlineCaseBasedPlanner->Reasoner()->Adapter(); int ret; builderType = g_Game->Self()->GetWorkerType(); buildingType = (EntityClassType)_params[PARAM_BuildingClassId]; // Initialize build state _buildStarted = false; // Adapt build position assert(pAdapter); _buildPosition = pAdapter->AdaptPositionForBuilding(buildingType); // Adapt builder _builderId = pAdapter->AdaptWorkerForBuild(); // Issue build order pGameBuilder = g_Game->Self()->GetEntity(_builderId); assert(pGameBuilder); pGameBuilder->Lock(); ret = pGameBuilder->Build(buildingType, _buildPosition.X, _buildPosition.Y); return ret; }
bool BuildActionEx::Execute(RtsGame& game, const WorldClock& p_clock) { EntityClassType buildingType = (EntityClassType)_params[PARAM_EntityClassId]; GameEntity *pGameBuilder; AbstractAdapter *pAdapter = g_OnlineCaseBasedPlanner->Reasoner()->Adapter(); bool bOk = false; //// Adapt builder //_builderId = pAdapter->AdaptBuilder(buildingType, true); //// Adapt build position //_buildArea = pAdapter->AdaptPositionForBuilding(buildingType); // Adapt builder // Adapt build position auto adaptedParams = pAdapter->AdaptBuilderAndPosition(buildingType, true); _builderId = adaptedParams.first; _buildArea = adaptedParams.second; if (_builderId != INVALID_TID) { // Initialize build state _buildStarted = false; // Issue build order pGameBuilder = game.Self()->GetEntity(_builderId); LogInfo("Builder=%s was selected to execute build", pGameBuilder->ToString().c_str()); pGameBuilder->Lock(this); // Special buildings (for example addons) are not associated with build positions so no need to assert in that case. if (!game.GetEntityType(buildingType)->P(TP_IsSpecialBuilding)) { _ASSERTE(!_buildArea.IsNull()); _buildArea.Lock(this); } _ASSERTE(!_requiredResources.IsNull()); _requiredResources.Lock(this); bOk = pGameBuilder->Build(buildingType, _buildArea.Pos()); if (bOk) _buildIssued = true; } return bOk; }
bool BuildActionEx::ExecuteAux(RtsGame& game, const WorldClock& p_clock) { EntityClassType buildingType; GameEntity *pGameBuilder; AbstractAdapter *pAdapter = g_OnlineCaseBasedPlanner->Reasoner()->Adapter(); bool bOk = false; // Adapt builder _builderId = pAdapter->GetEntityObjectId(game.Self()->GetWorkerType(),AdapterEx::WorkerStatesRankVector); if (_builderId != INVALID_TID) { buildingType = (EntityClassType)_params[PARAM_EntityClassId]; // Initialize build state _buildStarted = false; // Adapt build position assert(pAdapter); _buildArea = pAdapter->AdaptPositionForBuilding(buildingType); // Issue build order pGameBuilder = game.Self()->GetEntity(_builderId); assert(pGameBuilder); bOk = pGameBuilder->Build(buildingType, _buildArea.Pos()); if (bOk) { _buildIssued = true; pGameBuilder->Lock(this); assert(!_buildArea.IsNull()); _buildArea.Lock(this); assert(!_requiredResources.IsNull()); _requiredResources.Lock(this); } } return bOk; }