MCPcopy Create free account
hub / github.com/ddnet/ddnet / Snap

Method Snap

src/game/server/gamecontroller.cpp:598–709  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

596}
597
598void IGameController::Snap(int SnappingClient)
599{
600 CNetObj_GameInfo *pGameInfoObj = Server()->SnapNewItem<CNetObj_GameInfo>(0);
601 if(!pGameInfoObj)
602 return;
603
604 pGameInfoObj->m_GameFlags = GameFlags_ClampToSix(m_GameFlags);
605 pGameInfoObj->m_GameStateFlags = 0;
606 if(m_GameOverTick != -1)
607 pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_GAMEOVER;
608 if(m_SuddenDeath)
609 pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_SUDDENDEATH;
610 if(IsGamePaused())
611 pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_PAUSED;
612 pGameInfoObj->m_RoundStartTick = m_RoundStartTick;
613 pGameInfoObj->m_WarmupTimer = m_Warmup;
614
615 pGameInfoObj->m_RoundNum = 0;
616 pGameInfoObj->m_RoundCurrent = m_RoundCount + 1;
617
618 CCharacter *pChr;
619 CPlayer *pPlayer = SnappingClient != SERVER_DEMO_CLIENT ? GameServer()->m_apPlayers[SnappingClient] : nullptr;
620 CPlayer *pPlayer2;
621
622 if(pPlayer && (pPlayer->m_TimerType == CPlayer::TIMERTYPE_GAMETIMER || pPlayer->m_TimerType == CPlayer::TIMERTYPE_GAMETIMER_AND_BROADCAST) && pPlayer->GetClientVersion() >= VERSION_DDNET_GAMETICK)
623 {
624 if((pPlayer->GetTeam() == TEAM_SPECTATORS || pPlayer->IsPaused()) && pPlayer->SpectatorId() != SPEC_FREEVIEW && (pPlayer2 = GameServer()->m_apPlayers[pPlayer->SpectatorId()]))
625 {
626 if((pChr = pPlayer2->GetCharacter()) && pChr->m_DDRaceState == ERaceState::STARTED)
627 {
628 pGameInfoObj->m_WarmupTimer = -pChr->m_StartTime;
629 pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_RACETIME;
630 }
631 }
632 else if((pChr = pPlayer->GetCharacter()) && pChr->m_DDRaceState == ERaceState::STARTED)
633 {
634 pGameInfoObj->m_WarmupTimer = -pChr->m_StartTime;
635 pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_RACETIME;
636 }
637 }
638
639 CNetObj_GameInfoEx *pGameInfoEx = Server()->SnapNewItem<CNetObj_GameInfoEx>(0);
640 if(!pGameInfoEx)
641 return;
642
643 pGameInfoEx->m_Flags =
644 GAMEINFOFLAG_TIMESCORE |
645 GAMEINFOFLAG_GAMETYPE_RACE |
646 GAMEINFOFLAG_GAMETYPE_DDRACE |
647 GAMEINFOFLAG_GAMETYPE_DDNET |
648 GAMEINFOFLAG_UNLIMITED_AMMO |
649 GAMEINFOFLAG_RACE_RECORD_MESSAGE |
650 GAMEINFOFLAG_ALLOW_EYE_WHEEL |
651 GAMEINFOFLAG_ALLOW_HOOK_COLL |
652 GAMEINFOFLAG_ALLOW_ZOOM |
653 GAMEINFOFLAG_BUG_DDRACE_GHOST |
654 GAMEINFOFLAG_BUG_DDRACE_INPUT |
655 GAMEINFOFLAG_PREDICT_DDRACE |

Callers

nothing calls this directly

Calls 9

GameFlags_ClampToSixFunction · 0.85
GetTeamMethod · 0.80
SpectatorIdMethod · 0.80
GetCharacterMethod · 0.80
SnapSwitchersMethod · 0.80
ServerClass · 0.50
GetClientVersionMethod · 0.45
IsPausedMethod · 0.45
IsSixupMethod · 0.45

Tested by

no test coverage detected