PRooFPS-dd Dev Doc 1.0
PRooFPS-dd Developer Documentation
Loading...
Searching...
No Matches
SpecialGameMode Class Reference

This class is for tests where we test pure GameMode functionality: we don't need DeathMatchMode for that. More...

Detailed Description

This class is for tests where we test pure GameMode functionality: we don't need DeathMatchMode for that.

Definition at line 29 of file GameModeTest.h.

#include <GameModeTest.h>

+ Inheritance diagram for SpecialGameMode:

Public Member Functions

 SpecialGameMode (const std::map< pge_network::PgeNetworkConnectionHandle, proofps_dd::Player > &m_mapPlayers)
 
 SpecialGameMode (const SpecialGameMode &)=delete
 
SpecialGameModeoperator= (const SpecialGameMode &)=delete
 
 SpecialGameMode (SpecialGameMode &&)=delete
 
SpecialGameMode && operator= (SpecialGameMode &&)=delete
 
virtual bool addPlayer (const proofps_dd::Player &player, pge_network::PgeINetwork &) override
 Adds the specified player.
 
virtual bool updatePlayer (const proofps_dd::Player &, pge_network::PgeINetwork &) override
 Updates data for the specified player.
 
virtual bool removePlayer (const proofps_dd::Player &, pge_network::PgeINetwork &) override
 Removes data for the specified player.
 
virtual bool isTeamBasedGame () const override
 Derived class shall return false if it is non-team-based game, otherwise true.
 
virtual bool isRoundBased () const override
 
virtual bool isRespawnAllowedAfterDie () const override
 
virtual bool isPlayerAllowedForGameplay (const proofps_dd::Player &) const override
 Checks if given player is allowed for gameplay.
 
- Public Member Functions inherited from proofps_dd::GameMode
CConsole & getConsole () const
 
virtual ~GameMode ()
 
virtual void fetchConfig (PGEcfgProfiles &cfgProfiles, pge_network::PgeINetwork &network)
 Fetches configuration from the given PGEcfgProfiles instance.
 
GameModeType getGameModeType () const
 
const char * getGameModeTypeName () const
 
const std::chrono::time_point< std::chrono::steady_clock > & getResetTime () const
 
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.
 
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, const proofps_dd::GameRestartType_KeepPlayers &eRestartType)
 Resets winning time and winning condition, also zeros out relevant members of PlayersTableRow for all players.
 
virtual bool serverCheckAndUpdateWinningConditions (pge_network::PgeINetwork &network)
 Evaluates conditions to see if game is won or not.
 
void clientReceiveAndUpdateWinningConditions (pge_network::PgeINetwork &network, bool bGameSessionWon)
 Handles server's update about current game session goal, e.g.
 
virtual void serverTickUpdateWinningConditions (pge_network::PgeINetwork &network)
 Shall be invoked regularly (per tick or per frame) at the end of server tick or frame loop so hasJustBeenWonThisTick() and further functionalities in derived classes can work properly.
 
virtual void clientTickUpdateWinningConditions (pge_network::PgeINetwork &network)
 Shall be invoked regularly (per tick or per frame) at the end of client tick or frame loop so hasJustBeenWonThisTick() and further functionalities in derived classes can work properly.
 
bool isGameWon () const
 Returns the current game session win state i.e.
 
bool wasGameWonAlreadyInPreviousTick () const
 Returns if the current game session was already won in the previous tick.
 
bool hasJustBeenWonThisTick () const
 Returns if the current game session has been just detected as won in this tick i.e.
 
const std::chrono::time_point< std::chrono::steady_clock > & getWinTime () const
 
const std::list< PlayersTableRow > & getPlayersTable () const
 
const std::map< pge_network::PgeNetworkConnectionHandle, proofps_dd::Player > & getExternalPlayersContainer () const
 
bool renamePlayer (const std::string &sOldName, const std::string &sNewName)
 Renames the player.
 
virtual bool isPlayerMovementAllowed () const
 
unsigned int getSpectatorModePlayersCount () const
 
void text (PR00FsUltimateRenderingEngine &pure, const std::string &s, int x, int y) const
 

Additional Inherited Members

- Static Public Member Functions inherited from proofps_dd::GameMode
static const char * getLoggerModuleName ()
 
static GameModecreateGameMode (GameModeType gm, const std::map< pge_network::PgeNetworkConnectionHandle, proofps_dd::Player > &mapPlayers)
 Similar to singleton design pattern, there is always maximum one instance.
 
static GameModegetGameMode ()
 
static bool isTeamBasedGame (GameModeType gm)
 
static bool isRoundBased (GameModeType gm)
 
static const char * getGameModeTypeName (GameModeType gm)
 
static GameModeType getGameModeTypeFromConfig (PGEcfgProfiles &cfgProfiles)
 
static const char * getRank (const PlayersTableRow &row)
 
- Static Public Attributes inherited from proofps_dd::GameMode
static constexpr char * szCvarSvGamemode = "sv_gamemode"
 
static constexpr char * szCvarSvGmTimeLimit = "sv_gm_timelimit_secs"
 
static constexpr char * szCvarSvDmFragLimit = "sv_dm_fraglimit"
 
static constexpr char * szCvarSvRgmRoundWinLimit = "sv_rgm_roundwinlimit"
 
static constexpr int nSvGmTimeLimitSecsDef = 0
 
static constexpr int nSvGmTimeLimitSecsMin = 0
 
static constexpr int nSvGmTimeLimitSecsMax = 60 * 60 * 24
 
static constexpr int nSvDmFragLimitDef = 10
 
static constexpr int nSvDmFragLimitMin = 0
 
static constexpr int nSvDmFragLimitMax = 999
 
