204 lines
7.5 KiB
C++
204 lines
7.5 KiB
C++
// 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__
|