Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/gametypes/Gametype.h @ 8178

Last change on this file since 8178 was 8178, checked in by jo, 13 years ago

Merged lastmastanding3 into trunk. There's an xml parsing error that only appeared after merging. The level seems to load properly though.

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