/*! * @file multiplayer_team_deathmatch.h * Defines game rules for team deathmatch games * * currently there are only two teams supported */ #ifndef _MULTIPLAYER_TEAM_DEATHMATCH_H #define _MULTIPLAYER_TEAM_DEATHMATCH_H #include "network_game_rules.h" #include "glgui.h" class TiXmlElement; class ObjectManager; class Player; class ImagePlane; enum { GAMESTATE_PRE_GAME = 0, GAMESTATE_GAME, GAMESTATE_POST_GAME }; class MultiplayerTeamDeathmatch : public NetworkGameRules, public EventListener { public: MultiplayerTeamDeathmatch(const TiXmlElement* root = NULL); virtual ~MultiplayerTeamDeathmatch(); virtual void loadParams(const TiXmlElement* root); virtual int getTeamForNewUser(); virtual ClassID getPlayableClassId( int userId, int team ); virtual std::string getPlayableModelFileName( int userId, int team, ClassID classId ); virtual void onPlayerSpawn(); virtual void onPlayerDeath(); virtual void tick(float dt); void draw(); inline void setDeathPenaltyTimeout(float time) { this->deathTimeout = time; } inline void setMaxKills(int kills) { this->maxKills = kills; } void setDeathScreen(const std::string& imageName); inline void setNumTeams( int numTeams ){ this->numTeams = numTeams; } inline int getNumTeams(){ return this->numTeams; } int getRandomTeam(); virtual void process(const Event &event); virtual void handleChatMessage( int userId, const std::string & message, int messageType ); protected: virtual void checkGameRules(); private: bool bLocalPlayerDead; //!< true if the local player is dead float deathTimeout; //!< timeout a player cannot play if he/she dies float timeout; //!< time counted if player dead int maxKills; //!< max kills for winning condition int numTeams; //!< number of teams std::map teamScore; //!< team score ImagePlane* deathScreen; //!< the death screen int currentGameState; //!< game state float gameStateTimer; //!< if less than 0 -> change game state bool bShowTeamChange; //!< if true -> show team change dialog OrxGui::GLGuiBox* box; void calculateTeamScore(); void nextGameState(); void handleTeamChanges(); void teamChange( int userId ); void assignPlayable(); void onButtonSpectator(); void onButtonRandom(); void onButtonTeam0(); void onButtonTeam1(); void onButtonCancel(); void onButtonExit(); }; #endif /* _MULTIPLAYER_TEAM_DEATHMATCH_H */