Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 8937 was 8802, checked in by patrick, 18 years ago

merged the network branche back to trunk

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