Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation3/src/modules/pickup/Pickup.h @ 7162

Last change on this file since 7162 was 7162, checked in by dafrick, 14 years ago

Significant structural changes to the pickup module. Lots of bugs found and fixed.
Introduced a new class CollectiblePickup (which is now the only kind a PickupCollection can consist of) to solve some issues cleanly.
MetaPickup received additional functionality. It can now also be set to either destroy all the pickups of a PickupCarrier or destroy the PickupCarrier itself. (This was done mainly for testing purposes)
I've done some extensive testing on the pickups, so they should really work now.

  • Property svn:eol-style set to native
File size: 6.4 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*/
33
34#ifndef _Pickup_H__
35#define _Pickup_H__
36
37#include "pickup/PickupPrereqs.h"
38
39#include "core/BaseObject.h"
40#include "core/XMLPort.h"
41
42#include "CollectiblePickup.h"
43
44#include "tools/Timer.h"
45
46namespace orxonox
47{
48
49    //! Enum for the activation type.
50    namespace pickupActivationType
51    {
52        enum Value
53        {
54            immediate,
55            onUse,
56        };
57    }
58
59    //! Enum for the duration tyoe.
60    namespace pickupDurationType
61    {
62        enum Value
63        {
64            once,
65            continuous,
66        };
67    }
68
69    /**
70    @brief
71        Pickup class. Offers base functionality for a wide range of pickups.
72        Pickups ingeriting from this class cann choose an activation type and a duration type.
73    @author
74        Damian 'Mozork' Frick
75    */
76    class _PickupExport Pickup : public CollectiblePickup, public BaseObject
77    {
78
79        public:
80            Pickup(BaseObject* creator); //!< Constructor.
81            virtual ~Pickup(); //!< Destructor.
82
83            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
84
85            /**
86            @brief Get the activation type of the pickup.
87            @return Returns the activation type of the pickup.
88            */
89            inline pickupActivationType::Value getActivationTypeDirect(void)
90                { return this->activationType_; }
91            /**
92            @brief Get the duration type of the pickup.
93            @return Returns the duration type of the pickup.
94            */
95            inline pickupDurationType::Value getDurationTypeDirect(void)
96                { return this->durationType_; }
97
98            const std::string& getActivationType(void); //!< Get the activation type of the pickup.
99            const std::string& getDurationType(void); //!< Get the duration type of the pickup.
100
101            /**
102            @brief Get whether the activation type is 'immediate'.
103            @return Returns true if the activation type is 'immediate'.
104            */
105            inline bool isImmediate(void)
106                { return this->getActivationTypeDirect() == pickupActivationType::immediate; }
107            /**
108            @brief Get whether the activation type is 'onUse'.
109            @return Returns true if the activation type is 'onUse'.
110            */
111            inline bool isOnUse(void)
112                { return this->getActivationTypeDirect() == pickupActivationType::onUse; }
113            /**
114            @brief Get whether the duration type is 'once'.
115            @return Returns true if the duration type is 'once'.
116            */
117            inline bool isOnce(void)
118                { return this->getDurationTypeDirect() == pickupDurationType::once; }
119            /**
120            @brief Get whether the duration type is 'continuous'.
121            @return Returns true if the duration type is 'continuous'.
122            */
123            inline bool isContinuous(void)
124                { return this->getDurationTypeDirect() == pickupDurationType::continuous; }
125
126            virtual void changedPickedUp(void); //!< Should be called when the pickup has transited from picked up to dropped or the other way around.
127
128            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the Pickup.
129
130        protected:
131            void initializeIdentifier(void);
132
133            virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
134
135            bool startPickupTimer(float durationTime); //!< Starts the pickup duration timer.
136            /**
137            @brief Get your Timer.
138            @return Returns a pointer to the Timer.
139            */
140            inline Timer* getTimer(void)
141                { return &this->durationTimer_; }
142
143            /**
144            @brief The callback method for the Timer.
145                   Can be overloaded to implement desired functionality.
146            */
147            virtual void pickupTimerCallback(void) {}
148
149            /**
150            @brief Set the activation type of the pickup.
151            @param type The activation type of the pickup.
152            */
153            inline void setActivationTypeDirect(pickupActivationType::Value type)
154                { this->activationType_ = type; }
155            /**
156            @brief Set the duration type of the pickup.
157            @param type The duration type of the pickup.
158            */
159            inline void setDurationTypeDirect(pickupDurationType::Value type)
160                { this->durationType_ = type; }
161
162            void setActivationType(const std::string& type); //!< Set the activation type of the pickup.
163            void setDurationType(const std::string& type); //!< Set the duration type of the pickup
164
165        private:
166            void initialize(void); //!< Initializes the member variables.
167
168            //TODO: Problems, when there are more Timers needed? Solutions?
169            Timer durationTimer_; //!< Timer at the disposal of each Class implementing Pickup.
170
171            pickupActivationType::Value activationType_; //!< The activation type of the Pickup.
172            pickupDurationType::Value durationType_; //!< The duration type of the pickup.
173
174            //! Strings for the activation and duration types.
175            static const std::string activationTypeImmediate_s;
176            static const std::string activationTypeOnUse_s;
177            static const std::string durationTypeOnce_s;
178            static const std::string durationTypeContinuous_s;
179    };
180
181}
182#endif // _Pickup_H__
Note: See TracBrowser for help on using the repository browser.