/*! * @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" class TiXmlElement; class ObjectManager; class Player; class ImagePlane; enum { GAMESTATE_PRE_GAME = 0, GAMESTATE_GAME, GAMESTATE_POST_GAME }; class MultiplayerTeamDeathmatch : public NetworkGameRules { public: MultiplayerTeamDeathmatch(const TiXmlElement* root = NULL); virtual ~MultiplayerTeamDeathmatch(); virtual void loadParams(const TiXmlElement* root); virtual int getTeamForNewUser(); virtual ClassID getPlayableClassId( int team ); virtual std::string getPlayableModelFileName( 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(); 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 void calculateTeamScore(); void nextGameState(); void handleTeamChanges(); void teamChange( int userId ); }; #endif /* _MULTIPLAYER_TEAM_DEATHMATCH_H */