Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gametypes/src/orxonox/objects/gametypes/Gametype.h @ 2970

Last change on this file since 2970 was 2970, checked in by Aurelian, 15 years ago

Added timer in class gametype, timer working in asteroids, modified checkpoint with firstCheckPoint… working! yeepa ;-)

  • Property svn:eol-style set to native
File size: 5.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 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _Gametype_H__
30#define _Gametype_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include <map>
35
36#include "core/BaseObject.h"
37#include "core/Identifier.h"
38#include "objects/worldentities/ControllableEntity.h"
39#include "objects/Tickable.h"
40#include "objects/infos/GametypeInfo.h"
41
42namespace orxonox
43{
44    namespace PlayerState
45    {
46        enum Enum
47        {
48            Uninitialized,
49            Joined,
50            Alive,
51            Dead
52        };
53    }
54
55    struct Player
56    {
57        PlayerInfo* info_;
58        PlayerState::Enum state_;
59        int frags_;
60        int killed_;
61    };
62
63    class _OrxonoxExport Gametype : public BaseObject, public Tickable
64    {
65        friend class PlayerInfo;
66
67        public:
68            Gametype(BaseObject* creator);
69            virtual ~Gametype() {}
70
71            void setConfigValues();
72
73            virtual void tick(float dt);
74
75            inline const GametypeInfo* getGametypeInfo() const
76                { return &this->gtinfo_; }
77
78            inline bool hasStarted() const
79                { return this->gtinfo_.bStarted_; }
80            inline bool hasEnded() const
81                { return this->gtinfo_.bEnded_; }
82
83            virtual void start();
84            virtual void end();
85            virtual void playerEntered(PlayerInfo* player);
86            virtual bool playerLeft(PlayerInfo* player);
87            virtual void playerSwitched(PlayerInfo* player, Gametype* newgametype);
88            virtual void playerSwitchedBack(PlayerInfo* player, Gametype* oldgametype);
89            virtual bool playerChangedName(PlayerInfo* player);
90
91            virtual void playerScored(PlayerInfo* player);
92
93            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = 0);
94            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0);
95            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0);
96
97            virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
98            virtual void pawnPreSpawn(Pawn* pawn);
99            virtual void pawnPostSpawn(Pawn* pawn);
100            virtual void playerPreSpawn(PlayerInfo* player);
101            virtual void playerPostSpawn(PlayerInfo* player);
102
103            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn);
104            virtual void playerStopsControllingPawn(PlayerInfo* player, Pawn* pawn);
105
106            inline const std::map<PlayerInfo*, Player>& getPlayers() const
107                { return this->players_; }
108
109            inline void registerSpawnPoint(SpawnPoint* spawnpoint)
110                { this->spawnpoints_.insert(spawnpoint); }
111
112            inline bool isStartCountdownRunning() const
113                { return this->gtinfo_.bStartCountdownRunning_; }
114            inline float getStartCountdown() const
115                { return this->gtinfo_.startCountdown_; }
116
117            inline void setHUDTemplate(const std::string& name)
118                { this->gtinfo_.hudtemplate_ = name; }
119            inline const std::string& getHUDTemplate() const
120                { return this->gtinfo_.hudtemplate_; }
121
122            void addBots(unsigned int amount);
123            void killBots(unsigned int amount = 0);
124
125            inline unsigned int getNumberOfPlayers() const
126                { return this->players_.size(); }
127
128            virtual void addTime(float t);
129            virtual void removeTime(float t);
130
131            inline  void startTimer()
132              { this->timerIsActive_ = true; }
133
134            inline void stopTimer()
135              { this->timerIsActive_ = false; }
136
137            inline float getTime()
138              { return this->time_; }
139
140            inline bool getTimerIsActive()
141              { return timerIsActive_; }
142
143            virtual void resetTimer();
144            virtual void resetTimer(float t);
145
146        protected:
147            virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const;
148
149            virtual void assignDefaultPawnsIfNeeded();
150            virtual void checkStart();
151            virtual void spawnPlayer(PlayerInfo* player);
152            virtual void spawnPlayerAsDefaultPawn(PlayerInfo* player);
153            virtual void spawnPlayersIfRequested();
154            virtual void spawnDeadPlayersIfRequested();
155
156            GametypeInfo gtinfo_;
157
158            bool bAutoStart_;
159            bool bForceSpawn_;
160
161            float time_;
162            float timeLimit_;
163            bool timerIsActive_;
164
165            float initialStartCountdown_;
166            unsigned int numberOfBots_;
167
168            std::map<PlayerInfo*, Player> players_;
169            std::set<SpawnPoint*> spawnpoints_;
170            SubclassIdentifier<ControllableEntity> defaultControllableEntity_;
171
172            OverlayGroup* scoreboard_;
173
174            // Config Values
175            std::string scoreboardTemplate_;
176    };
177}
178
179#endif /* _Gametype_H__ */
Note: See TracBrowser for help on using the repository browser.