Changeset 7163 for code/trunk/src/modules/pickup
- Timestamp:
- Aug 11, 2010, 8:55:13 AM (14 years ago)
- Location:
- code/trunk
- Files:
-
- 26 edited
- 6 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/modules/pickup/CMakeLists.txt
r6711 r7163 1 1 SET_SOURCE_FILES(PICKUP_SRC_FILES 2 CollectiblePickup.cc 2 3 DroppedPickup.cc 3 4 Pickup.cc … … 17 18 PickupManager.h 18 19 PickupRepresentation.h 19 DEFINE_SYMBOL20 "PICKUP_SHARED_BUILD"21 20 PCH_FILE 22 21 PickupPrecompiledHeaders.h -
code/trunk/src/modules/pickup/DroppedPickup.cc
r6540 r7163 41 41 namespace orxonox 42 42 { 43 43 44 44 CreateFactory(DroppedPickup); 45 45 46 46 /** 47 47 @brief … … 51 51 { 52 52 RegisterObject(DroppedPickup); 53 53 54 54 } 55 55 … … 67 67 */ 68 68 DroppedPickup::DroppedPickup(BaseObject* creator, Pickupable* pickup, PickupCarrier* carrier, float triggerDistance) : PickupSpawner(creator, pickup, triggerDistance, 5, 1) 69 { 69 { 70 70 RegisterObject(DroppedPickup); 71 71 72 72 this->setPosition(carrier->getCarrierPosition()); 73 73 this->setActive(false); 74 74 75 75 //TODO: Do more elegantly. 76 76 this->startRespawnTimer(); -
code/trunk/src/modules/pickup/DroppedPickup.h
r6540 r7163 41 41 namespace orxonox 42 42 { 43 43 44 44 /** 45 45 @brief -
code/trunk/src/modules/pickup/Pickup.cc
- Property svn:eol-style set to native
r6709 r7163 48 48 /*static*/ const std::string Pickup::durationTypeOnce_s = "once"; 49 49 /*static*/ const std::string Pickup::durationTypeContinuous_s = "continuous"; 50 51 CreateUnloadableFactory(Pickup); 50 52 51 53 Pickup::Pickup(BaseObject* creator) : BaseObject(creator) … … 146 148 void Pickup::setActivationType(const std::string& type) 147 149 { 148 if( type == activationTypeImmediate_s)150 if(Pickup::activationTypeImmediate_s.compare(type) == 0) 149 151 { 150 152 this->activationType_ = pickupActivationType::immediate; 151 153 } 152 else if( type == activationTypeOnUse_s)154 else if(Pickup::activationTypeOnUse_s.compare(type) == 0) 153 155 { 154 156 this->activationType_ = pickupActivationType::onUse; … … 168 170 void Pickup::setDurationType(const std::string& type) 169 171 { 170 if( type == durationTypeOnce_s)172 if(Pickup::durationTypeOnce_s.compare(type) == 0) 171 173 { 172 174 this->durationType_ = pickupDurationType::once; 173 175 } 174 else if( type == durationTypeContinuous_s)176 else if(Pickup::durationTypeContinuous_s.compare(type) == 0) 175 177 { 176 178 this->durationType_ = pickupDurationType::continuous; … … 192 194 193 195 //! Sets the Pickup to used if the Pickup has activation type 'immediate' and gets picked up. 194 if(this-> getCarrier() != NULL && this->isPickedUp() && this->isImmediate())196 if(this->isPickedUp() && this->isImmediate()) 195 197 { 196 198 this->setUsed(true); -
code/trunk/src/modules/pickup/Pickup.h
- Property svn:eol-style set to native
r6728 r7163 40 40 #include "core/XMLPort.h" 41 41 42 #include " interfaces/Pickupable.h"42 #include "CollectiblePickup.h" 43 43 44 44 #include "tools/Timer.h" … … 74 74 Damian 'Mozork' Frick 75 75 */ 76 class _PickupExport Pickup : public Pickupable, public BaseObject76 class _PickupExport Pickup : public CollectiblePickup, public BaseObject 77 77 { 78 78 79 p rotected:79 public: 80 80 Pickup(BaseObject* creator); //!< Constructor. 81 82 public:83 81 virtual ~Pickup(); //!< Destructor. 84 82 … … 167 165 private: 168 166 void initialize(void); //!< Initializes the member variables. 169 167 170 168 //TODO: Problems, when there are more Timers needed? Solutions? 171 169 Timer durationTimer_; //!< Timer at the disposal of each Class implementing Pickup. -
code/trunk/src/modules/pickup/PickupCollection.cc
r6901 r7163 35 35 #include "core/XMLPort.h" 36 36 #include "interfaces/PickupCarrier.h" 37 #include "CollectiblePickup.h" 37 38 #include "DroppedPickup.h" 38 39 #include "PickupCollectionIdentifier.h" … … 42 43 namespace orxonox 43 44 { 44 45 45 46 CreateFactory(PickupCollection); 46 47 … … 52 53 { 53 54 RegisterObject(PickupCollection); 54 55 55 56 this->pickupCollectionIdentifier_ = new PickupCollectionIdentifier(this); 56 } 57 57 this->usedCounter_ = 0; 58 this->pickedUpCounter_ = 0; 59 this->disabledCounter_ = 0; 60 this->processingUsed_ = false; 61 this->processingPickedUp_ = false; 62 } 63 58 64 /** 59 65 @brief … … 62 68 PickupCollection::~PickupCollection() 63 69 { 64 //! Destroy all Pickupables constructing this PickupCollection. 65 for(std::vector<WeakPtr<Pickupable> >::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 66 { 67 if((*it).get() != NULL) 68 (*it).get()->destroy(); 69 } 70 } 71 70 // Destroy all Pickupables constructing this PickupCollection. 71 for(std::vector<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 72 { 73 (*it)->removeFromCollection(); 74 (*it)->destroy(); 75 } 76 this->pickups_.clear(); 77 } 78 72 79 /** 73 80 @brief … … 77 84 { 78 85 SUPER(PickupCollection, XMLPort, xmlelement, mode); 79 80 XMLPortObject(PickupCollection, Pickupable, "pickupables", addPickupable, getPickupable, xmlelement, mode);81 86 87 XMLPortObject(PickupCollection, CollectiblePickup, "pickupables", addPickupable, getPickupable, xmlelement, mode); 88 82 89 this->initializeIdentifier(); 83 90 } 84 91 85 92 /** 86 93 @brief … … 89 96 void PickupCollection::initializeIdentifier(void) 90 97 { 91 for(std::vector< WeakPtr<Pickupable>>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++)92 { 93 this->pickupCollectionIdentifier_->addPickup((*it) .get()->getPickupIdentifier());94 } 95 } 96 98 for(std::vector<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 99 { 100 this->pickupCollectionIdentifier_->addPickup((*it)->getPickupIdentifier()); 101 } 102 } 103 97 104 /** 98 105 @brief … … 103 110 { 104 111 SUPER(PickupCollection, changedUsed); 105 106 //! Change used for all Pickupables this PickupCollection consists of. 107 for(std::vector<WeakPtr<Pickupable> >::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 108 { 109 (*it).get()->setUsed(this->isUsed()); 110 } 111 } 112 112 113 this->processingUsed_ = true; 114 // Change used for all Pickupables this PickupCollection consists of. 115 for(std::vector<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 116 { 117 (*it)->setUsed(this->isUsed()); 118 } 119 this->processingUsed_ = false; 120 121 this->changedUsedAction(); 122 } 123 124 /** 125 @brief 126 Helper method. 127 Checks whether due to changes in the used status of the pickups of this PickupCollection the used status of this PickupCollection has to change as well. 128 */ 129 void PickupCollection::changedUsedAction(void) 130 { 131 if(this->processingUsed_) 132 return; 133 134 // If all the pickups are not in use but the PickupCollection is. 135 if(this->usedCounter_ == 0 && this->isUsed()) 136 this->setUsed(false); 137 138 // If all the enabled pickups are in use but the PickupCollection is not. 139 if(this->usedCounter_ != 0 && this->usedCounter_ == this->pickups_.size()-this->disabledCounter_ && !this->isUsed()) 140 this->setUsed(true); 141 } 142 113 143 /** 114 144 @brief … … 119 149 { 120 150 SUPER(PickupCollection, changedCarrier); 121 122 //! Change the PickupCarrier for all Pickupables this PickupCollection consists of. 123 for(std::vector<WeakPtr<Pickupable> >::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 124 { 125 (*it).get()->setCarrier(this->getCarrier()->getTarget(*it)); 126 } 127 } 128 151 152 // Change the PickupCarrier for all Pickupables this PickupCollection consists of. 153 for(std::vector<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 154 { 155 if(this->getCarrier() == NULL) 156 (*it)->setCarrier(NULL); 157 else 158 (*it)->setCarrier(this->getCarrier()->getTarget(*it)); 159 } 160 } 161 129 162 /** 130 163 @brief … … 135 168 { 136 169 SUPER(PickupCollection, changedPickedUp); 137 138 //! Change the pickedUp status for all Pickupables this PickupCollection consists of. 139 for(std::vector<WeakPtr<Pickupable> >::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 140 { 141 (*it).get()->setPickedUp(this->isPickedUp()); 142 } 143 } 144 170 171 this->processingPickedUp_ = true; 172 // Change the pickedUp status for all Pickupables this PickupCollection consists of. 173 for(std::vector<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 174 { 175 (*it)->setPickedUp(this->isPickedUp()); 176 } 177 this->processingPickedUp_ = false; 178 179 this->changedPickedUpAction(); 180 } 181 182 /** 183 @brief 184 Helper method. 185 Checks whether due to changes in the picked up status of the pickups of this PickupCollection the picked up status of this PickupCollection has to change as well. 186 */ 187 void PickupCollection::changedPickedUpAction(void) 188 { 189 if(this->processingPickedUp_) 190 return; 191 192 // If at least all the enabled pickups of this PickupCollection are no longer picked up. 193 if(this->pickedUpCounter_ <= this->disabledCounter_ && this->isPickedUp()) 194 this->Pickupable::destroy(); 195 196 // If the PickupCollection is no longer picked up. 197 if(!this->isPickedUp()) 198 this->pickedUpCounter_ = 0; 199 } 200 145 201 /** 146 202 @brief … … 154 210 if(item == NULL) 155 211 item = new PickupCollection(this); 156 212 157 213 SUPER(PickupCollection, clone, item); 158 214 159 215 PickupCollection* pickup = dynamic_cast<PickupCollection*>(item); 160 //! Clone all Pickupables this PickupCollection consist of. 161 for(std::vector<WeakPtr<Pickupable> >::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 162 { 163 Pickupable* newPickup = (*it).get()->clone(); 164 pickup->addPickupable(newPickup); 216 // Clone all Pickupables this PickupCollection consist of. 217 for(std::vector<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 218 { 219 Pickupable* newPickup = (*it)->clone(); 220 CollectiblePickup* collectible = static_cast<CollectiblePickup*>(newPickup); 221 pickup->addPickupable(collectible); 165 222 } 166 223 167 224 pickup->initializeIdentifier(); 168 225 } 169 226 170 227 /** 171 228 @brief … … 178 235 bool PickupCollection::isTarget(PickupCarrier* carrier) const 179 236 { 180 for(std::vector< WeakPtr<Pickupable>>::const_iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++)181 { 182 if(!carrier->isTarget( (*it).get()))237 for(std::vector<CollectiblePickup*>::const_iterator it = this->pickups_.begin(); it != this->pickups_.end(); it++) 238 { 239 if(!carrier->isTarget(*it)) 183 240 return false; 184 241 } 185 242 186 243 return true; 187 244 } 188 245 189 246 /** 190 247 @brief … … 198 255 return this->pickupCollectionIdentifier_; 199 256 } 200 257 201 258 /** 202 259 @brief … … 207 264 Returns true if successful, 208 265 */ 209 bool PickupCollection::addPickupable( Pickupable* pickup)266 bool PickupCollection::addPickupable(CollectiblePickup* pickup) 210 267 { 211 268 if(pickup == NULL) 212 269 return false; 213 214 WeakPtr<Pickupable> ptr = pickup; //!< Create a weak pointer to be able to test in the constructor if the Pointer is still valid.215 this->pickups_.push_back(p tr);270 271 pickup->addToCollection(this); 272 this->pickups_.push_back(pickup); 216 273 return true; 217 274 } 218 275 219 276 /** 220 277 @brief … … 227 284 const Pickupable* PickupCollection::getPickupable(unsigned int index) 228 285 { 229 return this->pickups_[index].get(); 230 } 231 286 return this->pickups_[index]; 287 } 288 289 /** 290 @brief 291 Informs the PickupCollection, that one of its pickups has changed its used status to the input value. 292 This is used internally by the CollectiblePickup class. 293 @param changed 294 The value the used status has changed to. 295 */ 296 void PickupCollection::pickupChangedUsed(bool changed) 297 { 298 if(changed) 299 this->usedCounter_++; 300 else 301 this->usedCounter_--; 302 303 this->changedUsedAction(); 304 } 305 306 /** 307 @brief 308 Informs the PickupCollection, that one of its pickups has changed its picked up status to the input value. 309 This is used internally by the CollectiblePickup class. 310 @param changed 311 The value the picked up status has changed to. 312 */ 313 void PickupCollection::pickupChangedPickedUp(bool changed) 314 { 315 if(changed) 316 this->pickedUpCounter_++; 317 else 318 this->pickedUpCounter_--; 319 320 this->changedPickedUpAction(); 321 } 322 323 /** 324 @brief 325 Informs the PickupCollection, that one of its pickups has been disabled. 326 This is used internally by the CollectiblePickup class. 327 */ 328 void PickupCollection::pickupDisabled(void) 329 { 330 this->disabledCounter_++; 331 } 332 232 333 /** 233 334 @brief … … 245 346 return true; 246 347 } 247 348 248 349 } -
code/trunk/src/modules/pickup/PickupCollection.h
r6731 r7163 37 37 #include "PickupPrereqs.h" 38 38 39 #include "interfaces/Pickupable.h"40 39 #include "core/BaseObject.h" 40 #include "CollectiblePickup.h" 41 41 42 42 #include <list> … … 47 47 /** 48 48 @brief 49 The PickupCollection combines different Pickupables to a coherent, single pickup and makes the seem (from the outside looking in) just as if they were just one Pickupable.49 The PickupCollection combines different Pickupables to a coherent, single pickup and makes them seem (from the outside looking in) just as if they were just one Pickupable. 50 50 @author 51 51 Damian 'Mozork' Frick 52 52 */ 53 class _PickupExport PickupCollection : public Pickupable, public BaseObject53 class _PickupExport PickupCollection : public CollectiblePickup, public BaseObject 54 54 { 55 55 56 56 public: 57 58 57 PickupCollection(BaseObject* creator); //!< Default Constructor. 59 58 virtual ~PickupCollection(); //!< Destructor. 60 59 61 60 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Creates an instance of this Class through XML. 62 61 … … 64 63 virtual void changedCarrier(void); //!< Is called when the pickup has changed its PickupCarrier. 65 64 virtual void changedPickedUp(void); //!< Is called when the pickup has transited from picked up to dropped or the other way around. 66 65 67 66 virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass. 68 67 69 68 virtual bool isTarget(PickupCarrier* carrier) const; //!< Get whether a given class, represented by the input Identifier, is a target of this PickupCollection. 70 69 71 70 virtual const PickupIdentifier* getPickupIdentifier(void); //!< Get the PickupIdentifier of this PickupCollection. 72 73 bool addPickupable( Pickupable* pickup); //!< Add the input Pickupable to list of Pickupables combined by this PickupCollection.71 72 bool addPickupable(CollectiblePickup* pickup); //!< Add the input Pickupable to list of Pickupables combined by this PickupCollection. 74 73 const Pickupable* getPickupable(unsigned int index); //!< Get the Pickupable at the given index. 75 74 75 void pickupChangedUsed(bool changed); //!< Informs the PickupCollection, that one of its pickups has changed its used status to the input value. 76 void pickupChangedPickedUp(bool changed); //!< Informs the PickupCollection, that one of its pickups has changed its picked up status to the input value. 77 void pickupDisabled(void); //!< Informs the PickupCollection, that one of its pickups has been disabled. 78 76 79 protected: 77 80 void initializeIdentifier(void); //!< Initializes the PickupIdentifier for this pickup. 81 82 virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable. 83 84 PickupCollectionIdentifier* pickupCollectionIdentifier_; //!< The PickupCollectionIdentifier of this PickupCollection. Is used to distinguish different PickupCollections amongst themselves. 85 86 private: 87 void changedUsedAction(void); //!< Helper method. 88 void changedPickedUpAction(void); //!< Helper method. 78 89 79 virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable. 80 81 PickupCollectionIdentifier* pickupCollectionIdentifier_; //!< The PickupCollectionIdentifier of this PickupCollection. Is used to distinguish different PickupCollections amongst themselves. 82 83 private: 84 85 std::vector<WeakPtr<Pickupable> > pickups_; //!< The list of the pointers of all the Pickupables this PickupCollection consists of. They are weak pointers to facilitate testing, whether the pointers are still valid. 86 90 std::vector<CollectiblePickup*> pickups_; //!< The list of the pointers of all the Pickupables this PickupCollection consists of. They are weak pointers to facilitate testing, whether the pointers are still valid. 91 92 unsigned int usedCounter_; //!< Keeps track of the number of pickups of this PickupCollection, that are in use. 93 unsigned int pickedUpCounter_; //!< Keeps track of the number of pickups of this PickupCollection, that are picked up. 94 unsigned int disabledCounter_; //!< Keeps track of the number of pickups of this PickupCollection, that are disabled. 95 96 bool processingUsed_; //!< Boolean to ensure, that the PickupCollection doesn't update its used status while its internal state is inconsistent. 97 bool processingPickedUp_; //!< Boolean to ensure, that the PickupCollection doesn't update its picked upp status while its internal state is inconsistent. 98 87 99 }; 88 100 89 101 } 90 102 -
code/trunk/src/modules/pickup/PickupCollectionIdentifier.cc
- Property svn:eol-style set to native
r6538 r7163 38 38 namespace orxonox 39 39 { 40 40 41 41 /** 42 42 @brief … … 47 47 RegisterObject(PickupCollectionIdentifier); 48 48 } 49 49 50 50 /** 51 51 @brief … … 54 54 PickupCollectionIdentifier::~PickupCollectionIdentifier() 55 55 { 56 56 57 57 } 58 58 … … 67 67 int PickupCollectionIdentifier::compare(const PickupIdentifier* identifier) const 68 68 { 69 // !Slight un-niceity to cast the PickupIdentifier to a PickupCollectionIdentifier.69 // Slight un-niceity to cast the PickupIdentifier to a PickupCollectionIdentifier. 70 70 PickupIdentifier* temp = const_cast<PickupIdentifier*>(identifier); 71 71 const PickupCollectionIdentifier* collectionIdentifier = dynamic_cast<PickupCollectionIdentifier*>(temp); 72 73 // !If the input PickupIdentifier 'identifier' is no PickupCollectionIdentifier then just the two PickupIdentifiers are compared.72 73 // If the input PickupIdentifier 'identifier' is no PickupCollectionIdentifier then just the two PickupIdentifiers are compared. 74 74 if(collectionIdentifier == NULL) 75 75 { 76 76 return this->PickupIdentifier::compare(identifier); 77 77 } 78 79 // !If the number of Pickupables each of the two PickupCollectionIdentifiers contain differ, the one with less is considered smaller.78 79 // If the number of Pickupables each of the two PickupCollectionIdentifiers contain differ, the one with less is considered smaller. 80 80 if(this->identifiers_.size() != collectionIdentifier->identifiers_.size()) 81 81 return this->identifiers_.size()-collectionIdentifier->identifiers_.size(); 82 83 // !Compare the Pickupables of the two PickupCollectionIdentifiers one after the other. the one with the first 'smaller' one is considered smaller.82 83 // Compare the Pickupables of the two PickupCollectionIdentifiers one after the other. the one with the first 'smaller' one is considered smaller. 84 84 std::set<const PickupIdentifier*, PickupIdentifierCompare>::const_iterator it2 = collectionIdentifier->identifiers_.begin(); 85 85 for(std::set<const PickupIdentifier*, PickupIdentifierCompare>::const_iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); it++) 86 86 { 87 87 88 88 if((*it)->compare(*it2) < 0) 89 89 return -1; … … 91 91 return 1; 92 92 } 93 93 94 94 //! Means they are equal. 95 95 return 0; 96 96 } 97 97 98 98 /** 99 99 @brief … … 106 106 this->identifiers_.insert(identifier); 107 107 } 108 108 109 109 } 110 110 -
code/trunk/src/modules/pickup/PickupCollectionIdentifier.h
- Property svn:eol-style set to native
r6538 r7163 54 54 class _PickupExport PickupCollectionIdentifier : public PickupIdentifier 55 55 { 56 56 57 57 public: 58 58 PickupCollectionIdentifier(Pickupable* pickup); //!< Constructor. 59 59 ~PickupCollectionIdentifier(); //!< Destructor. 60 60 61 61 virtual int compare(const PickupIdentifier* identifier) const; //!< Compares a PickupCollectionIdentifier with a PickupIdentifier. 62 62 63 63 void addPickup(const PickupIdentifier* identifier); //!< Add a Pickupable to the PickupCollectionIdentifier. 64 64 65 65 private: 66 66 std::set<const PickupIdentifier*, PickupIdentifierCompare> identifiers_; //!< The set of PickupIdentifiers of the Pickupables the PickupCollection with this PickupCollectionIdentifier consists of, ordered by the rule set by PickupIdentifierCompare. 67 67 68 68 }; 69 69 70 70 } 71 71 -
code/trunk/src/modules/pickup/PickupManager.cc
- Property svn:eol-style set to native
r6752 r7163 39 39 #include "core/ScopedSingletonManager.h" 40 40 #include "core/Identifier.h" 41 #include "util/Convert.h" 41 42 #include "interfaces/PickupCarrier.h" 42 43 #include "infos/PlayerInfo.h" 43 44 #include "worldentities/pawns/Pawn.h" 45 #include "CollectiblePickup.h" 44 46 #include "PickupRepresentation.h" 45 47 … … 50 52 // Register tolua_open function when loading the library 51 53 DeclareToluaInterface(Pickup); 52 53 ManageScopedSingleton(PickupManager, ScopeID:: Graphics, false);54 54 55 ManageScopedSingleton(PickupManager, ScopeID::Root, false); 56 55 57 /*static*/ const std::string PickupManager::guiName_s = "PickupInventory"; 56 58 57 59 /** 58 60 @brief … … 62 64 { 63 65 RegisterRootObject(PickupManager); 64 66 67 //TODO: This doesn't work, yet. 68 if( GameMode::showsGraphics() ) 69 { 70 GUIManager::getInstance().loadGUI(PickupManager::guiName_s); 71 } 65 72 this->defaultRepresentation_ = new PickupRepresentation(); 66 73 67 74 COUT(3) << "PickupManager created." << std::endl; 68 75 } 69 76 70 77 /** 71 78 @brief … … 77 84 if(this->defaultRepresentation_ != NULL) 78 85 this->defaultRepresentation_->destroy(); 79 86 80 87 this->representations_.clear(); 81 88 82 89 COUT(3) << "PickupManager destroyed." << std::endl; 83 90 } 84 91 85 92 /** 86 93 @brief … … 95 102 */ 96 103 bool PickupManager::registerRepresentation(const PickupIdentifier* identifier, PickupRepresentation* representation) 97 { 104 { 98 105 if(identifier == NULL || representation == NULL || this->representations_.find(identifier) != this->representations_.end()) //!< If the Pickupable already has a Representation registered. 99 106 return false; 100 107 101 108 this->representations_[identifier] = representation; 102 109 103 110 COUT(4) << "PickupRepresentation " << representation << " registered with the PickupManager." << std::endl; 104 111 return true; 105 112 } 106 113 107 114 /** 108 115 @brief … … 116 123 */ 117 124 bool PickupManager::unregisterRepresentation(const PickupIdentifier* identifier, PickupRepresentation* representation) 118 { 125 { 119 126 if(identifier == NULL || representation == NULL) 120 127 return false; 121 128 122 129 std::map<const PickupIdentifier*, PickupRepresentation*, PickupIdentifierCompare>::iterator it = this->representations_.find(identifier); 123 130 if(it == this->representations_.end()) //!< If the Pickupable is not registered in the first place. 124 131 return false; 125 132 126 133 this->representations_.erase(it); 127 134 128 135 COUT(4) << "PickupRepresentation " << representation << " unregistered with the PickupManager." << std::endl; 129 136 return true; 130 137 } 131 138 132 139 /** 133 140 @brief … … 146 153 return this->defaultRepresentation_; 147 154 } 148 155 149 156 return it->second; 150 157 } 151 152 PickupCarrier* PickupManager::getPawn(void) 153 { 158 159 int PickupManager::getNumPickups(void) 160 { 161 this->pickupsList_.clear(); 162 154 163 PlayerInfo* player = GUIManager::getInstance().getPlayer(PickupManager::guiName_s); 164 PickupCarrier* carrier = NULL; 155 165 if (player != NULL) 156 returndynamic_cast<PickupCarrier*>(player->getControllableEntity());166 carrier = dynamic_cast<PickupCarrier*>(player->getControllableEntity()); 157 167 else 158 return NULL;159 }160 161 int PickupManager::getNumCarrierChildren(PickupCarrier* carrier)162 {163 if(carrier == NULL)164 168 return 0; 165 return carrier->getNumCarrierChildren(); 166 } 167 168 PickupCarrier* PickupManager::getCarrierChild(int index, PickupCarrier* carrier) 169 { 170 if(carrier == NULL) 171 return NULL; 172 return carrier->getCarrierChild(index); 173 } 174 175 const std::string& PickupManager::getCarrierName(orxonox::PickupCarrier* carrier) 176 { 177 if(carrier == NULL) 178 return BLANKSTRING; 179 return carrier->getCarrierName(); 180 } 181 182 PickupRepresentation* PickupManager::getPickupRepresentation(int index, PickupCarrier* carrier) 183 { 184 Pickupable* pickup = carrier->getPickup(index); 185 if(pickup == NULL) 186 return NULL; 187 188 return this->getRepresentation(pickup->getPickupIdentifier()); 189 } 190 191 int PickupManager::getNumPickups(PickupCarrier* carrier) 192 { 193 if(carrier == NULL) 194 return 0; 195 return carrier->getNumPickups(); 196 } 197 198 void PickupManager::dropPickup(int index, PickupCarrier* carrier) 199 { 200 Pickupable* pickup = carrier->getPickup(index); 201 if(pickup != NULL) 202 carrier->drop(pickup); 203 } 204 205 void PickupManager::usePickup(int index, PickupCarrier* carrier, bool use) 206 { 207 Pickupable* pickup = carrier->getPickup(index); 208 if(pickup != NULL) 169 170 std::vector<PickupCarrier*>* carriers = this->getAllCarriers(carrier); 171 for(std::vector<PickupCarrier*>::iterator it = carriers->begin(); it != carriers->end(); it++) 172 { 173 std::set<Pickupable*> pickups = (*it)->getPickups(); 174 for(std::set<Pickupable*>::iterator pickup = pickups.begin(); pickup != pickups.end(); pickup++) 175 { 176 CollectiblePickup* collectible = orxonox_cast<CollectiblePickup*>(*pickup); 177 if(collectible == NULL || !collectible->isInCollection()) 178 this->pickupsList_.insert(std::pair<Pickupable*, WeakPtr<Pickupable> >(*pickup, WeakPtr<Pickupable>(*pickup))); 179 } 180 } 181 delete carriers; 182 183 this->pickupsIterator_ = this->pickupsList_.begin(); 184 return this->pickupsList_.size(); 185 } 186 187 std::vector<PickupCarrier*>* PickupManager::getAllCarriers(PickupCarrier* carrier) 188 { 189 //TODO: More efficiently. 190 std::vector<PickupCarrier*>* carriers = new std::vector<PickupCarrier*>(); 191 carriers->insert(carriers->end(), carrier); 192 std::vector<PickupCarrier*>* children = carrier->getCarrierChildren(); 193 for(std::vector<PickupCarrier*>::iterator it = children->begin(); it != children->end(); it++) 194 { 195 std::vector<PickupCarrier*>* childrensChildren = this->getAllCarriers(*it); 196 for(std::vector<PickupCarrier*>::iterator it2 = childrensChildren->begin(); it2 != childrensChildren->end(); it2++) 197 { 198 carriers->insert(carriers->end(), *it2); 199 } 200 delete childrensChildren; 201 } 202 delete children; 203 return carriers; 204 } 205 206 void PickupManager::dropPickup(orxonox::Pickupable* pickup) 207 { 208 std::map<Pickupable*, WeakPtr<Pickupable> >::iterator it = this->pickupsList_.find(pickup); 209 if(pickup == NULL || it == this->pickupsList_.end() || it->second.get() == NULL) 210 return; 211 212 if(!pickup->isPickedUp()) 213 return; 214 215 PickupCarrier* carrier = pickup->getCarrier(); 216 if(pickup != NULL && carrier != NULL) 217 { 218 pickup->drop(carrier); 219 } 220 } 221 222 void PickupManager::usePickup(orxonox::Pickupable* pickup, bool use) 223 { 224 std::map<Pickupable*, WeakPtr<Pickupable> >::iterator it = this->pickupsList_.find(pickup); 225 if(pickup == NULL || it == this->pickupsList_.end() || it->second.get() == NULL) 226 return; 227 228 if(!pickup->isPickedUp()) 229 return; 230 231 PickupCarrier* carrier = pickup->getCarrier(); 232 if(pickup != NULL && carrier != NULL) 209 233 pickup->setUsed(use); 210 234 } 211 235 212 236 } -
code/trunk/src/modules/pickup/PickupManager.h
- Property svn:eol-style set to native
r6725 r7163 39 39 #include <map> 40 40 #include "util/Singleton.h" 41 #include "core/WeakPtr.h" 41 42 #include "pickup/PickupIdentifier.h" 42 43 #include "PickupRepresentation.h" … … 59 60 { // tolua_export 60 61 friend class Singleton<PickupManager>; 61 62 62 63 public: 63 64 PickupManager(); 64 65 virtual ~PickupManager(); 65 66 66 67 static PickupManager& getInstance() { return Singleton<PickupManager>::getInstance(); } // tolua_export 67 68 68 69 bool registerRepresentation(const PickupIdentifier* identifier, PickupRepresentation* representation); //!< Registers a PickupRepresentation together with the PickupIdentifier of the Pickupable the PickupRepresentation represents. 69 70 bool unregisterRepresentation(const PickupIdentifier* identifier, PickupRepresentation* representation); //!< Unegisters a PickupRepresentation together with the PickupIdentifier of the Pickupable the PickupRepresentation represents. 70 71 PickupRepresentation* getRepresentation(const PickupIdentifier* identifier); //!< Get the PickupRepresentation representing the Pickupable with the input PickupIdentifier. 71 72 72 73 // tolua_begin 73 orxonox::PickupCarrier* getPawn(void); 74 75 int getNumCarrierChildren(orxonox::PickupCarrier* carrier); 76 orxonox::PickupCarrier* getCarrierChild(int index, orxonox::PickupCarrier* carrier); 77 78 const std::string& getCarrierName(orxonox::PickupCarrier* carrier); 79 80 int getNumPickups(orxonox::PickupCarrier* carrier); 81 PickupRepresentation* getPickupRepresentation(int index, orxonox::PickupCarrier* carrier); 82 void dropPickup(int index, orxonox::PickupCarrier* carrier); 83 void usePickup(int index, orxonox::PickupCarrier* carrier, bool use); 74 int getNumPickups(void); 75 orxonox::Pickupable* popPickup(void) { return (this->pickupsIterator_++)->first; } 76 orxonox::PickupRepresentation* getPickupRepresentation(orxonox::Pickupable* pickup) { if(pickup != NULL) return this->getRepresentation(pickup->getPickupIdentifier()); return NULL; } 77 78 void dropPickup(orxonox::Pickupable* pickup); 79 void usePickup(orxonox::Pickupable* pickup, bool use); 80 bool isValidPickup(orxonox::Pickupable* pickup) { std::map<Pickupable*, WeakPtr<Pickupable> >::iterator it = this->pickupsList_.find(pickup); if(it == this->pickupsList_.end()) return false; return it->second.get() != NULL; } 84 81 // tolua_end 85 82 86 83 private: 87 84 static PickupManager* singletonPtr_s; 88 85 static const std::string guiName_s; 89 86 90 87 PickupRepresentation* defaultRepresentation_; //!< The default PickupRepresentation. 91 88 std::map<const PickupIdentifier*, PickupRepresentation*, PickupIdentifierCompare> representations_; //!< Map linking PickupIdentifiers (representing types if Pickupables) and PickupRepresentations. 92 89 90 std::map<Pickupable*, WeakPtr<Pickupable> > pickupsList_; 91 std::map<Pickupable*, WeakPtr<Pickupable> >::iterator pickupsIterator_; 92 93 std::vector<PickupCarrier*>* getAllCarriers(PickupCarrier* carrier); 94 93 95 }; // tolua_export 94 96 95 97 } // tolua_export 96 98 -
code/trunk/src/modules/pickup/PickupPrereqs.h
r6711 r7163 43 43 //----------------------------------------------------------------------- 44 44 45 #if defined(ORXONOX_PLATFORM_WINDOWS) && !defined( ORXONOX_STATIC_BUILD)45 #if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(PICKUP_STATIC_BUILD) 46 46 # ifdef PICKUP_SHARED_BUILD 47 47 # define _PickupExport __declspec(dllexport) … … 65 65 namespace orxonox 66 66 { 67 67 68 class CollectiblePickup; 68 69 class DroppedPickup; 69 70 class Pickup; … … 75 76 76 77 //items 78 class DronePickup; 77 79 class HealthPickup; 78 80 class InvisiblePickup; 79 81 class MetaPickup; 80 82 class SpeedPickup; 83 class ShieldPickup; 81 84 82 85 } -
code/trunk/src/modules/pickup/PickupRepresentation.cc
- Property svn:eol-style set to native
r6725 r7163 41 41 namespace orxonox 42 42 { 43 43 44 44 CreateFactory(PickupRepresentation); 45 45 46 46 /** 47 47 @brief … … 52 52 { 53 53 RegisterObject(PickupRepresentation); 54 54 55 55 this->initialize(); 56 56 } 57 57 58 58 /** 59 59 @brief … … 63 63 { 64 64 RegisterObject(PickupRepresentation); 65 65 66 66 this->initialize(); 67 67 } 68 68 69 69 /** 70 70 @brief … … 75 75 if(this->spawnerRepresentation_ != NULL) 76 76 this->spawnerRepresentation_->destroy(); 77 77 78 78 if(this->pickup_ != NULL) 79 79 PickupManager::getInstance().unregisterRepresentation(this->pickup_->getPickupIdentifier(), this); 80 80 } 81 81 82 82 /** 83 83 @brief … … 91 91 this->inventoryRepresentation_ = "Default"; 92 92 } 93 93 94 94 /** 95 95 @brief … … 99 99 { 100 100 SUPER(PickupRepresentation, XMLPort, xmlelement, mode); 101 101 102 102 XMLPortParam(PickupRepresentation, "pickupName", setPickupName, getPickupName, xmlelement, mode); 103 103 XMLPortParam(PickupRepresentation, "pickupDescription", setPickupDescription, getPickupDescription, xmlelement, mode); … … 106 106 XMLPortObject(PickupRepresentation, Pickupable, "pickup", setPickup, getPickup, xmlelement, mode); 107 107 XMLPortObject(PickupRepresentation, StaticEntity, "spawner-representation", setSpawnerRepresentation, getSpawnerRepresentationIndex, xmlelement, mode); 108 108 109 109 PickupManager::getInstance().registerRepresentation(this->pickup_->getPickupIdentifier(), this); //!< Registers the PickupRepresentation with the PickupManager through the PickupIdentifier of the Pickupable it represents. 110 110 111 111 if(this->spawnerRepresentation_ != NULL) 112 112 this->spawnerRepresentation_->setVisible(false); 113 113 114 114 COUT(4) << "PickupRepresentation created: name: '" << this->name_ << "', description: '" << this->description_ << "', spawnerTemplate: '" << this->spawnerTemplate_ << "'." << std::endl; 115 115 } 116 116 117 117 /** 118 118 @brief … … 136 136 this->addTemplate(this->spawnerTemplate_); 137 137 } 138 138 139 139 StaticEntity* representation = this->spawnerRepresentation_; 140 140 representation->setVisible(true); 141 141 142 142 this->addTemplate(this->spawnerTemplate_); 143 143 this->spawnerRepresentation_->setVisible(false); 144 144 145 145 return representation; 146 146 } 147 147 148 148 /** 149 149 @brief … … 171 171 return representation; 172 172 } 173 173 174 174 } -
code/trunk/src/modules/pickup/PickupRepresentation.h
- Property svn:eol-style set to native
r6711 r7163 56 56 : public BaseObject 57 57 { // tolua_export 58 58 59 59 public: 60 60 PickupRepresentation(); //!< Constructor 61 61 PickupRepresentation(BaseObject* creator); //!< Default constructor. 62 62 virtual ~PickupRepresentation(); //!< Destructor. 63 63 64 64 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 65 65 66 66 /** 67 67 @brief Set the name of the Pickupable represented by this PickupRepresentation. … … 102 102 inline void setPickup(Pickupable* pickup) 103 103 { this->pickup_ = pickup; } 104 104 105 105 /** 106 106 @brief Get the name of the Pickupable represented by this PickupRepresentation. … … 138 138 inline const Pickupable* getPickup(unsigned int index) 139 139 { if(index == 0) return this->pickup_; return NULL; } 140 140 141 141 StaticEntity* getSpawnerRepresentation(PickupSpawner* spawner); //!< Get a spawnerRepresentation for a specific PickupSpawner. 142 142 143 143 private: 144 144 void initialize(void); //!< Initializes the member variables of this PickupRepresentation. 145 145 StaticEntity* getDefaultSpawnerRepresentation(PickupSpawner* spawner); //!< Get the default spawnerRepresentation for a specific PickupSpawner. 146 146 147 147 std::string name_; //!< The name of the Pickupable represented by this PickupRepresentation. 148 148 std::string description_; //!< The description of the Pickupable represented by this PickupRepresentation. 149 149 std::string spawnerTemplate_; //!< The name of the template of this PickupRepresentation. 150 150 StaticEntity* spawnerRepresentation_; //!< The spawnerRepresentation of this PickupRepresentation. 151 std::string inventoryRepresentation_; //!< The name of an image representing the pickup in the PickupInventory. TODO: Exact format and placement of image?152 151 std::string inventoryRepresentation_; //!< The name of an image representing the pickup in the PickupInventory. 152 153 153 Pickupable* pickup_; //!< The Pickupable that is represented by this PickupRepresentation. 154 154 155 155 }; // tolua_export 156 156 157 157 } // tolua_export 158 158 159 159 #endif // _PickupRepresentation_H__ -
code/trunk/src/modules/pickup/PickupSpawner.cc
r6711 r7163 55 55 { 56 56 RegisterObject(PickupSpawner); 57 57 58 58 this->initialize(); 59 59 } … … 76 76 { 77 77 RegisterObject(PickupSpawner); 78 78 79 79 this->initialize(); 80 80 81 81 this->pickup_ = pickup; 82 82 … … 84 84 this->respawnTime_ = respawnTime; 85 85 this->setMaxSpawnedItems(maxSpawnedItems); 86 86 87 87 if(this->pickup_ == NULL) 88 88 { … … 107 107 this->maxSpawnedItems_ = INF; 108 108 this->spawnsRemaining_ = INF; 109 this->selfDestruct_ = false; 109 110 } 110 111 … … 115 116 PickupSpawner::~PickupSpawner() 116 117 { 117 if(this-> pickup_ != NULL)118 if(this->selfDestruct_ && this->pickup_ != NULL) 118 119 this->pickup_->destroy(); 119 120 } … … 132 133 133 134 XMLPortObject(PickupSpawner, Pickupable, "pickup", setPickupable, getPickupable, xmlelement, mode); 134 135 135 136 XMLPortParam(PickupSpawner, "triggerDistance", setTriggerDistance, getTriggerDistance, xmlelement, mode); 136 137 XMLPortParam(PickupSpawner, "respawnTime", setRespawnTime, getRespawnTime, xmlelement, mode); 137 138 XMLPortParam(PickupSpawner, "maxSpawnedItems", setMaxSpawnedItems, getMaxSpawnedItems, xmlelement, mode); 138 139 139 140 if(this->pickup_ == NULL) 140 141 { … … 150 151 } 151 152 } 152 153 153 154 /** 154 155 @brief … … 161 162 this->setVisible(this->isActive()); 162 163 } 163 164 164 165 /** 165 166 @brief … … 172 173 { 173 174 SUPER(PickupSpawner, tick, dt); 174 175 175 176 //! If the PickupSpawner is active. 176 177 if (this->isActive()) 177 178 { 179 SmartPtr<PickupSpawner> temp = this; //Create a smart pointer to keep the PickupSpawner alive until we iterated through all Pawns (in case a Pawn takes the last pickup) 180 178 181 //! Iterate trough all Pawns. 179 182 for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it) … … 189 192 } 190 193 } 191 194 192 195 /** 193 196 @brief … … 201 204 this->spawnsRemaining_ = items; 202 205 } 203 206 204 207 /** 205 208 @brief … … 223 226 else 224 227 { 225 COUT( 3) << "PickupSpawnerempty, selfdestruct initialized." << std::endl;228 COUT(4) << "PickupSpawner (&" << this << ") empty, selfdestruct initialized." << std::endl; 226 229 this->setActive(false); 227 230 this->destroy(); 228 231 } 229 232 } 230 233 231 234 /** 232 235 @brief … … 237 240 this->respawnTimer_.setTimer(this->respawnTime_, false, createExecutor(createFunctor(&PickupSpawner::respawnTimerCallback, this))); 238 241 } 239 242 240 243 /** 241 244 @brief … … 248 251 if(this->pickup_ != NULL) 249 252 { 250 COUT(1) << "In PickupSpawner : setPickupable called, with this->pickup_ already set." << std::endl;253 COUT(1) << "In PickupSpawner (&" << this << "): setPickupable called, with this->pickup_ already set." << std::endl; 251 254 return; 252 255 } 253 256 if(pickup == NULL) 254 257 { 255 COUT(1) << "In PickupSpawner : Argument of setPickupable is NULL." << std::endl;258 COUT(1) << "In PickupSpawner (&" << this << "): Argument of setPickupable is NULL." << std::endl; 256 259 return; 257 260 } 258 261 259 262 this->pickup_ = pickup; 260 263 } 261 264 262 265 /** 263 266 @brief … … 282 285 if (this->isActive()) //!< Checks whether PickupSpawner is active. 283 286 { 284 COUT( 3) << "PickupSpawnertriggered and active." << std::endl;285 287 COUT(4) << "PickupSpawner (&" << this << ") triggered and active." << std::endl; 288 286 289 PickupCarrier* carrier = dynamic_cast<PickupCarrier*>(pawn); 287 290 if(carrier == NULL) … … 290 293 return; 291 294 } 292 295 293 296 if(!carrier->isTarget(this->pickup_)) 294 297 { 295 COUT(4) << "PickupSpawner triggered but Pawn wasn't a target of the Pickupable." << std::endl;298 COUT(4) << "PickupSpawner (&" << this << ") triggered but Pawn wasn't a target of the Pickupable." << std::endl; 296 299 return; 297 300 } 298 301 299 302 PickupCarrier* target = carrier->getTarget(this->pickup_); 300 303 Pickupable* pickup = this->getPickup(); 301 304 302 305 if(target != NULL && pickup != NULL) 303 306 { 304 if(target->pickup(pickup)) 305 { 307 if(pickup->pickup(target)) 306 308 this->decrementSpawnsRemaining(); 307 }308 309 else 309 310 { 311 this->selfDestruct_ = true; 310 312 pickup->destroy(); 311 313 } … … 314 316 { 315 317 if(target == NULL) 316 COUT(1) << "PickupSpawner : Pickupable has no target." << std::endl;317 318 COUT(1) << "PickupSpawner (&" << this << "): Pickupable has no target." << std::endl; 319 318 320 if(pickup == NULL) 319 { 320 COUT(1) << "PickupSpawner: getPickup produced an error, no Pickupable created." << std::endl; 321 } 321 COUT(1) << "PickupSpawner (&" << this << "): getPickup produced an error, no Pickupable created." << std::endl; 322 322 else 323 323 { 324 this->selfDestruct_ = true; 324 325 pickup->destroy(); 325 326 } … … 333 334 @return 334 335 The Pickupable created. 335 */ 336 */ 336 337 Pickupable* PickupSpawner::getPickup(void) 337 338 { … … 341 342 return NULL; 342 343 } 343 344 344 345 Pickupable* pickup = this->pickup_->clone(); 345 346 return pickup; … … 352 353 void PickupSpawner::respawnTimerCallback() 353 354 { 354 COUT( 3) << "PickupSpawnerreactivated." << std::endl;355 COUT(4) << "PickupSpawner (&" << this << ") reactivated." << std::endl; 355 356 356 357 this->setActive(true); -
code/trunk/src/modules/pickup/PickupSpawner.h
r6540 r7163 101 101 protected: 102 102 void decrementSpawnsRemaining(void); //!< Decrements the number of remaining spawns. 103 103 104 104 void startRespawnTimer(void); 105 105 106 106 virtual Pickupable* getPickup(void); //!< Creates a new Pickupable. 107 107 108 108 void setPickupable(Pickupable* pickup); //!< Sets a Pickupable for the PickupSpawner to spawn. 109 109 const Pickupable* getPickupable(void); //!< Get the Pickupable that is spawned by this PickupSpawner. 110 110 111 111 Pickupable* pickup_; //!< The pickup to be spawned. 112 112 113 113 private: 114 114 void initialize(void); 115 115 116 116 void trigger(Pawn* pawn); //!< Method called when a Pawn is close enough. 117 117 void respawnTimerCallback(); //!< Method called when the timer runs out. … … 125 125 Timer respawnTimer_; //!< Timer used for re-activating. 126 126 127 bool selfDestruct_; //!< True if the PickupSpawner is selfdestructing. 128 127 129 static const int INF = -1; //!< Constant for infinity. 128 130 }; -
code/trunk/src/modules/pickup/items/CMakeLists.txt
- Property svn:eol-style set to native
r6710 r7163 3 3 InvisiblePickup.cc 4 4 MetaPickup.cc 5 DronePickup.cc 5 6 SpeedPickup.cc 7 ShieldPickup.cc 6 8 ) -
code/trunk/src/modules/pickup/items/HealthPickup.cc
r6709 r7163 45 45 namespace orxonox 46 46 { 47 47 48 48 /*static*/ const std::string HealthPickup::healthTypeLimited_s = "limited"; 49 49 /*static*/ const std::string HealthPickup::healthTypeTemporary_s = "temporary"; 50 50 /*static*/ const std::string HealthPickup::healthTypePermanent_s = "permanent"; 51 51 52 52 CreateFactory(HealthPickup); 53 53 54 54 /** 55 55 @brief … … 59 59 { 60 60 RegisterObject(HealthPickup); 61 61 62 62 this->initialize(); 63 63 } 64 64 65 65 /** 66 66 @brief … … 69 69 HealthPickup::~HealthPickup() 70 70 { 71 72 } 73 74 /** 75 @brief 71 72 } 73 74 /** 75 @brief 76 76 Initializes the member variables. 77 77 */ 78 78 void HealthPickup::initialize(void) 79 { 79 { 80 80 this->health_ = 0; 81 81 this->healthRate_ = 0; … … 83 83 this->maxHealthSave_ = 0; 84 84 this->maxHealthOverwrite_ = 0; 85 85 86 86 this->addTarget(ClassIdentifier<Pawn>::getIdentifier()); 87 87 } 88 88 89 89 /** 90 90 @brief … … 98 98 std::string val1 = stream.str(); 99 99 this->pickupIdentifier_->addParameter(type1, val1); 100 100 101 101 std::string val2 = this->getHealthType(); 102 102 std::string type2 = "healthType"; 103 103 this->pickupIdentifier_->addParameter(type2, val2); 104 104 105 105 stream.clear(); 106 106 stream << this->getHealthRate(); … … 109 109 this->pickupIdentifier_->addParameter(type3, val3); 110 110 } 111 111 112 112 /** 113 113 @brief … … 117 117 { 118 118 SUPER(HealthPickup, XMLPort, xmlelement, mode); 119 119 120 120 XMLPortParam(HealthPickup, "health", setHealth, getHealth, xmlelement, mode); 121 121 XMLPortParam(HealthPickup, "healthRate", setHealthRate, getHealthRate, xmlelement, mode); 122 122 XMLPortParam(HealthPickup, "healthType", setHealthType, getHealthType, xmlelement, mode); 123 123 124 124 if(!this->isContinuous()) 125 125 this->healthRate_ = 0.0; 126 126 127 127 this->initializeIdentifier(); 128 128 } 129 129 130 130 /** 131 131 @brief … … 138 138 { 139 139 SUPER(HealthPickup, tick, dt); 140 140 141 141 if(this->isContinuous() && this->isUsed()) 142 142 { 143 143 Pawn* pawn = this->carrierToPawnHelper(); 144 144 if(pawn == NULL) //!< If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed. 145 this-> destroy();146 145 this->Pickupable::destroy(); 146 147 147 //! Calculate the health that is added this tick. 148 148 float health = dt*this->getHealthRate(); … … 152 152 float fullHealth = pawn->getHealth() + health; 153 153 this->setHealth(this->getHealth()-health); 154 154 155 155 switch(this->getHealthTypeDirect()) 156 156 { … … 173 173 COUT(1) << "Invalid healthType in HealthPickup." << std::endl; 174 174 } 175 175 176 176 //! If all health has been transfered. 177 177 if(this->getHealth() == 0) … … 181 181 } 182 182 } 183 183 184 184 /** 185 185 @brief … … 189 189 { 190 190 SUPER(HealthPickup, changedUsed); 191 191 192 192 //! If the pickup is not picked up nothing must be done. 193 if(!this->isPickedUp()) 193 if(!this->isPickedUp()) //TODO: Needed? 194 194 return; 195 195 196 196 //! If the pickup has transited to used. 197 197 if(this->isUsed()) … … 201 201 Pawn* pawn = this->carrierToPawnHelper(); 202 202 if(pawn == NULL) //!< If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed. 203 this-> destroy();204 203 this->Pickupable::destroy(); 204 205 205 float health = 0; 206 206 switch(this->getHealthTypeDirect()) … … 226 226 COUT(1) << "Invalid healthType in HealthPickup." << std::endl; 227 227 } 228 228 229 229 //! The pickup has been used up. 230 230 this->setUsed(false); … … 237 237 PickupCarrier* carrier = this->getCarrier(); 238 238 Pawn* pawn = dynamic_cast<Pawn*>(carrier); 239 239 240 240 if(pawn == NULL) 241 241 { 242 242 COUT(1) << "Something went horribly wrong in Health Pickup. PickupCarrier is no Pawn." << std::endl; 243 this-> destroy();243 this->Pickupable::destroy(); 244 244 return; 245 245 } 246 246 247 247 if(pawn->getMaxHealth() == this->maxHealthOverwrite_) 248 248 { … … 252 252 } 253 253 } 254 254 255 255 //! If either the pickup can only be used once or it is continuous and used up, it is destroyed upon setting it to unused. 256 256 if(this->isOnce() || (this->isContinuous() && this->getHealth() == 0)) 257 257 { 258 this-> destroy();259 } 260 } 261 } 262 258 this->Pickupable::destroy(); 259 } 260 } 261 } 262 263 263 /** 264 264 @brief … … 271 271 PickupCarrier* carrier = this->getCarrier(); 272 272 Pawn* pawn = dynamic_cast<Pawn*>(carrier); 273 273 274 274 if(pawn == NULL) 275 275 { 276 276 COUT(1) << "Invalid PickupCarrier in HealthPickup." << std::endl; 277 277 } 278 278 279 279 return pawn; 280 280 } 281 281 282 282 /** 283 283 @brief … … 290 290 if(item == NULL) 291 291 item = new HealthPickup(this); 292 292 293 293 SUPER(HealthPickup, clone, item); 294 294 295 295 HealthPickup* pickup = dynamic_cast<HealthPickup*>(item); 296 296 pickup->setHealth(this->getHealth()); 297 297 pickup->setHealthRate(this->getHealthRate()); 298 298 pickup->setHealthTypeDirect(this->getHealthTypeDirect()); 299 299 300 300 pickup->initializeIdentifier(); 301 301 } 302 302 303 303 /** 304 304 @brief … … 322 322 } 323 323 } 324 324 325 325 /** 326 326 @brief … … 341 341 } 342 342 } 343 343 344 344 /** 345 345 @brief … … 356 356 else 357 357 { 358 COUT(1) << "Invalid healthSpeed in HealthPickup." << std::endl; 359 } 360 } 361 358 COUT(1) << "Invalid healthSpeed in HealthPickup." << std::endl; 359 } 360 } 361 362 362 /** 363 363 @brief -
code/trunk/src/modules/pickup/items/HealthPickup.h
r6709 r7163 45 45 46 46 namespace orxonox { 47 47 48 48 //! Enum for the type of the HealthPickup 49 49 namespace pickupHealthType … … 56 56 }; 57 57 } 58 58 59 59 /** 60 60 @brief … … 71 71 { 72 72 public: 73 73 74 74 HealthPickup(BaseObject* creator); //!< Constructor. 75 75 virtual ~HealthPickup(); //!< Destructor. 76 76 77 77 virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a HealthPickup object through XML. 78 78 virtual void tick(float dt); //!< Is called every tick. 79 79 80 80 virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around. 81 81 virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass. 82 82 83 83 /** 84 84 @brief Get the health that is transfered to the Pawn upon usage of this pickup. … … 93 93 inline float getHealthRate(void) 94 94 { return this->healthRate_; } 95 95 96 96 /** 97 97 @brief Get the type of HealthPickup, this pickup is. 98 @return Returns the health type as an enum. 98 @return Returns the health type as an enum. 99 99 */ 100 100 inline pickupHealthType::Value getHealthTypeDirect(void) 101 101 { return this->healthType_; } 102 102 const std::string& getHealthType(void); //!< Get the health type of this pickup. 103 103 104 104 protected: 105 105 void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup. … … 107 107 void setHealth(float health); //!< Sets the health. 108 108 void setHealthRate(float speed); //!< Set the rate at which health is transferred if the pickup is continuous. 109 109 110 110 /** 111 111 @brief Set the health type of this pickup. … … 115 115 { this->healthType_ = type; } 116 116 void setHealthType(std::string type); //!< Set the type of the HealthPickup. 117 117 118 118 private: 119 119 void initialize(void); //!< Initializes the member variables. 120 120 Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails. 121 121 122 122 float health_; //!< The health that is transferred to the Pawn. 123 123 float healthRate_; //!< The rate at which the health is transferred. … … 125 125 float maxHealthOverwrite_; //!< Helper to remember with which value we overwrote the maxHealh, to detect if someone else changed it as well. 126 126 pickupHealthType::Value healthType_; //!< The type of the HealthPickup. 127 127 128 128 //! Strings for the health types. 129 129 static const std::string healthTypeLimited_s; 130 130 static const std::string healthTypeTemporary_s; 131 131 static const std::string healthTypePermanent_s; 132 132 133 133 }; 134 134 } -
code/trunk/src/modules/pickup/items/InvisiblePickup.cc
- Property svn:eol-style set to native
r6755 r7163 34 34 #include "InvisiblePickup.h" 35 35 36 #include <sstream> 37 #include <OgreEntity.h> 38 #include <OgreAnimationState.h> 39 40 #include "util/StringUtils.h" 36 41 #include "core/CoreIncludes.h" 37 42 #include "core/XMLPort.h" 38 #include "util/StringUtils.h"39 43 40 44 #include "worldentities/pawns/Pawn.h" 41 45 #include "pickup/PickupIdentifier.h" 42 46 43 #include <sstream>44 45 47 namespace orxonox 46 48 { 47 49 48 50 CreateFactory(InvisiblePickup); 49 51 50 52 /** 51 53 @brief … … 56 58 RegisterObject(InvisiblePickup); 57 59 //! Defines who is allowed to pick up the pickup. 58 this->initialize(); 59 } 60 60 this->initialize(); 61 } 62 61 63 /** 62 64 @brief … … 64 66 */ 65 67 InvisiblePickup::~InvisiblePickup() 66 { 67 } 68 69 68 { 69 } 70 71 70 72 void InvisiblePickup::initializeIdentifier(void) 71 73 { … … 76 78 this->pickupIdentifier_->addParameter(type1, val1); 77 79 } 78 80 79 81 /** 80 82 @brief … … 93 95 void InvisiblePickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode) 94 96 { 95 SUPER(InvisiblePickup, XMLPort, xmlelement, mode); 97 SUPER(InvisiblePickup, XMLPort, xmlelement, mode); 96 98 XMLPortParam(InvisiblePickup, "duration", setDuration, getDuration, xmlelement, mode); 97 99 98 100 this->initializeIdentifier(); 99 101 } 100 102 101 103 /** 102 104 @brief … … 106 108 { 107 109 SUPER(InvisiblePickup, changedUsed); 108 110 109 111 //! If the pickup is not picked up nothing must be done. 110 112 if(!this->isPickedUp()) 111 113 return; 112 114 113 115 if (this->isUsed()) 114 116 { … … 121 123 this->startPickupTimer(this->getDuration()); 122 124 } 125 123 126 this->setInvisible(true); 127 124 128 } 125 129 else 126 130 { 127 131 this->setInvisible(false); 128 132 129 133 if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration()) 130 134 { 131 this-> destroy();135 this->Pickupable::destroy(); 132 136 } 133 137 else … … 136 140 } 137 141 } 138 139 } 140 142 143 } 144 141 145 /** 142 146 @brief … … 149 153 PickupCarrier* carrier = this->getCarrier(); 150 154 Pawn* pawn = dynamic_cast<Pawn*>(carrier); 151 155 152 156 if(pawn == NULL) 153 157 { … … 156 160 return pawn; 157 161 } 158 162 159 163 /** 160 164 @brief … … 167 171 if(item == NULL) 168 172 item = new InvisiblePickup(this); 169 173 170 174 SUPER(InvisiblePickup, clone, item); 171 175 172 176 InvisiblePickup* pickup = dynamic_cast<InvisiblePickup*>(item); 173 177 pickup->setDuration(this->getDuration()); 174 178 pickup->initializeIdentifier(); 175 179 } 176 180 177 181 /** 178 182 @brief … … 186 190 if(pawn == NULL) 187 191 return false; 188 192 189 193 pawn->setVisible(!invisibility); 194 pawn->setRadarVisibility(!invisibility); 195 196 // Test to change Material at runtime! 197 198 // Ogre::MaterialPtr mat = this->mesh_.getEntity()->getSubEntity(0)->getMaterial(); 199 // mat->setDiffuse(0.4, 0.3, 0.1, 0.1); 200 // mat->setAmbient(0.3, 0.7, 0.8); 201 // mat->setSpecular(0.5, 0.5, 0.5, 0.1); 202 // Ogre::SceneBlendType sbt = Ogre::SBT_ADD; 203 // 204 // mat->setSceneBlending(sbt); 205 190 206 return true; 191 207 } 192 208 193 209 /** 194 210 @brief … … 209 225 } 210 226 } 211 227 212 228 void InvisiblePickup::pickupTimerCallback(void) 213 229 { -
code/trunk/src/modules/pickup/items/InvisiblePickup.h
- Property svn:eol-style set to native
r6710 r7163 38 38 39 39 #include <string> 40 40 41 #include <worldentities/pawns/Pawn.h> 41 42 #include "worldentities/StaticEntity.h" 42 43 43 #include "pickup/Pickup.h" 44 44 45 45 namespace orxonox { 46 46 47 47 /** 48 48 @brief … … 57 57 { 58 58 public: 59 59 60 60 InvisiblePickup(BaseObject* creator); //!< Constructor. 61 61 virtual ~InvisiblePickup(); //!< Destructor. … … 63 63 virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around. 64 64 virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass. 65 65 66 66 /** 67 67 @brief Checks whether the Pawn is invisible. … … 72 72 inline float getDuration() 73 73 { return this->duration_; } 74 74 75 75 protected: 76 76 bool setInvisible(bool invisibility); //!< Set the Pawn to be invisible or visible again. … … 78 78 void initializeIdentifier(void); 79 79 virtual void pickupTimerCallback(void); //!< Function that gets called when the timer ends. 80 80 81 81 private: 82 82 void initialize(void); //!< Initializes the member variables. -
code/trunk/src/modules/pickup/items/MetaPickup.cc
r6709 r7163 34 34 #include "core/CoreIncludes.h" 35 35 #include "core/XMLPort.h" 36 #include "worldentities/pawns/Pawn.h" 36 37 #include "interfaces/PickupCarrier.h" 37 38 #include "pickup/PickupIdentifier.h" … … 40 41 41 42 namespace orxonox { 42 43 43 44 CreateFactory(MetaPickup); 44 45 45 46 //! Setting the static variables to their values. 46 47 /*static*/ const std::string MetaPickup::metaTypeNone_s = "none"; 47 48 /*static*/ const std::string MetaPickup::metaTypeUse_s = "use"; 48 49 /*static*/ const std::string MetaPickup::metaTypeDrop_s = "drop"; 49 50 /*static*/ const std::string MetaPickup::metaTypeDestroy_s = "destroy"; 51 /*static*/ const std::string MetaPickup::metaTypeDestroyCarrier_s = "destroyCarrier"; 52 50 53 /** 51 54 @brief … … 55 58 { 56 59 RegisterObject(MetaPickup); 57 60 58 61 this->initialize(); 59 62 } 60 63 61 64 /** 62 65 @brief … … 65 68 MetaPickup::~MetaPickup() 66 69 { 67 68 } 69 70 71 } 72 70 73 /** 71 74 @brief … … 75 78 { 76 79 this->addTarget(ClassIdentifier<PickupCarrier>::getIdentifier()); 77 80 78 81 this->setActivationTypeDirect(pickupActivationType::immediate); 79 82 this->setDurationTypeDirect(pickupDurationType::once); 80 83 this->metaType_ = pickupMetaType::none; 81 84 } 82 85 83 86 /** 84 87 @brief … … 91 94 this->pickupIdentifier_->addParameter(type, val); 92 95 } 93 96 94 97 /** 95 98 @brief … … 99 102 { 100 103 SUPER(MetaPickup, XMLPort, xmlelement, mode); 101 104 102 105 XMLPortParam(MetaPickup, "metaType", setMetaType, getMetaType, xmlelement, mode); 103 106 104 107 this->initializeIdentifier(); 105 108 } 106 109 107 110 /** 108 111 @brief … … 113 116 { 114 117 SUPER(MetaPickup, changedUsed); 115 118 116 119 //! If the MetaPickup transited to used. 117 120 if(this->isUsed()) … … 120 123 if(this->getMetaTypeDirect() != pickupMetaType::none && carrier != NULL) 121 124 { 125 if(this->getMetaTypeDirect() == pickupMetaType::destroyCarrier) 126 { 127 Pawn* pawn = orxonox_cast<Pawn*>(carrier); 128 pawn->kill(); 129 return; 130 } 122 131 std::set<Pickupable*> pickups = carrier->getPickups(); 123 //! Set all Pickupables carried by the PickupCarrier either to used or drop them, depending o the meta type.132 //! Set all Pickupables carried by the PickupCarrier either to used or drop them, depending on the meta type. 124 133 for(std::set<Pickupable*>::iterator it = pickups.begin(); it != pickups.end(); it++) 125 134 { … … 136 145 if(pickup != NULL && pickup != this) 137 146 { 138 carrier->drop(pickup); 147 pickup->drop(); 148 } 149 } 150 if(this->getMetaTypeDirect() == pickupMetaType::destroy) 151 { 152 if(pickup != NULL && pickup != this) 153 { 154 pickup->Pickupable::destroy(); 139 155 } 140 156 } 141 157 } 142 158 } 143 this-> destroy();144 } 145 } 146 159 this->Pickupable::destroy(); 160 } 161 } 162 147 163 /** 148 164 @brief … … 155 171 if(item == NULL) 156 172 item = new MetaPickup(this); 157 173 158 174 SUPER(MetaPickup, clone, item); 159 175 160 176 MetaPickup* pickup = dynamic_cast<MetaPickup*>(item); 161 177 pickup->setMetaTypeDirect(this->getMetaTypeDirect()); 162 178 163 179 pickup->initializeIdentifier(); 164 180 } 165 181 166 182 /** 167 183 @brief … … 180 196 case pickupMetaType::drop: 181 197 return MetaPickup::metaTypeDrop_s; 198 case pickupMetaType::destroy: 199 return MetaPickup::metaTypeDestroy_s; 200 case pickupMetaType::destroyCarrier: 201 return MetaPickup::metaTypeDestroyCarrier_s; 182 202 default: 183 203 return BLANKSTRING; 184 204 } 185 205 } 186 206 187 207 /** 188 208 @brief … … 205 225 this->setMetaTypeDirect(pickupMetaType::drop); 206 226 } 207 } 208 227 else if(type == MetaPickup::metaTypeDestroy_s) 228 { 229 this->setMetaTypeDirect(pickupMetaType::destroy); 230 } 231 else if(type == MetaPickup::metaTypeDestroyCarrier_s) 232 { 233 this->setMetaTypeDirect(pickupMetaType::destroyCarrier); 234 } 235 else 236 COUT(2) << "Invalid metaType '" << type << "' in MetaPickup." << std::endl; 237 } 238 209 239 } -
code/trunk/src/modules/pickup/items/MetaPickup.h
r6709 r7163 48 48 none, 49 49 use, 50 drop 50 drop, 51 destroy, 52 destroyCarrier 51 53 }; 52 54 } 53 55 54 56 /** 55 57 @brief 56 The MetaPickup is a pickup that can, depending on the parameters, either drop all pickups of the PickupCarrier that picks it up, or use all the unused pickups of the PickupCarrier, that picks it up. The parameter to set for this is the metaType and it can be used with the values 'none', 'drop' and 'use'. 58 The MetaPickup is a pickup that can, depending on the parameter 'metaType', do different things. If the 'metaType' is set to 59 1) 'use', all the pickups, the PickupCarrier has, are immediately set to used upon pickup of the MetaPickup. 60 2) 'drop', all the pickups, the PickupCarrier has, are immediately dropped upon pickup of the MetaPickup. 61 3) 'destroy', all the pickups, the PickupCarrier has, are immediately destroyed upon pickup of the MetaPickup. 62 4) 'destroyCarrier', the PickupCarrier is immediately destroyed upon pickup of the MetaPickup. 57 63 @author 58 64 Damian 'Mozork' Frick … … 60 66 class _PickupExport MetaPickup : public Pickup 61 67 { 62 68 63 69 public: 64 70 MetaPickup(BaseObject* creator); //!< Constructor. Registers and initializes the object. 65 71 virtual ~MetaPickup(); //!< Destructor. 66 72 67 73 virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a MetaPickup object through XML. 68 74 69 75 virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around. 70 76 virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass. 71 77 72 78 /** 73 79 @brief Returns the meta type of the MetaPickup. … … 77 83 { return this->metaType_; } 78 84 const std::string& getMetaType(void); //!< Get the meta type of this MetaPickup. 79 85 80 86 protected: 81 87 void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup. 82 88 83 89 /** 84 90 @brief Set the meta type of the MetaPickup. … … 88 94 { this->metaType_ = type; } 89 95 void setMetaType(const std::string& type); //!< Set the meta type of this MetaPickup. 90 96 91 97 private: 92 98 void initialize(void); //!< Initializes the member variables. 93 99 94 100 pickupMetaType::Value metaType_; //!< The meta type of the MetaPickup, determines which actions are taken. 95 101 96 102 //! Static strings for the meta types. 97 103 static const std::string metaTypeNone_s; 98 104 static const std::string metaTypeUse_s; 99 105 static const std::string metaTypeDrop_s; 100 101 106 static const std::string metaTypeDestroy_s; 107 static const std::string metaTypeDestroyCarrier_s; 108 109 102 110 }; 103 111 -
code/trunk/src/modules/pickup/items/SpeedPickup.cc
r6755 r7163 136 136 Engine* engine = this->carrierToEngineHelper(); 137 137 if(engine == NULL) //!< If the PickupCarrier is no Engine, then this pickup is useless and therefore is destroyed. 138 this-> destroy();139 138 this->Pickupable::destroy(); 139 140 140 //! If the pickup has transited to used. 141 141 if(this->isUsed()) … … 156 156 engine->setSpeedAdd(0.0f); 157 157 engine->setSpeedMultiply(1.0f); 158 158 159 159 if(this->isOnce()) 160 160 { 161 161 if(!this->getTimer()->isActive() && this->getTimer()->getRemainingTime() == this->getDuration()) 162 162 { 163 this-> destroy();163 this->Pickupable::destroy(); 164 164 } 165 165 else … … 186 186 COUT(1) << "Invalid PickupCarrier in SpeedPickup." << std::endl; 187 187 } 188 188 189 189 return engine; 190 190 } … … 269 269 270 270 void SpeedPickup::pickupTimerCallback(void) 271 { 271 { 272 272 this->setUsed(false); 273 273 } -
code/trunk/src/modules/pickup/items/SpeedPickup.h
r6709 r7163 78 78 protected: 79 79 void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup. 80 80 81 81 virtual void pickupTimerCallback(void); //!< Function that gets called when timer ends. 82 82
Note: See TracChangeset
for help on using the changeset viewer.