Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/interfaces/Pickupable.h @ 7494

Last change on this file since 7494 was 7494, checked in by dafrick, 15 years ago

Some documenting and cleaning up/re-organization in pickups module.

  • Property svn:eol-style set to native
File size: 8.8 KB
RevLine 
[6405]1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Damian 'Mozork' Frick
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
[6538]30    @file Pickupable.h
[6405]31    @brief Definition of the Pickupable class.
[7456]32    @ingroup Pickup
[6405]33*/
34
35#ifndef _Pickupable_H__
36#define _Pickupable_H__
37
38#include "OrxonoxPrereqs.h"
39
[6474]40#include <list>
[6405]41#include "core/Super.h"
42
[6474]43#include "core/OrxonoxClass.h"
[7163]44#include "Rewardable.h"
[6474]45
[7163]46namespace orxonox // tolua_export
47{ // tolua_export
48
[6405]49    /**
50    @brief
[6474]51        An Interface (or more precisely an abstract class) to model and represent different (all kinds of) pickups.
[7494]52
53        Pickups (@ref orxonox:Pickupable "Pickupables") are objects that (quite unsurprisingly) can be picked up. Additionally they can be used and unused (transition from used to not used), and also dropped.
54
55        A class of Pickups can incorporate many different types of pickups (see @ref orxonox::PickupIdentifier "PickupIdentifier"), each type is uniquely defined by a @ref orxonox::PickupIdentifier "PickupIdentifier". Each pickup has such an identifier identiying its type. This means that two pickups of the same type have identifiers which are equal.
56
[6405]57    @author
58        Damian 'Mozork' Frick
59    */
[7163]60    class _OrxonoxExport Pickupable  // tolua_export
61        : virtual public OrxonoxClass, public Rewardable
62    {  // tolua_export
[6540]63        protected:
64            Pickupable(); //!< Default constructor.
[7163]65
[6405]66        public:
[6474]67            virtual ~Pickupable(); //!< Default destructor.
[7163]68
[6405]69            /**
[7494]70            @brief Get whether the Pickupable is currently in use or not.
71            @return Returns true if the Pickupable is currently in use.
[6405]72            */
[7163]73            inline bool isUsed(void) { return this->used_; }  // tolua_export
[6474]74            /**
[7494]75            @brief  Should be called when the Pickupable has transited from used to unused or the other way around.
[6474]76                    Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedUsed); to their changdeUsed method.
77            */
78            virtual void changedUsed(void) {}
[7163]79
[6474]80            /**
[7494]81            @brief Get the carrier of the Pickupable.
82            @return Returns a pointer to the carrier of the Pickupable.
[6521]83            */
84            inline PickupCarrier* getCarrier(void)
85                { return this->carrier_; }
86            /**
[7494]87            @brief Should be called when the Pickupable has changed its PickupCarrier.
[6521]88                   Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedCarrier); to their changedCarrier method.
89            */
90            virtual void changedCarrier(void) {}
[7163]91
[6521]92            /**
[6474]93            @brief Returns whether the Pickupable is currently picked up.
94            @return Returns true if the Pickupable is currently picked up, false if not.
95            */
[7163]96            inline bool isPickedUp(void) { return this->pickedUp_; }  // tolua_export
[6521]97            /**
[7494]98            @brief  Should be called when the Pickupable has transited from picked up to dropped or the other way around.
[6521]99                    Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedPickedUp); to their changedPickedUp method.
100            */
[6523]101            virtual void changedPickedUp(void) {}
[7163]102
103            /**
104            @brief Returns whether the Pickupable can be used.
105            @return Returns true if it can be used.
106            */
107            inline bool isUsable(void) { return this->enabled_; } // tolua_export
[6521]108           
[7163]109            /**
110            @brief Returns whether the Pickupable can be unused.
111            @return Returns true if it can be unused.
112            */
113            inline bool isUnusable(void) { return this->enabled_; } // tolua_export
114
115            /**
116            @brief Returns whether the Pickupable is enabled.
117                   Once a Pickupable is disabled it cannot be enabled again. A Pickupable that is disabled can neither be used nor unused.
118            @return Returns true if the Pickupable is enabled.
119            */
120            inline bool isEnabled(void)
121                { return this->enabled_; }
122
123            bool pickup(PickupCarrier* carrier); //!< Can be called to pick up a Pickupable.
124            bool drop(bool createSpawner = true); //!< Can be called to drop a Pickupable.
125
[7494]126            virtual bool isTarget(PickupCarrier* carrier) const; //!< Get whether the given PickupCarrier is a target of this Pickupable.
[6731]127            bool isTarget(const Identifier* identifier) const; //!< Get whether a given class, represented by the input Identifier, is a target of this Pickupable.
[7494]128            bool addTarget(PickupCarrier* target); //!< Add a PickupCarrier as target of this Pickupable.
129            bool addTarget(Identifier* identifier); //!< Add a class, representetd by the input Identifier, as target of this Pickupable.
[7163]130
[6474]131            Pickupable* clone(void); //!< Creates a duplicate of the Pickupable.
[6497]132            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
[7163]133
[6474]134            /**
135            @brief Get the PickupIdentifier of this Pickupable.
136            @return Returns a pointer to the PickupIdentifier of this Pickupable.
137            */
138            virtual const PickupIdentifier* getPickupIdentifier(void)
[6475]139                { return this->pickupIdentifier_; }
[7163]140
[6521]141            bool setUsed(bool used); //!< Sets the Pickupable to used or unused, depending on the input.
142            bool setPickedUp(bool pickedUp); //!< Helper method to set the Pickupable to either picked up or not picked up.
[7163]143            //TODO: private?
[7494]144            bool setCarrier(PickupCarrier* carrier, bool tell = true); //!< Sets the carrier of the Pickupable.
[7163]145
146            //TODO: private?
147            virtual void carrierDestroyed(void); //!< Is called by the PickupCarrier when it is being destroyed.
148
[7494]149            void destroy(void); //!< Is called internally within the Pickupable module to destroy pickups.
[7163]150
[6466]151        protected:
[6474]152            /**
153            @brief Helper method to initialize the PickupIdentifier.
154            */
[6466]155            void initializeIdentifier(void) {}
[7163]156
157            virtual void preDestroy(void); //!< A method that is called by OrxonoxClass::destroy() before the object is actually destroyed.
158            virtual void destroyPickup(void); //!< Destroys a Pickupable.
159
[6475]160            /**
[7163]161            @brief Sets the Pickuapble to disabled.
162            */
163            inline void setDisabled(void)
164                { this->enabled_ = false; }
165
166            /**
[6475]167            @brief Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
168                   This method must be implemented by any class directly inheriting from Pickupable. It is most easily done by just creating a new DroppedPickup, e.g.:
[7401]169                   DroppedPickup(BaseObject* creator, Pickupable* pickup, PickupCarrier* carrier, float triggerDistance);
[6475]170            @return Returns true if a spawner was created, false if not.
171            */
[6540]172            virtual bool createSpawner(void) = 0;
[7163]173
[6475]174            PickupIdentifier* pickupIdentifier_; //!< The PickupIdentifier of this Pickupable.
[7163]175
[6405]176        private:
177
[7163]178            bool used_; //!< Whether the Pickupable is currently in use or not.
179            bool pickedUp_; //!< Whether the Pickupable is currently picked up or not.
180
181            bool enabled_; //!< Whether the Pickupable is enabled or not.
182
183            PickupCarrier* carrier_; //!< The PickupCarrier of the Pickupable.
184            std::list<Identifier*> targets_; //!< The possible targets of this Pickupable.
185
186            bool beingDestroyed_; //!< Is true if the Pickupable is in the process of being destroyed.
187
188        // For implementing the Rewardable interface:
189        public:
190            virtual bool reward(PlayerInfo* player); //!< Method to transcribe a Pickupable as a Rewardable to the player.
191
192    };  // tolua_export
193
[7494]194    //! SUPER functions.
[6466]195    SUPER_FUNCTION(10, Pickupable, changedUsed, false);
196    SUPER_FUNCTION(12, Pickupable, changedCarrier, false);
[6521]197    SUPER_FUNCTION(13, Pickupable, changedPickedUp, false);
[7163]198}  // tolua_export
[6405]199
200#endif /* _Pickupable_H__ */
Note: See TracBrowser for help on using the repository browser.