![]() |
PRooFPS-dd Dev Doc 1.0
PRooFPS-dd Developer Documentation
|
In DeathMatch a.k.a. More...
In DeathMatch a.k.a.
FFA (Free For All) game mode, everyone is shooting everyone, and the winner is whoever has the most frags when either the frag limit or time limit is reached. Note: it is also valid to not to have either frag limit or time limit set, but in such case the game never ends.
Definition at line 242 of file GameMode.h.
#include <GameMode.h>
Public Member Functions | |
DeathMatchMode () | |
virtual | ~DeathMatchMode () |
DeathMatchMode (const DeathMatchMode &)=delete | |
DeathMatchMode & | operator= (const DeathMatchMode &)=delete |
DeathMatchMode (DeathMatchMode &&)=delete | |
DeathMatchMode && | operator= (DeathMatchMode &&)=delete |
virtual void | fetchConfig (PGEcfgProfiles &cfgProfiles, pge_network::PgeINetwork &network) override |
Fetches configuration from the given PGEcfgProfiles instance. | |
virtual bool | serverCheckAndUpdateWinningConditions (pge_network::PgeINetwork &network) override |
Evaluates conditions to see if game is won or not. | |
virtual void | clientReceiveAndUpdateWinningConditions (pge_network::PgeINetwork &network, bool bGameSessionWon) override |
Handles server's update about current game session goal, e.g. | |
unsigned int | getTimeLimitSecs () const |
void | setTimeLimitSecs (unsigned int secs) |
Set the time limit for the game. | |
unsigned int | getTimeRemainingMillisecs () const |
void | clientUpdateTimeRemainingMillisecs (const unsigned int &nRemMillisecs, pge_network::PgeINetwork &network) |
Updates the remaining time on client side, based on the remaining time received from server. | |
unsigned int | getFragLimit () const |
void | setFragLimit (unsigned int limit) |
Set the frag limit for the game. | |
virtual bool | addPlayer (const Player &player, pge_network::PgeINetwork &network) override |
Adds the specified player. | |
virtual bool | updatePlayer (const Player &player, pge_network::PgeINetwork &network) override |
Updates data for the specified player. | |
virtual bool | removePlayer (const Player &player) override |
Removes data for the specified player. | |
![]() | |
CConsole & | getConsole () const |
virtual | ~GameMode () |
GameModeType | getGameModeType () const |
const std::chrono::time_point< std::chrono::steady_clock > & | getResetTime () const |
virtual void | restart (pge_network::PgeINetwork &network) |
Similar to restartWithoutRemovingPlayers() but it also removes all players from this GameMode instance. | |
virtual void | restartWithoutRemovingPlayers (pge_network::PgeINetwork &network) |
Resets winning time and winning condition, also zeros out relevant members of FragTableRow for all players. | |
bool | isGameWon () const |
Returns the current game session win state i.e. | |
const std::chrono::time_point< std::chrono::steady_clock > & | getWinTime () const |
const std::list< FragTableRow > & | getFragTable () const |
bool | renamePlayer (const std::string &sOldName, const std::string &sNewName) |
Renames the player. | |
void | text (PR00FsUltimateRenderingEngine &pure, const std::string &s, int x, int y) const |
Static Private Member Functions | |
static int | comparePlayers (int p1frags, int p2frags, int p1deaths, int p2deaths) |
Private Attributes | |
unsigned int | m_nTimeLimitSecs {} |
unsigned int | m_nFragLimit {} |
Additional Inherited Members | |
![]() | |
static const char * | getLoggerModuleName () |
static GameMode * | createGameMode (GameModeType gm) |
![]() | |
static constexpr char * | szCvarSvDmFragLimit = "sv_dm_fraglimit" |
static constexpr char * | szCvarSvDmTimeLimit = "sv_dm_timelimit_secs" |
static constexpr int | nSvDmFragLimitDef = 10 |
static constexpr int | nSvDmFragLimitMin = 0 |
static constexpr int | nSvDmFragLimitMax = 999 |
static constexpr int | nSvDmTimeLimitSecsDef = 0 |
static constexpr int | nSvDmTimeLimitSecsMin = 0 |
static constexpr int | nSvDmTimeLimitSecsMax = 60 * 60 * 24 |
![]() | |
GameMode (GameModeType gm) | |
GameMode (const GameMode &)=delete | |
GameMode & | operator= (const GameMode &)=delete |
GameMode (GameMode &&)=delete | |
GameMode && | operator= (GameMode &&)=delete |
bool | serverSendGameSessionStateToClient (pge_network::PgeINetwork &network, const pge_network::PgeNetworkConnectionHandle &connHandle) |
bool | serverSendGameSessionStateToClients (pge_network::PgeINetwork &network) |
![]() | |
std::chrono::time_point< std::chrono::steady_clock > | m_timeWin |
std::list< FragTableRow > | m_players |
bool | m_bWon { false } |
std::chrono::time_point< std::chrono::steady_clock > | m_timeReset |
proofps_dd::DeathMatchMode::DeathMatchMode | ( | ) |
Definition at line 194 of file GameMode.cpp.
|
virtual |
Definition at line 199 of file GameMode.cpp.
|
delete |
|
delete |
|
overridevirtual |
Adds the specified player.
In case of server instance, it automatically evaluates winning condition, and in case of winning it also updates winning time and sends out MsgGameSessionStateFromServer to all clients. Note that once a game is won, it stays won even if players are updated to fail the winning conditions, until explicit call to restart().
Fails if a player with same name is already added.
Implements proofps_dd::GameMode.
Definition at line 316 of file GameMode.cpp.
|
overridevirtual |
Handles server's update about current game session goal, e.g.
game is won. Server sends out such notification occasionally only, when something relevant has changed about the current game session.
This function is for client instance only.
bGameSessionWon | True if the current game session goal has been just reached, false otherwise. |
Implements proofps_dd::GameMode.
Definition at line 246 of file GameMode.cpp.
void proofps_dd::DeathMatchMode::clientUpdateTimeRemainingMillisecs | ( | const unsigned int & | nRemMillisecs, |
pge_network::PgeINetwork & | network ) |
Updates the remaining time on client side, based on the remaining time received from server.
Basically it corrects the game restart time on client side so client will have the roughly same game restart time as the server. TODO: time related functions should really be in GameMode class, I dont see use of putting it in DeathMatch and it complicates things.
nRemMillisecs | Remaining time in milliseconds, from server. |
network | PGE network instance to be used to know if we are server or client. |
Definition at line 292 of file GameMode.cpp.
|
staticprivate |
Definition at line 433 of file GameMode.cpp.
|
overridevirtual |
Fetches configuration from the given PGEcfgProfiles instance.
For now it does not do validation, as all validations are currently implemented in the Config class. TODO: on the long run, validation should be also done, by proper planning and implementing an IConfigHandler interface, as described in the comment above.
cfgProfiles | The current user config profile from where we can fetch value of GameMode-specific CVARs. |
network | PGE network instance to be used to know if we are server or client. |
Implements proofps_dd::GameMode.
Definition at line 203 of file GameMode.cpp.
unsigned int proofps_dd::DeathMatchMode::getFragLimit | ( | ) | const |
Definition at line 306 of file GameMode.cpp.
unsigned int proofps_dd::DeathMatchMode::getTimeLimitSecs | ( | ) | const |
Definition at line 263 of file GameMode.cpp.
unsigned int proofps_dd::DeathMatchMode::getTimeRemainingMillisecs | ( | ) | const |
Definition at line 273 of file GameMode.cpp.
|
delete |
|
delete |
|
overridevirtual |
Removes data for the specified player.
Fails if player with same cannot be found.
Does not evaluate winning conditions, since once a game is won, it stays won even if all players are removed, until explicit call to restart().
Implements proofps_dd::GameMode.
Definition at line 416 of file GameMode.cpp.
|
overridevirtual |
Evaluates conditions to see if game is won or not.
Since conditions depend on game mode, the actual implementation must be in the specific derived game mode class. Note that once a game is won, it stays won even if all players are removed, until explicit call to restart().
This function is for server instance only. It also sends out MsgGameSessionStateFromServer to all clients in case game session state is changed as a result of the call.
network | PGE network instance to be used to send out MsgGameSessionStateFromServer if needed. |
Implements proofps_dd::GameMode.
Definition at line 210 of file GameMode.cpp.
void proofps_dd::DeathMatchMode::setFragLimit | ( | unsigned int | limit | ) |
Set the frag limit for the game.
If the frag limit is reached, the winner is the player with most frags, even if time limit is not yet reached or there is no time limit set. Note: behavior is unspecified if this value is changed on-the-fly during a game. For now, please also call restart() explicitly.
limit | The frag limit. If 0, there is no frag limit. |
Definition at line 311 of file GameMode.cpp.
void proofps_dd::DeathMatchMode::setTimeLimitSecs | ( | unsigned int | secs | ) |
Set the time limit for the game.
If time limit expires, the winner is the player with most frags, even if frag limit is not set or not reached. Note: behavior is unspecified if this value is changed on-the-fly during a game. For now, please also call restart() explicitly.
secs | The time limit in seconds. If 0, there is no time limit. |
Definition at line 268 of file GameMode.cpp.
|
overridevirtual |
Updates data for the specified player.
In case of server instance, it automatically evaluates winning condition, and in case of winning it also updates winning time and sends out MsgGameSessionStateFromServer to all clients. Note that once a game is won, it stays won even if players are updated to fail the winning conditions, until explicit call to restart().
Fails if player with same cannot be found.
Implements proofps_dd::GameMode.
Definition at line 359 of file GameMode.cpp.
|
private |
Definition at line 319 of file GameMode.h.
|
private |
Definition at line 318 of file GameMode.h.