Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/dockingsystem/src/modules/pickup/Pickup.h @ 8194

Last change on this file since 8194 was 8194, checked in by dafrick, 13 years ago

Merging trunk into dockingsystem branch to be able to use the recent bugfix in MultiTrigger.

  • Property svn:eol-style set to native
File size: 7.6 KB
Line 
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/**
30    @file Pickup.h
31    @brief Declaration of the Pickup class.
32    @ingroup Pickup
33*/
34
35#ifndef _Pickup_H__
36#define _Pickup_H__
37
38#include "pickup/PickupPrereqs.h"
39
40#include "core/BaseObject.h"
41#include "core/XMLPort.h"
42#include "tools/Timer.h"
43
44#include "CollectiblePickup.h"
45
46namespace orxonox
47{
48
49    /**
50    @brief
51        Enum for the @ref orxonox::Pickup "Pickup" activation type.
52
53    @ingroup Pickup
54    */
55    namespace pickupActivationType
56    {
57        enum Value
58        {
59            immediate, //!< Means that the @ref orxonox::Pickup "Pickup" will be used immediately after pickup.
60            onUse, //!< Means that the @ref orxonox::Pickup "Pickup" will be used at a later point trough some external influence.
61        };
62    }
63
64    /**
65    @brief
66        Enum for the @ref orxonox::Pickup "Pickup" duration type.
67
68    @ingroup Pickup
69    */
70    namespace pickupDurationType
71    {
72        enum Value
73        {
74            once, //!< Means that the @ref orxonox::Pickup "Pickup" will be used only once at a singular time instant.
75            continuous, //!< Means that the @ref orxonox::Pickup "Pickup" will be used over a continuous timespan.
76        };
77    }
78
79    /**
80    @brief
81        The Pickup class offers (useful) base functionality for a wide range of pickups.
82
83        Pickups inheriting from this class can choose an activation type and a duration type.
84        - The <b>activationType</b> deals with what happens to the Pickup as soon as it is picked up. It can either be set to <em>immediate</em>, which means that the Pickup is activated/used immediately upon being picked up. Or to <em>onUse</em>, which means, that the Pickup will be activated/used if some outside entity (most commonly the player through the PickupInventory) decides to use it. Default is <em>immediate</em>.
85        - The <b>durationType</b> deals with whether the Pickup has a continuous effect or whether its effect is focused on a singular instant. It can either be set to <em>once</em>, which means, that the Pickup just has an effect (at a singular instant in time) and is done once that effect has been applied. Or to <em>continuous</em>, which means that the effect of the Pickup unfolds over some timespan. Default is <em>once</em>.
86
87        If it were not an abstract class it could for example be used as follows in XML.
88        @code
89        <Pickup activationType="onUse" durationType="continuous" />
90        @endcode
91        In reality you can (naturally) use the parameters <b>activation type</b> and <b>duration type</b> in any pickup inheriting from Pickup, unless the pickup already specifies one (or both) of the parameters.
92
93    @author
94        Damian 'Mozork' Frick
95
96    @ingroup Pickup
97    */
98    class _PickupExport Pickup : public CollectiblePickup, public BaseObject
99    {
100
101        public:
102            Pickup(BaseObject* creator); //!< Constructor.
103            virtual ~Pickup(); //!< Destructor.
104
105            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
106
107            /**
108            @brief Get the activation type of the Pickup.
109            @return Returns the activation type of the Pickup.
110            */
111            inline pickupActivationType::Value getActivationTypeDirect(void) const
112                { return this->activationType_; }
113            /**
114            @brief Get the duration type of the Pickup.
115            @return Returns the duration type of the Pickup.
116            */
117            inline pickupDurationType::Value getDurationTypeDirect(void) const
118                { return this->durationType_; }
119
120            const std::string& getActivationType(void) const; //!< Get the activation type of the Pickup.
121            const std::string& getDurationType(void) const; //!< Get the duration type of the Pickup.
122
123            /**
124            @brief Get whether the activation type is 'immediate'.
125            @return Returns true if the activation type is 'immediate'.
126            */
127            inline bool isImmediate(void) const
128                { return this->getActivationTypeDirect() == pickupActivationType::immediate; }
129            /**
130            @brief Get whether the activation type is 'onUse'.
131            @return Returns true if the activation type is 'onUse'.
132            */
133            inline bool isOnUse(void) const
134                { return this->getActivationTypeDirect() == pickupActivationType::onUse; }
135            /**
136            @brief Get whether the duration type is 'once'.
137            @return Returns true if the duration type is 'once'.
138            */
139            inline bool isOnce(void) const
140                { return this->getDurationTypeDirect() == pickupDurationType::once; }
141            /**
142            @brief Get whether the duration type is 'continuous'.
143            @return Returns true if the duration type is 'continuous'.
144            */
145            inline bool isContinuous(void) const
146                { return this->getDurationTypeDirect() == pickupDurationType::continuous; }
147
148            virtual void changedPickedUp(void); //!< Should be called when the pickup has transited from picked up to dropped or the other way around.
149            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the OrxonoxClass.
150
151        protected:
152            void initializeIdentifier(void);
153
154            virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
155
156            /**
157            @brief Set the activation type of the Pickup.
158            @param type The activation type of the Pickup.
159            */
160            inline void setActivationTypeDirect(pickupActivationType::Value type)
161                { this->activationType_ = type; }
162            /**
163            @brief Set the duration type of the Pickup.
164            @param type The duration type of the Pickup.
165            */
166            inline void setDurationTypeDirect(pickupDurationType::Value type)
167                { this->durationType_ = type; }
168
169            void setActivationType(const std::string& type); //!< Set the activation type of the Pickup.
170            void setDurationType(const std::string& type); //!< Set the duration type of the Pickup.
171
172        private:
173            void initialize(void); //!< Initializes the member variables.
174
175            pickupActivationType::Value activationType_; //!< The activation type of the Pickup.
176            pickupDurationType::Value durationType_; //!< The duration type of the Pickup.
177
178            //! Strings for the activation and duration types.
179            static const std::string activationTypeImmediate_s;
180            static const std::string activationTypeOnUse_s;
181            static const std::string durationTypeOnce_s;
182            static const std::string durationTypeContinuous_s;
183    };
184
185}
186#endif // _Pickup_H__
Note: See TracBrowser for help on using the repository browser.