diff --git a/resourceRover.cpp b/resourceRover.cpp index 1c979b8..d946f4b 100644 --- a/resourceRover.cpp +++ b/resourceRover.cpp @@ -1,15 +1,29 @@ #include "resourceRover.h" #include "map.h" #include "player.h" +#include "activeGameState.h" + +#include namespace battleship{ using namespace std; using namespace vb01; + using namespace gameBase; ResourceRover::ResourceRover(Player *player, int id, Vector3 pos, Quaternion rot) : Vehicle(player, id, pos, rot), capacity(300), - loadRate(100) {} + loadRate(10) + { + Vector2 size = Vector2(lenHpBar, 10); + loadBackground = Unit::createBar(Vector2::VEC_ZERO, size, Vector4(0, 0, 0, 1)); + loadForeground = Unit::createBar(Vector2::VEC_ZERO, size, Vector4(0, 1, 1, 1)); + } + + ResourceRover::~ResourceRover(){ + removeBar(loadForeground); + removeBar(loadBackground); + } void ResourceRover::supply(Order order){ float minDist = .6 * Map::getSingleton()->getCellSize().x; @@ -34,7 +48,7 @@ namespace battleship{ load++; lastLoadTime = getTime(); } - else if(!canLoad() && nearestRefinery) + else if(load == capacity && nearestRefinery) preparePathpoints(order, nearestRefinery->getPos()); } else if(nearestRefinery->getPos().getDistanceFrom(pos) <= minDist){ @@ -42,12 +56,24 @@ namespace battleship{ load--; lastLoadTime = getTime(); } - else if(!canUnload() && nearestExtractor) + else if(load == 0 && nearestExtractor) preparePathpoints(order, nearestExtractor->getPos()); } } } + void ResourceRover::update(){ + Vehicle::update(); + + ActiveGameState *activeState = (ActiveGameState*)GameManager::getSingleton()->getStateManager()->getAppStateByType(AppStateType::ACTIVE_STATE); + Player *mainPlayer = (activeState ? activeState->getPlayer() : nullptr); + + vector selectingPlayers = getSelectingPlayers(); + bool mainPlayerSelecting = (activeState && find(selectingPlayers.begin(), selectingPlayers.end(), mainPlayer) != selectingPlayers.end()); + + Unit::displayUnitStats(loadForeground, loadBackground, load, capacity, mainPlayer == player && mainPlayerSelecting, Vector2(0, -10)); + } + Unit* ResourceRover::getClosestUnit(vector units){ if(units.empty()) return nullptr; diff --git a/resourceRover.h b/resourceRover.h index 9a5b281..84d10f7 100644 --- a/resourceRover.h +++ b/resourceRover.h @@ -9,6 +9,8 @@ namespace battleship{ class ResourceRover : public Vehicle{ public: ResourceRover(Player*, int, vb01::Vector3, vb01::Quaternion); + ~ResourceRover(); + void update(); private: void supply(Order); Unit* getClosestUnit(std::vector); @@ -18,6 +20,7 @@ namespace battleship{ vb01::s64 lastLoadTime = 0; int load = 0, capacity, loadRate; Unit *nearestExtractor = nullptr, *nearestRefinery = nullptr; + vb01::Node *loadBackground = nullptr, *loadForeground = nullptr; }; }