| 596 | } |
| 597 | |
| 598 | void 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 | |
nothing calls this directly
no test coverage detected