VisitResult ResourceUnitFinder::Visit(TerrainTraversal &terrainTraversal, const Vec2i &pos, const Vec2i &from) { if (!worker.Player->AiEnabled && !Map.Field(pos)->playerInfo.IsExplored(*worker.Player)) { return VisitResult_DeadEnd; } CUnit *mine = Map.Field(pos)->UnitCache.find(res_finder); if (mine && mine != *resultMine && MineIsUsable(*mine)) { ResourceUnitFinder::ResourceUnitFinder_Cost cost; cost.SetFrom(*mine, deposit, check_usage); if (cost < bestCost) { *resultMine = mine; if (cost.IsMin()) { return VisitResult_Finished; } bestCost = cost; } } if (CanMoveToMask(pos, movemask)) { // reachable if (terrainTraversal.Get(pos) < maxRange) { return VisitResult_Ok; } else { return VisitResult_DeadEnd; } } else { // unreachable return VisitResult_DeadEnd; } }
VisitResult NearReachableTerrainFinder::Visit(TerrainTraversal &terrainTraversal, const Vec2i &pos, const Vec2i &from) { //Wyrmgus start // if (!player.AiEnabled && !Map.Field(pos)->playerInfo.IsExplored(player)) { if (!Map.Field(pos)->playerInfo.IsExplored(player)) { //Wyrmgus end return VisitResult_DeadEnd; } // Look if found what was required. if (CanMoveToMask(pos, movemask)) { if (resPos) { *resPos = from; } return VisitResult_Finished; } if (Map.Field(pos)->CheckMask(resmask)) { // reachable if (terrainTraversal.Get(pos) <= maxDist) { return VisitResult_Ok; } else { return VisitResult_DeadEnd; } } else { // unreachable return VisitResult_DeadEnd; } }
VisitResult UnitFinder::Visit(TerrainTraversal &terrainTraversal, const Vec2i &pos, const Vec2i &from) { if (!player.AiEnabled && !Map.Field(pos)->playerInfo.IsExplored(player)) { return VisitResult_DeadEnd; } // Look if found what was required. CUnit *unit = FindUnitAtPos(pos); if (unit) { *unitP = unit; return VisitResult_Finished; } if (CanMoveToMask(pos, movemask)) { // reachable if (terrainTraversal.Get(pos) <= maxDist) { return VisitResult_Ok; } else { return VisitResult_DeadEnd; } } else { // unreachable return VisitResult_DeadEnd; } }