ef2gamesource/dlls/game/mp_manager.hpp

338 lines
12 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Code/DLLs/game/dm_manager.h $
// $Revision:: 31 $
// $Author:: Steven $
// $Date:: 7/18/02 10:45a $
//
// Copyright (C) 2002 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
//
// DESCRIPTION:
//
// Forward declaration
class Player;
//class DM_Team ;
#ifndef __MP_MANAGER_HPP__
#define __MP_MANAGER_HPP__
// Typedefs
typedef SafePtr<Player> PlayerPtr;
#include "g_local.h"
#include "mp_modeBase.hpp"
#include "mp_modifiers.hpp"
#include "mp_awardsystem.hpp"
#include "mp_shared.hpp"
#include "equipment.h"
class MultiplayerManager;
extern MultiplayerManager multiplayerManager;
extern str playersLastTeam[ MAX_CLIENTS ];
typedef enum
{
MP_CVAR_TYPE_INTEGER,
MP_CVAR_TYPE_FLOAT,
MP_CVAR_TYPE_BOOL
} MPCvarType;
class MultiplayerDialogData
{
public:
str _soundName;
int _channel;
float _volume;
float _minDist;
float _time;
};
class MultiplayerPlayerData
{
public:
static const int _maxDialogs;
bool _valid;
int _votecount;
bool _voted;
bool _spectator;
bool _spectatorByChoice;
SpectatorTypes _spectatorType;
float _spectatorTime;
int _spectatorPlayerNum;
bool _waitingForRespawn;
float _respawnTime;
str _teamHud;
bool _named;
str _name;
MultiplayerDialogData* _dialogData;
int _nextDialogSendSpot;
int _nextDialogAddSpot;
float _nextDialogSendTime;
float _nextTauntTime;
MultiplayerPlayerData();
~MultiplayerPlayerData();
void reset( void );
int getNextDialogAddSpot() { return _nextDialogAddSpot % _maxDialogs; }
int getNextDialogSendSpot() { return _nextDialogSendSpot % _maxDialogs; }
};
class MultiplayerManager : public Class
{
private:
static const int _playerFreezeTime;
//static const int _maxVoteCount;
static const float _maxVoteTime;
static const int _maxSayStringLength;
static const float _inBetweenMatchTime;
bool _inMultiplayerGame;
bool _gameStarted;
bool _gameOver;
MultiplayerModeBase *_multiplayerGame;
bool _allowFighting;
Container<MultiplayerModifier *> _modifiers;
MultiplayerPlayerData *_playerData;
AwardSystem *_awardSystem;
float _voteTime;
str _voteString;
int _voteYes;
int _voteNo;
int _numVoters;
float _declareWinnerTime;
bool _declaredWinner;
bool _needToAddBots;
bool _inMatch;
int _talkingIconIndex;
int _waitingToRespawnIconIndex;
float _restartMatchTime;
float _respawnTime;
int _oldFlags;
gclient_s * getClient( int entnum );
void start( void );
void addBots( void );
void matchOver( void );
void restartMatch( void );
void setNextMap( void );
str getNextMap( void );
void addSoundToQueue( Player *player, str soundName, int channel, float volume, float minDist, float time );
void sendNextPlayerSound( Player *player );
protected:
public:
CLASS_PROTOTYPE( MultiplayerManager );
MultiplayerManager();
~MultiplayerManager();
//
// Interface for game dll
//
void init( void );
void cleanup( qboolean restart );
void update( float frameTime );
bool inMultiplayer( void );
bool checkFlag( unsigned int flag );
bool isFightingAllowed( void );
bool fullCollision( void );
void initMultiplayerGame( void );
void initItems( void );
void resetItems( void );
void addPlayer( Player *player );
void removePlayer( Player *player );
void applySpeedModifiers( Player *player, int *moveSpeed );
void applyJumpModifiers( Player *player, int *jumpSpeed );
void applyAirAccelerationModifiers( Player *player, int *airAcceleration );
bool canPickup( Player *player, MultiplayerItemType itemType, const char *item_name );
void pickedupItem( Player *player, MultiplayerItemType itemType, const char *item_name );
void changePlayerModel( Player *player, const char *modelName, bool force = false );
void resetPlayerStateMachine( Player *player );
void changePlayerName( Player *player, const str &PlayerName );
void playerDead( Player *player );
void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
float playerDamaged( Player *damagedPlayer, Player *attackingPlayer, float damage, int meansOfDeath );
void playerTookDamage( Player *damagedPlayer, Player *attackingPlayer, float damage, int meansOfDeath );
void playerFired( Player *attackingPlayer );
float getModifiedKnockback( Player *damagedPlayer, Player *attackingPlayer, float knockback );
void itemTouched( Player *player, MultiplayerItem *item );
void itemDestroyed( Player *player, MultiplayerItem *item );
float itemDamaged( MultiplayerItem *item, Player *attackingPlayer, float damage, int meansOfDeath );
void itemUsed( Entity *entity, MultiplayerItem *item );
void playerUsed( Player *usedPlayer, Player *usingPlayer, Equipment *equipment );
void score( Player *player );
void respawnPlayer( Player *player, bool forced );
void respawnAllPlayers( void );
Entity * getSpawnPoint( Player *player );
bool isPlayerSpectator( Player *player, SpectatorTypes spectatorType = SPECTATOR_TYPE_ANY );
bool isPlayerSpectatorByChoice( Player *player );
Player * getPlayerSpectating( Player *player );
void makePlayerSpectator( Player *player, SpectatorTypes spectatorType = SPECTATOR_TYPE_FOLLOW, bool byChoice = false );
void makePlayerSpectateNextPlayer( Player *player );
void makePlayerSpectatePrevPlayer( Player *player );
void makePlayerSpectatePlayer( Player *player, Player *playerToSpectate );
void playerEnterArena( int entnum, float health );
void playerSpawned( Player *player );
int getPoints( Player *player );
int getKills( Player *player );
int getDeaths( Player *player );
int getTeamPoints( Player *player );
int getTeamPoints( const str & teamName );
void addTeamPoints( const str & teamName, int points );
int getStat( Player *player, int statNum );
int getIcon( Player *player, int statNum );
int getScoreIcon( Player *player, int index );
int getInfoIcon( Player *player, int buttons );
Player * getLastKilledByPlayer( Player *player, int *meansOfDeath = NULL );
Player * getLastKillerOfPlayer( Player *player, int *meansOfDeath = NULL );
Team* getPlayersTeam( const Player *player );
int getPointsForKill( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath, int points );
void callVote( Player *player, const str &command, const str &arg );
void vote( Player *player, const str &vote );
void checkVote( void );
void joinTeam( Player *player, const str &teamName );
void say( Player *player, const str &text, bool team );
void tell( Player *player, const str &text, int entnum );
float getItemRespawnMultiplayer( void );
float getWeaponRespawnMultiplayer( void );
float getPowerupRespawnMultiplayer( void );
bool checkGameType( const char *rule );
bool doesPlayerHaveItem( Player *player, const char *itemName );
void playerCommand( Player *player, const char *command, const char *parm );
void playerInput( Player *player, int newButtons );
//
// Modifier stuff
//
void addModifiers( void );
void tryAddModifier( const str &modifierName );
void addModifier( const str &modifierName );
void addPoints( int entnum, int points );
//
// Interface for modes
//
Player * getPlayer( int entnum );
int getMaxPlayers( void );
int getTotalPlayers( bool countSpectators = false );
int getClientNum( int entnum );
int getClientPing( int entnum );
float getTime( void );
void centerPrint( int entnum, const str &string, CenterPrintImportance importance );
void HUDSay( int entnum, const str &string );
void HUDPrint( int entnum, const str &string );
void statusPrint( int entnum, const str &string );
void instantPlayerSound( int entnum, const str &soundName, int channel = CHAN_AUTO, float volume = DEFAULT_VOL, float minDist = DEFAULT_MIN_DIST );
void broadcastInstantSound( const str &soundName, int channel = CHAN_AUTO, float volume = DEFAULT_VOL, float minDist = DEFAULT_MIN_DIST, Player *except = NULL );
void playerSound( int entnum, const str &soundName, int channel = CHAN_AUTO, float volume = DEFAULT_VOL, float minDist = DEFAULT_MIN_DIST, float time = 2.5f );
void teamSound( Team *team, const str &soundName, int channel = CHAN_AUTO, float volume = DEFAULT_VOL, float minDist = DEFAULT_MIN_DIST, float time = 2.5f );
void broadcastSound( const str &soundName, int channel = CHAN_AUTO, float volume = DEFAULT_VOL, float minDist = DEFAULT_MIN_DIST, Player *except = NULL, float time = 2.5f );
void addPlayerHealth( int entnum, float healthToAdd );
void allowFighting( bool allowFighting );
bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
void playerEventNotification( const char *eventName, const char *eventItemName, Player *eventPlayer );
void initPlayer( Player *player );
void teamPointsChanged( Team *team, int oldPoints, int newPoints );
void cacheMultiplayerFiles( const str &cacheFileName );
void setTeamHud( Player *player, const str &teamHudName );
str getSpawnPointType( Player *player );
//
// Shared Interface (game dll and modes)
//
void centerPrintAllClients( const str &string, CenterPrintImportance importance );
void HUDPrintAllClients( const str &string );
void centerPrintTeamClients( Player *player, const str &string, CenterPrintImportance importance );
void HUDPrintTeamClients( Player *player, const str &string );
void HUDPrintSpectators( Player *player, const str &string, bool team );
bool canGivePlayerItem( int entnum, const str &itemName );
void givePlayerItem( int entnum, const str &itemName );
void usePlayerItem( int entnum, const str &itemName );
int getAfterMatchAward( Player *player, int index );
void startMatch( void );
void endMatch( void );
str getPlaceName( Player *player );
bool isValidPlayerModel( Player *player, str modelToUse );
str getDefaultPlayerModel( Player *player );
float getRespawnTime( void );
void setRespawnTime( float time );
void resetRespawnTime( void );
void checkModifiedCvars( bool informPlayers );
void checkCvar( cvar_t *mp_cvarToCheck, str optionName, MPCvarType cvarType, int bitToCheck = -1 );
bool hasFlagChanged( int bitToCheck );
bool skipWeaponReloads( void );
void playerTaunt( Player *player, const str &tauntName );
};
#endif // __MP_MANAGER_HPP__