etqw-sdk/source/game/roles/FireTeams.h

204 lines
7.5 KiB
C
Raw Normal View History

2008-05-29 00:00:00 +00:00
// Copyright (C) 2007 Id Software, Inc.
//
#ifndef __GAME_ROLES_FIRETEAMS_H__
#define __GAME_ROLES_FIRETEAMS_H__
typedef sdPair< idPlayer*, int > recentlyRejected_t;
class sdFireTeam {
public:
typedef enum fireteamMessageType_e {
FM_FULLSTATE,
FM_ADDMEMBER,
FM_REMOVEMEMBER,
FM_PROMOTEMEMBER,
FM_SETPRIVATE,
FM_SETNAME,
FM_NUM_MESSAGES,
} fireteamMessageType_t;
class sdFireTeamMessage : public sdReliableServerMessage {
public:
sdFireTeamMessage( const sdFireTeam* fireTeam, fireteamMessageType_t type ) : sdReliableServerMessage( GAME_RELIABLE_SMESSAGE_FIRETEAM ) {
WriteBits( type, idMath::BitsForInteger( FM_NUM_MESSAGES ) );
WriteBits( fireTeam->GetHandle(), _fireTeamBits );
}
};
public:
sdFireTeam( void );
~sdFireTeam( void );
void Init( int index );
void Clear( void );
void Think( void );
qhandle_t GetHandle( void ) const { return _index; }
const char* GetName( void ) const { return _name; }
void AddMember( int clientNum );
void RemoveMember( int clientNum );
void PromoteMember( int clientNum );
void SetName( const char* name );
void SetDefaultName( const char* name );
void SetGameTeam( sdTeamInfo* team ) { _team = team; }
void Invite( idPlayer* other );
void Propose( idPlayer* other, idPlayer* member );
void Request( idPlayer* other );
void Disband( void );
void SendDisbandMessage( void );
void SetPrivate( bool isPrivate );
bool IsPrivate() const { return _private; }
int GetNumMembers( void ) const { return _members.Num(); }
idPlayer* GetMember( int index ) const { return gameLocal.GetClient( _members[ index ] ); }
void WriteInitialState( const sdReliableMessageClientInfoBase& target ) const;
void ReadInitialState( const idBitMsg& msg );
void HandleMessage( fireteamMessageType_t type, const idBitMsg& msg );
void Write( idFile* file ) const;
void Read( idFile* file );
static void HandleMessage( const idBitMsg& msg );
static void SetFireTeamBits( int bits ) { _fireTeamBits = bits; }
static int MaxMembers( void );
idPlayer* GetCommander( void ) const { return GetNumMembers() > 0 ? GetMember( 0 ) : NULL; }
bool IsCommander( idPlayer* other ) const { return other == GetCommander(); }
bool IsMember( idPlayer* other ) const;
void SetLastInvite( int clientNum, int time ) { assert( clientNum >= 0 && clientNum < MAX_CLIENTS ); _lastInvite[ clientNum ] = time; }
int GetLastInvite( int clientNum ) const { assert( clientNum >= 0 && clientNum < MAX_CLIENTS ); return _lastInvite[ clientNum ]; }
private:
static int _fireTeamBits;
int _index;
bool _private;
idStr _name;
idStr _defaultName;
sdTeamInfo* _team;
idList< int > _members;
int _lastInvite[ MAX_CLIENTS ];
};
class sdFireTeamSystemCommand {
public:
virtual ~sdFireTeamSystemCommand( void ) { ; }
virtual const char* GetName( void ) const = 0;
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const = 0;
virtual void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback ) const;
};
class sdFireTeamSystemCommand_Join : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "join"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
virtual void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback ) const;
};
class sdFireTeamSystemCommand_Leave : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "leave"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
};
class sdFireTeamSystemCommand_Create : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "create"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
};
class sdFireTeamSystemCommand_Invite : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "invite"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
virtual void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback ) const;
};
class sdFireTeamSystemCommand_Propose : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "propose"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
virtual void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback ) const;
};
class sdFireTeamSystemCommand_Kick : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "kick"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
virtual void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback ) const;
};
class sdFireTeamSystemCommand_Disband : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "disband"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
};
class sdFireTeamSystemCommand_Promote : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "promote"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
virtual void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback ) const;
};
class sdFireTeamSystemCommand_Name : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "name"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
};
class sdFireTeamSystemCommand_Private : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "private"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
};
class sdFireTeamSystemCommand_Public : public sdFireTeamSystemCommand {
public:
virtual const char* GetName( void ) const { return "public"; }
virtual void PerformCommand( const idCmdArgs& cmd, idPlayer* player ) const;
};
class sdFireTeamManagerLocal {
public:
sdFireTeamManagerLocal( void );
~sdFireTeamManagerLocal( void );
void Init( void );
void Clear( void );
void Think( void );
sdFireTeam* FireTeamForHandle( qhandle_t handle );
int NumFireTeams() const { return _fireTeams.Num(); }
sdFireTeam* FireTeamForIndex( int index ) { return _fireTeams[ index ]; }
const sdFireTeam* FireTeamForIndex( int index ) const { return _fireTeams[ index ]; }
void WriteInitialReliableMessages( const sdReliableMessageClientInfoBase& target ) const;
void Write( idFile* file ) const;
void Read( idFile* file );
void PerformCommand( const idCmdArgs& cmd, idPlayer* player );
static void CommandCompletion( const idCmdArgs& args, argCompletionCallback_t callback );
private:
idList< sdFireTeam* > _fireTeams;
idList< sdFireTeamSystemCommand* > _commands;
};
typedef sdSingleton< sdFireTeamManagerLocal > sdFireTeamManager;
#endif // __GAME_ROLES_FIRETEAMS_H__