diff --git a/extractor.cpp b/extractor.cpp index c4416e4..ad6ebec 100644 --- a/extractor.cpp +++ b/extractor.cpp @@ -11,7 +11,7 @@ namespace battleship{ using namespace vb01; using namespace gameBase; - Extractor::Extractor(Player *player, int id, Vector3 pos, Quaternion rot, int buildStatus, ResourceDeposit *rd) : Structure(player, id, pos, rot, buildStatus){ + Extractor::Extractor(Player *player, int id, Vector3 pos, Quaternion rot, int buildStatus, ResourceDeposit *rd) : Structure(player, id, pos, rot, buildStatus), drawRate(10){ if(!rd){ vector deposits; @@ -56,11 +56,7 @@ namespace battleship{ } void Extractor::draw(){ - if(canDraw()){ - deposit->decrementAmmount(); - lastDrawTime = getTime(); - } + deposit->decrementAmmount(); + lastDrawTime = getTime(); } - - bool Extractor::canDraw(){return vb01::getTime() - lastDrawTime > drawRate && deposit->getAmmount() > 0;} } diff --git a/extractor.h b/extractor.h index bec4483..3540f30 100644 --- a/extractor.h +++ b/extractor.h @@ -14,13 +14,14 @@ namespace battleship{ ~Extractor(); void update(); void draw(); + bool canDraw(){return vb01::getTime() - lastDrawTime > drawRate;} + inline ResourceDeposit* getDeposit(){return deposit;} private: int drawRate; vb01::s64 lastDrawTime = 0; vb01::Node *ammountBackground = nullptr, *ammountForeground = nullptr; ResourceDeposit *deposit = nullptr; - bool canDraw(); }; } diff --git a/resourceRover.cpp b/resourceRover.cpp index 5333937..0482a23 100644 --- a/resourceRover.cpp +++ b/resourceRover.cpp @@ -1,4 +1,5 @@ #include "resourceRover.h" +#include "resourceDeposit.h" #include "map.h" #include "player.h" #include "extractor.h" @@ -43,7 +44,7 @@ namespace battleship{ refineries.push_back((Structure*)unit); } - nearestExtractor = getClosestUnit(extractors); + nearestExtractor = (Extractor*)getClosestUnit(extractors); nearestRefinery = getClosestUnit(refineries); if(!nearestExtractor){ @@ -52,12 +53,16 @@ namespace battleship{ } if(nearestExtractor && nearestExtractor->getPos().getDistanceFrom(pos) <= minDist){ - if(canLoad()){ - ((Extractor*)nearestExtractor)->draw(); - load++; - lastLoadTime = getTime(); + ResourceDeposit *deposit = nearestExtractor->getDeposit(); + + if(canLoad() && deposit->getAmmount() > 0){ + if(nearestExtractor->canDraw()){ + nearestExtractor->draw(); + load++; + lastLoadTime = getTime(); + } } - else if(load == capacity && nearestRefinery) + else if((deposit->getAmmount() == 0 || load == capacity) && nearestRefinery) preparePathpoints(order, nearestRefinery->getPos(), true); } else if(nearestRefinery && nearestRefinery->getPos().getDistanceFrom(pos) <= minDist){ diff --git a/resourceRover.h b/resourceRover.h index 2d07b5c..c795f3e 100644 --- a/resourceRover.h +++ b/resourceRover.h @@ -7,6 +7,7 @@ namespace battleship{ class Structure; + class Extractor; class ResourceRover : public Vehicle{ public: @@ -21,7 +22,8 @@ namespace battleship{ vb01::s64 lastLoadTime = 0; int load = 0, capacity, loadRate; - Unit *nearestExtractor = nullptr, *nearestRefinery = nullptr; + Extractor *nearestExtractor = nullptr; + Unit *nearestRefinery = nullptr; vb01::Node *loadBackground = nullptr, *loadForeground = nullptr; }; }