Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation3/src/orxonox/interfaces/Pickupable.h @ 7150

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

Untangled Pickupable and PickupCarrier a little bit.

  • Property svn:eol-style set to native
File size: 6.5 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 Pickupable.h
31    @brief Definition of the Pickupable class.
32*/
33
34#ifndef _Pickupable_H__
35#define _Pickupable_H__
36
37#include "OrxonoxPrereqs.h"
38
39#include <list>
40#include "core/Super.h"
41
42#include "core/OrxonoxClass.h"
43#include "Rewardable.h"
44
45namespace orxonox // tolua_export
46{ // tolua_export
47
48    /**
49    @brief
50        An Interface (or more precisely an abstract class) to model and represent different (all kinds of) pickups.
51    @author
52        Damian 'Mozork' Frick
53    */
54    class _OrxonoxExport Pickupable  // tolua_export
55        : virtual public OrxonoxClass, public Rewardable
56    {  // tolua_export
57        protected:
58            Pickupable(); //!< Default constructor.
59
60        public:
61            virtual ~Pickupable(); //!< Default destructor.
62
63            /**
64            @brief Get whether the pickup is currently in use or not.
65            @return Returns true if the pickup is currently in use.
66            */
67            inline bool isUsed(void) { return this->used_; }  // tolua_export
68            /**
69            @brief  Should be called when the pickup has transited from used to unused or the other way around.
70                    Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedUsed); to their changdeUsed method.
71            */
72            virtual void changedUsed(void) {}
73
74            /**
75            @brief Get the carrier of the pickup.
76            @return Returns a pointer to the carrier of the pickup.
77            */
78            inline PickupCarrier* getCarrier(void)
79                { return this->carrier_; }
80            /**
81            @brief Should be called when the pickup has changed its PickupCarrier.
82                   Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedCarrier); to their changedCarrier method.
83            */
84            virtual void changedCarrier(void) {}
85
86            /**
87            @brief Returns whether the Pickupable is currently picked up.
88            @return Returns true if the Pickupable is currently picked up, false if not.
89            */
90            inline bool isPickedUp(void) { return this->pickedUp_; }  // tolua_export
91            /**
92            @brief  Should be called when the pickup has transited from picked up to dropped or the other way around.
93                    Any Class overwriting this method must call its SUPER function by adding SUPER(Classname, changedPickedUp); to their changedPickedUp method.
94            */
95            virtual void changedPickedUp(void) {}
96
97            bool pickup(PickupCarrier* carrier);
98            bool drop(bool createSpawner = true);
99
100            virtual bool isTarget(PickupCarrier* carrier) const; //!< Get whether the given PickupCarrier is a target of this pickup.
101            bool isTarget(const Identifier* identifier) const; //!< Get whether a given class, represented by the input Identifier, is a target of this Pickupable.
102            bool addTarget(PickupCarrier* target); //!< Add a PickupCarrier as target of this pickup.
103            bool addTarget(Identifier* identifier); //!< Add a class, representetd by the input Identifier, as target of this pickup.
104
105            Pickupable* clone(void); //!< Creates a duplicate of the Pickupable.
106            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
107
108            /**
109            @brief Get the PickupIdentifier of this Pickupable.
110            @return Returns a pointer to the PickupIdentifier of this Pickupable.
111            */
112            virtual const PickupIdentifier* getPickupIdentifier(void)
113                { return this->pickupIdentifier_; }
114
115            bool setUsed(bool used); //!< Sets the Pickupable to used or unused, depending on the input.
116            bool setPickedUp(bool pickedUp); //!< Helper method to set the Pickupable to either picked up or not picked up.
117            bool setCarrier(PickupCarrier* carrier, bool tell = false); //!< Sets the carrier of the pickup.
118
119        protected:
120            /**
121            @brief Helper method to initialize the PickupIdentifier.
122            */
123            void initializeIdentifier(void) {}
124
125            /**
126            @brief Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
127                   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.:
128                   DroppedPickup(BaseObject* creator, Pickupable* pickup, const Vector3& position, float triggerDistance);
129            @param position The position at which the PickupSpawner should be placed.
130            @return Returns true if a spawner was created, false if not.
131            */
132            virtual bool createSpawner(void) = 0;
133
134            PickupIdentifier* pickupIdentifier_; //!< The PickupIdentifier of this Pickupable.
135
136        private:
137
138            bool used_; //!< Whether the pickup is currently in use or not.
139            bool pickedUp_; //!< Whether the pickup is currently picked up or not.
140
141            PickupCarrier* carrier_; //!< The carrier of the pickup.
142            std::list<Identifier*> targets_; //!< The possible targets of this pickup.
143
144        // For implementing the Rewardable interface:
145        public:
146            virtual bool reward(PlayerInfo* player); //!< Method to transcribe a Pickupable as a Rewardable to the player.
147
148    };  // tolua_export
149
150    SUPER_FUNCTION(10, Pickupable, changedUsed, false);
151    SUPER_FUNCTION(12, Pickupable, changedCarrier, false);
152    SUPER_FUNCTION(13, Pickupable, changedPickedUp, false);
153}  // tolua_export
154
155#endif /* _Pickupable_H__ */
Note: See TracBrowser for help on using the repository browser.