static constexpr int nSvRgmRoundWinLimitDef = 5
 
static constexpr int nSvRgmRoundWinLimitMin = 1
 
static constexpr int nSvRgmRoundWinLimitMax = 999
 
- Protected Member Functions inherited from proofps_dd::GameMode
 GameMode (GameModeType gm, const std::map< pge_network::PgeNetworkConnectionHandle, proofps_dd::Player > &mapPlayers)
 
 GameMode (const GameMode &)=delete
 
GameModeoperator= (const GameMode &)=delete
 
 GameMode (GameMode &&)=delete
 
GameMode && operator= (GameMode &&)=delete
 
virtual bool serverSendGameSessionStateToClient (pge_network::PgeINetwork &network, const pge_network::PgeNetworkConnectionHandle &connHandle)
 
virtual bool serverSendGameSessionStateToClients (pge_network::PgeINetwork &network, const proofps_dd::GameRestartType_KeepPlayers &eRestartType)
 
void handleEventGameWon (pge_network::PgeINetwork &network)
 
- Protected Attributes inherited from proofps_dd::GameMode
std::chrono::time_point< std::chrono::steady_clock > m_timeWin
 
std::list< PlayersTableRowm_players
 
const std::map< pge_network::PgeNetworkConnectionHandle, proofps_dd::Player > & m_mapPlayersExternal
 
bool m_bWon { false }
 
bool m_bWonPrevious { false }
 
GameModeType m_gameModeType
 

Constructor & Destructor Documentation

◆ SpecialGameMode() [1/3]

SpecialGameMode::SpecialGameMode ( const std::map< pge_network::PgeNetworkConnectionHandle, proofps_dd::Player > & m_mapPlayers)
inline

Definition at line 33 of file GameModeTest.h.

◆ SpecialGameMode() [2/3]

SpecialGameMode::SpecialGameMode ( const SpecialGameMode & )
delete

◆ SpecialGameMode() [3/3]

SpecialGameMode::SpecialGameMode ( SpecialGameMode && )
delete

Member Function Documentation

◆ addPlayer()

virtual bool SpecialGameMode::addPlayer ( const proofps_dd::Player & player,
pge_network::PgeINetwork & network )
inlineoverridevirtual

Adds the specified player.

In case of server instance, if the added player is a client, it SHALL immediately send game win condition to this client using serverSendGameSessionStateToClient(). In case of server instance, it SHALL automatically evaluate winning condition using serverCheckAndUpdateWinningConditions() after adding the player. 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().

Note that GameMode does not ensure that a spectating player cannot win a game. The game shall ensure that the player does not gain any frags while in spectator mode! Therefore, if the added player already has enough frags to flip game won state, the game will go into won state, regardless of the player's spectating state!

Fails if a player with same name is already added.

Returns
True if added the new player, false otherwise.

Implements proofps_dd::GameMode.

Definition at line 44 of file GameModeTest.h.

◆ isPlayerAllowedForGameplay()

virtual bool SpecialGameMode::isPlayerAllowedForGameplay ( const proofps_dd::Player & player) const
inlineoverridevirtual

Checks if given player is allowed for gameplay.

For example, in a team-based game mode, server can freeze player actions when no team is assigned to the player. But it also checks for spectator mode.

Can be used by both server and client instances. Must also work properly on client-side, since in player-follow spectating view, this function is used to determine which players can be spectated.

Returns
True if player is ready and active for gameplay in the current game mode, false otherwise.

Reimplemented from proofps_dd::GameMode.

Definition at line 85 of file GameModeTest.h.

◆ isRespawnAllowedAfterDie()

virtual bool SpecialGameMode::isRespawnAllowedAfterDie ( ) const
inlineoverridevirtual

Implements proofps_dd::GameMode.

Definition at line 80 of file GameModeTest.h.

◆ isRoundBased()

virtual bool SpecialGameMode::isRoundBased ( ) const
inlineoverridevirtual

Implements proofps_dd::GameMode.

Definition at line 75 of file GameModeTest.h.

◆ isTeamBasedGame()

virtual bool SpecialGameMode::isTeamBasedGame ( ) const
inlineoverridevirtual

Derived class shall return false if it is non-team-based game, otherwise true.

Implements proofps_dd::GameMode.

Definition at line 70 of file GameModeTest.h.

◆ operator=() [1/2]

SpecialGameMode & SpecialGameMode::operator= ( const SpecialGameMode & )
delete

◆ operator=() [2/2]

SpecialGameMode && SpecialGameMode::operator= ( SpecialGameMode && )
delete

◆ removePlayer()

virtual bool SpecialGameMode::removePlayer ( const proofps_dd::Player & player,
pge_network::PgeINetwork & network )
inlineoverridevirtual

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().

Returns
True if removed the existing player, false otherwise.

Implements proofps_dd::GameMode.

Definition at line 63 of file GameModeTest.h.

◆ updatePlayer()

virtual bool SpecialGameMode::updatePlayer ( const proofps_dd::Player & player,
pge_network::PgeINetwork & network )
inlineoverridevirtual

Updates data for the specified player.

In case of server instance, it SHALL automatically evaluate winning condition using serverCheckAndUpdateWinningConditions() after updating the player. 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().

Note that GameMode does not ensure that a spectating player cannot win a game. The game shall ensure that the player does not gain any frags while in spectator mode! Therefore, if the added player already has enough frags to flip game won state, the game will go into won state, regardless of the player's spectating state!

Fails if player with same cannot be found.

Returns
True if updated the existing player, false otherwise.

Implements proofps_dd::GameMode.

Definition at line 56 of file GameModeTest.h.


The documentation for this class was generated from the following file: