// // Created by martial.simon on 2/26/25. // #include "provider.hh" #include #include "nurturer.hh" #include "queen.hh" void Provider::work() { if (stage_ != DevelopmentStage::ADULT) return; food_level_ += food_stock_ - static_cast(food_stock_); food_stock_ -= food_stock_ - static_cast(food_stock_); harvestFood(); Worker::work(); } void Provider::transferFood(Nurturer& nurturer) { if (food_stock_ < 1) return; nurturer.increment_food_stock_by(static_cast(food_stock_)); food_stock_ -= static_cast(food_stock_); std::cout << "Transferring food.\n"; } void Provider::harvestFood() { float harvest = luck_; std::cout << "Harvested " << harvest << " food.\n"; food_stock_ += harvest; food_level_ -= (harvest - static_cast(harvest)) * 0.5; } bool Provider::communicate(std::weak_ptr wk_receiver) { if (wk_receiver.lock() == nullptr) return false; if (!Ant::communicate(wk_receiver)) return false; std::cout << "Provider initiates communication.\n"; auto p = dynamic_cast(wk_receiver.lock().get()); if (p) { transferFood(*p); } return true; }