Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation3/src/modules/pickup/PickupSpawner.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: 5.0 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 *      Daniel 'Huty' Haggenmueller
24 *   Co-authors:
25 *      Damian 'Mozork' Frick
26 *
27 */
28
29/**
30    @file PickupSpawner.h
31    @brief Definition of the PickupSpawner class.
32*/
33
34#ifndef _PickupSpawner_H__
35#define _PickupSpawner_H__
36
37#include "PickupPrereqs.h"
38
39#include <string>
40#include "interfaces/Pickupable.h"
41#include "tools/Timer.h"
42
43#include "tools/interfaces/Tickable.h"
44#include "worldentities/StaticEntity.h"
45
46namespace orxonox
47{
48    /**
49        @brief
50            The PickupSpawner class is responsible for spawning pickups of a specific type.
51            Forthermore it can be specified how long the time interval between spawning two items is and how many pickups are spawned at maximum, amongst other things.
52        @author
53            Daniel 'Huty' Haggenmueller
54            Damian 'Mozork' Frick
55    */
56    class _PickupExport PickupSpawner : public StaticEntity, public Tickable
57    {
58        public:
59            PickupSpawner(BaseObject* creator); //!< Default Constructor.
60            PickupSpawner(BaseObject* creator, Pickupable* pickup, float triggerDistance, float respawnTime, int maxSpawnedItems); //!< Constructor.
61            virtual ~PickupSpawner(); //!< Destructor.
62
63            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);  //!< Method for creating a PickupSpawner through XML.
64            virtual void changedActivity(); //!< Invoked when activity has changed (set visibilty).
65            virtual void tick(float dt);
66
67            /**
68            @brief Get the distance in which to trigger.
69            @return Returns the distance in which this gets triggered.
70            */
71            inline float getTriggerDistance() const
72                { return this->triggerDistance_; }
73            /**
74            @brief Set the distance in which to trigger.
75            @param value The new distance in which to trigger.
76            */
77            inline void setTriggerDistance(float value)
78                { this->triggerDistance_ = value; }
79
80            /**
81            @brief Get the time to respawn.
82            @returns Returns the time after which this gets re-actived.
83            */
84            inline float getRespawnTime() const
85                { return this->respawnTime_; }
86            /**
87            @brief Set the time to respawn.
88            @param time New time after which this gets re-actived.
89            */
90            inline void setRespawnTime(float time)
91                { this->respawnTime_ = time; }
92
93            /**
94            @brief Get the maximum number of items that will be spawned by this PickupSpawner.
95            @return Returns the maximum number of items spawned by this PickupSpawner.
96            */
97            inline int getMaxSpawnedItems(void)
98                { return this->maxSpawnedItems_; }
99            void setMaxSpawnedItems(int items); //!< Sets the maximum number of spawned items.
100
101        protected:
102            void decrementSpawnsRemaining(void); //!< Decrements the number of remaining spawns.
103
104            void startRespawnTimer(void);
105
106            virtual Pickupable* getPickup(void); //!< Creates a new Pickupable.
107
108            void setPickupable(Pickupable* pickup); //!< Sets a Pickupable for the PickupSpawner to spawn.
109            const Pickupable* getPickupable(void); //!< Get the Pickupable that is spawned by this PickupSpawner.
110
111            Pickupable* pickup_; //!< The pickup to be spawned.
112
113        private:
114            void initialize(void);
115
116            void trigger(Pawn* pawn); //!< Method called when a Pawn is close enough.
117            void respawnTimerCallback(); //!< Method called when the timer runs out.
118
119            int maxSpawnedItems_; //!< Maximum number of items spawned by this PickupSpawner.
120            int spawnsRemaining_; //!< Number of items that can be spawned by this PickupSpawner until it selfdestructs.
121
122            float triggerDistance_; //!< Distance in which this gets triggered.
123
124            float respawnTime_; //!< Time after which this gets re-actived.
125            Timer respawnTimer_; //!< Timer used for re-activating.
126
127            bool selfDestruct_; //!< True if the PickupSpawner is selfdestructing.
128
129            static const int INF = -1; //!< Constant for infinity.
130    };
131}
132
133#endif /* _PickupSpawner_H__ */
Note: See TracBrowser for help on using the repository browser.