Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 9, 2017, 2:46:20 PM (7 years ago)
Author:
patricwi
Message:

merged HUD branch to trunk

Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/modules/pickup/PickupManager.cc

    r11099 r11353  
    4141#include "network/Host.h"
    4242#include "network/NetworkFunctionIncludes.h"
     43#include "core/input/KeyBinderManager.h"    //for keybinding
     44#include "core/input/KeyBinder.h"           //for keybinding
     45#include "core/command/ConsoleCommandIncludes.h"
    4346
    4447#include "infos/PlayerInfo.h"
     
    4851#include "CollectiblePickup.h"
    4952#include "PickupRepresentation.h"
     53#include "overlays/hud/HUDPickupSystem.h"
    5054
    5155namespace orxonox
     
    6367
    6468    RegisterAbstractClass(PickupManager).inheritsFrom<PickupListener>();
     69
     70    SetConsoleCommand("useUnusePickup", &PickupManager::useUnusePickup).addShortcut().setActive(true);
    6571
    6672    /**
     
    260266        assert(pickup);
    261267
     268        for (HUDPickupSystem* hud : ObjectList<HUDPickupSystem>())
     269            pickupSystem = hud;
     270       
    262271        if(!GameMode::isMaster()) // If this is neither standalone nor the server.
    263272            return;
     
    283292        if(pickedUp) // If the Pickupable has changed to picked up, it is added to the required lists.
    284293        {
    285             index = this->getPickupIndex(); // Ge a new identifier (index) for the Pickupable.
     294            index = this->getPickupIndex(); // Get a new identifier (index) for the Pickupable.
    286295            // Add the Pickupable to the indexes_ and pickups_ lists.
    287296            this->indexes_[pickup] = index;
    288297            this->pickups_[index] = pickup;
     298
     299            this->picks.push_back(pickup);
     300
     301            if(pickupSystem)
     302                pickupSystem->updatePickupList(picks, indexes_);
     303           
    289304        }
    290305        else // If it was dropped, it is removed from the required lists.
     
    294309            index = it->second;
    295310
    296             // Remove the Pickupable from the indexes_ and pickups_ list.
    297             this->indexes_.erase(it);
    298             this->pickups_.erase(index);
     311            this->indexes_.erase(pickup);
     312            this->pickups_.erase(index); //set to null, so that can be identified as free slot by getPickupIndex()
     313
     314
     315            this->picks.erase(std::remove(this->picks.begin(), this->picks.end(), pickup), this->picks.end()); //remove pickup from vector
     316
     317            if(pickupSystem)
     318                pickupSystem->removePickup(pickup);
    299319        }
    300320
     
    323343
    324344    }
     345
     346    //This function is called by the command line or by the key binding
     347    //it uses or unuses the pickup, depending on its current state
     348    //or drops it (depends what you comment/uncomment)
     349    void PickupManager::useUnusePickup(uint32_t index)
     350    {
     351        PickupManager& manager = PickupManager::getInstance();
     352
     353        if(!manager.pickups_.count(index)) return; //if pickup is no longer here, dont do anything
     354
     355        Pickupable* pickup=manager.pickups_.find(index)->second;
     356        if(pickup==nullptr)
     357        {
     358            return;                       //pickup does not exist
     359        }
     360
     361        //if the pickup should be dropped upon key press
     362        manager.dropPickup(index);
     363
     364        //if the pickup should be used/unused upon key press
     365
     366        // if(pickup->isUsed())
     367        //     manager.usePickup(index, false);
     368        // else
     369        //     manager.usePickup(index, true);
     370    }
     371
    325372
    326373    /**
     
    402449            Pickupable* pickupable = this->pickups_.find(pickup)->second;
    403450            if(pickupable != nullptr)
     451            {
    404452                pickupable->drop();
     453
     454            }
    405455        }
    406456        // If we're neither server nor standalone we drop the pickup by calling dropPickupNetworked() of the PickupManager on the server.
     
    495545    /**
    496546    @brief
    497         Get a new index for a Pickupable.
    498         This will work as long as the number of Pickupables that are picked up is sufficiently small and as long as they don't exist forever.
     547        Get a new index between 0 and 9 for a Pickupable.
     548        If all slots are occupied, the Pickupable in the first slot will be dropped.
    499549    @return
    500550        Returns the new index.
     
    502552    uint32_t PickupManager::getPickupIndex(void)
    503553    {
    504         if(this->pickupHighestIndex_ == uint32_t(~0x0)-1) // If we've reached the highest possible number, we wrap around.
    505             this->pickupHighestIndex_ = 0;
    506         return this->pickupHighestIndex_++;
     554        //check if there are free slots available
     555
     556        for(uint32_t i=0; i<10; i++)
     557        {
     558            if(!pickups_.count(i)) return i;
     559        }
     560        //all slots are full and we have to drop sth
     561        orxout(internal_info, context::pickups) << "everything was full and we have now dropped the first element" << endl;
     562        this->dropPickup(0);
     563        return 0;
    507564    }
    508565
Note: See TracChangeset for help on using the changeset viewer.