Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/util/multiplayer_team_deathmatch.h @ 8730

Last change on this file since 8730 was 8708, checked in by bensch, 18 years ago

merged network back
merged with command:
svn merge -r8625:HEAD https://svn.orxonox.net/orxonox/branches/network .
no conflicts

File size: 2.9 KB
Line 
1
2/*!
3 * @file multiplayer_team_deathmatch.h
4 * Defines game rules for team deathmatch games
5 *
6 * currently there are only two teams supported
7 */
8
9#ifndef _MULTIPLAYER_TEAM_DEATHMATCH_H
10#define _MULTIPLAYER_TEAM_DEATHMATCH_H
11
12#include "network_game_rules.h"
13
14#include "glgui.h"
15#include "specials/glgui_notifier.h"
16
17class TiXmlElement;
18class ObjectManager;
19class Player;
20class ImagePlane;
21
22enum
23{
24  GAMESTATE_PRE_GAME = 0,
25  GAMESTATE_GAME,
26  GAMESTATE_POST_GAME
27};
28
29
30class MultiplayerTeamDeathmatch : public NetworkGameRules, public EventListener
31{
32
33  public:
34    MultiplayerTeamDeathmatch(const TiXmlElement* root = NULL);
35    virtual ~MultiplayerTeamDeathmatch();
36
37    virtual void loadParams(const TiXmlElement* root);
38
39    virtual int getTeamForNewUser();
40    virtual ClassID getPlayableClassId( int userId, int team );
41    virtual std::string getPlayableModelFileName( int userId, int team, ClassID classId );
42
43    virtual void onPlayerSpawn();
44    virtual void onPlayerDeath();
45
46
47    virtual void tick(float dt);
48    void draw();
49
50    inline void setDeathPenaltyTimeout(float time) { this->deathTimeout = time; }
51    inline void setMaxKills(int kills) { this->maxKills = kills; }
52    void setDeathScreen(const std::string& imageName);
53   
54    inline void setNumTeams( int numTeams ){ this->numTeams = numTeams; }
55    inline int getNumTeams(){ return this->numTeams; }
56   
57    int getRandomTeam();
58   
59    virtual void process(const Event &event);
60   
61    virtual void handleChatMessage( int userId, const std::string & message, int messageType );
62
63  protected:
64    virtual void checkGameRules();
65
66  private:
67    bool               bLocalPlayerDead;           //!< true if the local player is dead
68    float              deathTimeout;               //!< timeout a player cannot play if he/she dies
69    float              timeout;                    //!< time counted if player dead
70    int                maxKills;                   //!< max kills for winning condition
71
72    int                numTeams;                   //!< number of teams
73
74    std::map<int,int>  teamScore;                  //!< team score
75
76    ImagePlane*        deathScreen;                //!< the death screen
77
78    int                currentGameState;           //!< game state
79    float              gameStateTimer;             //!< if less than 0 -> change game state
80
81    bool               bShowTeamChange;            //!< if true -> show team change dialog
82
83    OrxGui::GLGuiBox* box;
84   
85    OrxGui::GLGuiNotifier* notifier;
86    OrxGui::GLGuiInputLine* input;
87   
88    void calculateTeamScore();
89    void nextGameState();
90    void handleTeamChanges();
91    void teamChange( int userId );
92    void assignPlayable();
93   
94    void onButtonSpectator();
95    void onButtonRandom();
96    void onButtonTeam0();
97    void onButtonTeam1();
98    void onButtonCancel();
99    void onButtonExit();
100   
101    void onInputEnter( const std::string & text );
102};
103
104
105#endif /* _MULTIPLAYER_TEAM_DEATHMATCH_H */
Note: See TracBrowser for help on using the repository browser.