void Sistema::despegar(const Drone & d) { Posicion pos; bool seMueve = false; /*Siempre que se hace una consulta sobre parcelas vecinas es importante ver que esten en rango.*/ if (enRangoCultivableLibre(d.posicionActual().x - 1, d.posicionActual().y)){ pos.x = d.posicionActual().x - 1; pos.y = d.posicionActual().y; seMueve = true; } else if (enRangoCultivableLibre(d.posicionActual().x, d.posicionActual().y + 1)){ pos.x = d.posicionActual().x; pos.y = d.posicionActual().y + 1; seMueve = true; } else if (enRangoCultivableLibre(d.posicionActual().x, d.posicionActual().y - 1)){ pos.x = d.posicionActual().x; pos.y = d.posicionActual().y - 1; seMueve = true; } else if (enRangoCultivableLibre(d.posicionActual().x + 1, d.posicionActual().y)){ pos.x = d.posicionActual().x + 1; pos.y = d.posicionActual().y; seMueve = true; } unsigned int i = 0; while (i < _enjambre.size()){ if (seMueve && (_enjambre[i].id() == d.id())){ _enjambre[i].moverA(pos); } i++; } }
void Sistema::volarYSensar(const Drone & d) { unsigned int i = 0; int indiceDrone; /*Hay que buscar un dron equivalente al que nos dieron en el enjambre del sistema. Por invariante y requiere deberia siempre encontrarlo y ser unico. */ while (i < enjambreDrones().size()){ if (enjambreDrones()[i].id() == d.id()){ /*Como queremos modificarlo tenemos que usar _enjambre, no enjambreDeDrones() porque enajambreDeDrones() devuelve un const. Asignamos por referencia para poder modificar el drone en cuestion*/ indiceDrone = i; } i++; } Drone& drone = _enjambre[indiceDrone]; int posX = drone.posicionActual().x; int posY = drone.posicionActual().y; bool seMovio = false; Posicion targetPos; if (drone.bateria() >0 && enRangoCultivableLibre(posX + 1, posY)){ targetPos.x = posX + 1; targetPos.y = posY; drone.moverA(targetPos); drone.setBateria(drone.bateria() - 1); seMovio = true; } else if (drone.bateria() >0 && enRangoCultivableLibre(posX - 1, posY)){ targetPos.x = posX - 1; targetPos.y = posY; drone.moverA(targetPos); drone.setBateria(drone.bateria() - 1); seMovio = true; } else if (drone.bateria() >0 && enRangoCultivableLibre(posX, posY + 1)){ targetPos.x = posX; targetPos.y = posY + 1; drone.moverA(targetPos); drone.setBateria(drone.bateria() - 1); seMovio = true; } else if (drone.bateria() >0 && enRangoCultivableLibre(posX, posY - 1)){ targetPos.x = posX; targetPos.y = posY - 1; drone.moverA(targetPos); drone.setBateria(d.bateria() - 1); seMovio = true; } /*Si la parcela esta noSensada se le puede poner cualquier verdura (eh, entienden? Cualquier verdura para cultivar!)*/ if(seMovio == true){ modificarCultivoYDrone(targetPos, drone); } }
bool Drone::operator==(const Drone & otroDrone) const { if (id() != otroDrone.id()) return false; if (bateria() != otroDrone.bateria()) return false; if (enVuelo() != otroDrone.enVuelo()) return false; if (vueloRealizado() != otroDrone.vueloRealizado()) return false; if (!mismosProductos(productosDisponibles(), otroDrone.productosDisponibles())) return false; if (!(posicionActual() == otroDrone.posicionActual())) return false; return true; }