diff --git a/Game/Source/GDKShooter/Private/Game/GDKSessionGameState.cpp b/Game/Source/GDKShooter/Private/Game/GDKSessionGameState.cpp index aa13789c..62419446 100644 --- a/Game/Source/GDKShooter/Private/Game/GDKSessionGameState.cpp +++ b/Game/Source/GDKShooter/Private/Game/GDKSessionGameState.cpp @@ -45,13 +45,7 @@ void AGDKSessionGameState::RemovePlayerState(APlayerState* PlayerState) void AGDKSessionGameState::OnRep_SessionProgress() { - USpatialNetDriver* SpatialNetDriver = Cast(GetWorld()->GetNetDriver()); - bool bAuthoritativeOverSessionEntity = SpatialNetDriver->StaticComponentView->HasAuthority(SessionEntityId, SessionComponentId); - - if (bAuthoritativeOverSessionEntity) - { - SendStateUpdate(SessionProgress); - } + SendStateUpdate(SessionProgress); TimerEvent.Broadcast(SessionProgress, SessionTimer); } @@ -78,44 +72,41 @@ void AGDKSessionGameState::TickGameTimer() { SessionTimer--; - USpatialNetDriver* SpatialNetDriver = Cast(GetWorld()->GetNetDriver()); - bool bAuthoritativeOverSessionEntity = SpatialNetDriver->StaticComponentView->HasAuthority(SessionEntityId, SessionComponentId); - if (SessionProgress == EGDKSessionProgress::Lobby && SessionTimer <= 0) { UE_LOG(LogGDK, Log, TEXT("Advance GameState to Running")); SessionProgress = EGDKSessionProgress::Running; - if (bAuthoritativeOverSessionEntity) - { - SendStateUpdate(SessionProgress); - } + SendStateUpdate(SessionProgress); SessionTimer = GameSessionLength; } if (SessionProgress == EGDKSessionProgress::Running && SessionTimer <= 0) { UE_LOG(LogGDK, Log, TEXT("Advance GameState to Results")); SessionProgress = EGDKSessionProgress::Results; - if (bAuthoritativeOverSessionEntity) - { - SendStateUpdate(SessionProgress); - } + SendStateUpdate(SessionProgress); SessionTimer = ResultsSessionLength; } if (SessionProgress == EGDKSessionProgress::Results && SessionTimer <= 0) { UE_LOG(LogGDK, Log, TEXT("Advance GameState to Finished")); SessionProgress = EGDKSessionProgress::Finished; - if (bAuthoritativeOverSessionEntity) - { - SendStateUpdate(SessionProgress); - } + SendStateUpdate(SessionProgress); } } } void AGDKSessionGameState::SendStateUpdate(EGDKSessionProgress SessionProgressState) { - if (!GetWorld()->GetNetDriver() || !GetWorld()->GetNetDriver()->IsA()) + // Only send the state update if we're using Spatial networking and if we have authority over the session entity. + UNetDriver* NetDriver = GetWorld()->GetNetDriver(); + if (NetDriver == nullptr || !NetDriver->IsA()) + { + return; + } + + USpatialNetDriver* SpatialNetDriver = Cast(NetDriver); + bool bAuthoritativeOverSessionEntity = SpatialNetDriver->StaticComponentView->HasAuthority(SessionEntityId, SessionComponentId); + if (!bAuthoritativeOverSessionEntity) { return; } @@ -129,7 +120,7 @@ void AGDKSessionGameState::SendStateUpdate(EGDKSessionProgress SessionProgressSt component_update.schema_type = Schema_CreateComponentUpdate(SessionComponentId); Schema_Object* fields_object = Schema_GetComponentUpdateFields(component_update.schema_type); Schema_AddInt32(fields_object, 1, SessionState); - Cast(GetWorld()->GetNetDriver())->Connection->SendComponentUpdate(target_entity_id, &component_update); + SpatialNetDriver->Connection->SendComponentUpdate(target_entity_id, &component_update); }