void AShooterPlayerController::ShowInGameMenu() { AShooterHUD* ShooterHUD = GetShooterHUD(); if(ShooterIngameMenu.IsValid() && !ShooterIngameMenu->GetIsGameMenuUp() && (ShooterHUD->IsMatchOver() == false)) { ShooterIngameMenu->ToggleGameMenu(); } }
void AShooterPlayerController::ToggleChatWindow() { AShooterHUD* ShooterHUD = Cast<AShooterHUD>(GetHUD()); if (ShooterHUD) { ShooterHUD->ToggleChat(); } }
void AShooterPlayerController::OnShowScoreboard() { AShooterHUD* ShooterHUD = GetShooterHUD(); if(ShooterHUD) { ShooterHUD->ShowScoreboard(true); } }
void AShooterPlayerController::OnToggleScoreboard() { AShooterHUD* ShooterHUD = GetShooterHUD(); if(ShooterHUD && ( ShooterHUD->IsMatchOver() == false )) { ShooterHUD->ToggleScoreboard(); } }
void AShooterPlayerController::OnConditionalCloseScoreboard() { AShooterHUD* ShooterHUD = GetShooterHUD(); if(ShooterHUD && ( ShooterHUD->IsMatchOver() == false )) { ShooterHUD->ConditionalCloseScoreboard(); } }
void AShooterPlayerController::OnHideScoreboard() { AShooterHUD* ShooterHUD = GetShooterHUD(); // If have a valid match and the match is over - hide the scoreboard if( (ShooterHUD != NULL ) && ( ShooterHUD->IsMatchOver() == false ) ) { ShooterHUD->ShowScoreboard(false); } }
void AShooterPlayerController::ClientGameStarted_Implementation() { AShooterHUD* ShooterHUD = GetShooterHUD(); if (ShooterHUD) { ShooterHUD->SetMatchState(EShooterMatchState::Playing); } QueryAchievements(); }
void AShooterPlayerController::ClientTeamMessage_Implementation( APlayerState* SenderPlayerState, const FString& S, FName Type, float MsgLifeTime ) { AShooterHUD* ShooterHUD = Cast<AShooterHUD>(GetHUD()); if (ShooterHUD) { if( Type == ServerSayString ) { if( SenderPlayerState != PlayerState ) { ShooterHUD->AddChatLine(S, false); } } } }
void AShooterPlayerController::OnDeathMessage(class AShooterPlayerState* KillerPlayerState, class AShooterPlayerState* KilledPlayerState, const UDamageType* KillerDamageType) { AShooterHUD* ShooterHUD = GetShooterHUD(); if (ShooterHUD) { ShooterHUD->ShowDeathMessage(KillerPlayerState, KilledPlayerState, KillerDamageType); } ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player); if (LocalPlayer && LocalPlayer->GetUniqueNetId().IsValid() && KilledPlayerState->UniqueId.IsValid()) { // if this controller is the player who died, update the hero stat. if (*LocalPlayer->GetUniqueNetId() == *KilledPlayerState->UniqueId) { const auto Events = Online::GetEventsInterface(); const auto Identity = Online::GetIdentityInterface(); if (Events.IsValid() && Identity.IsValid()) { int32 UserIndex = LocalPlayer->ControllerId; TSharedPtr<FUniqueNetId> UniqueID = Identity->GetUniquePlayerId(UserIndex); if (UniqueID.IsValid()) { ACharacter* Pawn = GetCharacter(); check(Pawn); FVector Location = Pawn->GetActorLocation(); FOnlineEventParms Params; Params.Add( TEXT( "SectionId" ), FVariantData( (int32)1 ) ); Params.Add( TEXT( "GameplayModeId" ), FVariantData( (int32)1 ) ); Params.Add( TEXT( "DifficultyLevelId" ), FVariantData( (int32)0 ) ); Params.Add( TEXT( "PlayerRoleId" ), FVariantData( (int32)0 ) ); Params.Add( TEXT( "PlayerWeaponId" ), FVariantData( (int32)0 ) ); Params.Add( TEXT( "EnemyRoleId" ), FVariantData( (int32)0 ) ); Params.Add( TEXT( "EnemyWeaponId" ), FVariantData( (int32)0 ) ); Params.Add( TEXT( "LocationX" ), FVariantData( Location.X ) ); Params.Add( TEXT( "LocationY" ), FVariantData( Location.Y ) ); Params.Add( TEXT( "LocationZ" ), FVariantData( Location.Z ) ); Events->TriggerEvent(*UniqueID, TEXT("PlayerDeath"), Params); } } } } }
void AShooterGameMode::RestartGame() { // Hide the scoreboard too ! for (FConstControllerIterator It = GetWorld()->GetControllerIterator(); It; ++It) { AShooterPlayerController* PlayerController = Cast<AShooterPlayerController>(*It); if (PlayerController != nullptr) { AShooterHUD* ShooterHUD = Cast<AShooterHUD>(PlayerController->GetHUD()); if (ShooterHUD != nullptr) { // Passing true to bFocus here ensures that focus is returned to the game viewport. ShooterHUD->ShowScoreboard(false, true); } } } Super::RestartGame(); }
void AShooterPlayerController::ClientGameEnded_Implementation(class AActor* EndGameFocus, bool bIsWinner) { Super::ClientGameEnded_Implementation(EndGameFocus, bIsWinner); // Allow only looking around SetIgnoreMoveInput(true); bAllowGameActions = false; // Make sure that we still have valid view target SetViewTarget(GetPawn()); // Show scoreboard AShooterHUD* ShooterHUD = GetShooterHUD(); if (ShooterHUD) { ShooterHUD->SetMatchState(bIsWinner ? EShooterMatchState::Won : EShooterMatchState::Lost); if (IsPrimaryPlayer()) { ShooterHUD->ShowScoreboard(true); } } }
void AShooterWeapon::HandleFiring() { if ((CurrentAmmoInClip > 0 || HasInfiniteClip() || HasInfiniteAmmo()) && CanFire()) { if (GetNetMode() != NM_DedicatedServer) { SimulateWeaponFire(); } if (MyPawn && MyPawn->IsLocallyControlled()) { FireWeapon(); UseAmmo(); // update firing FX on remote clients if function was called on server BurstCounter++; } } else if (CanReload()) { StartReload(); } else if (MyPawn && MyPawn->IsLocallyControlled()) { if (GetCurrentAmmo() == 0 && !bRefiring) { PlayWeaponSound(OutOfAmmoSound); AShooterPlayerController* MyPC = Cast<AShooterPlayerController>(MyPawn->Controller); AShooterHUD* MyHUD = MyPC ? Cast<AShooterHUD>(MyPC->GetHUD()) : NULL; if (MyHUD) { MyHUD->NotifyOutOfAmmo(); } } // stop weapon fire FX, but stay in Firing state if (BurstCounter > 0) { OnBurstFinished(); } } if (MyPawn && MyPawn->IsLocallyControlled()) { // local client will notify server if (Role < ROLE_Authority) { ServerHandleFiring(); } // reload after firing last round if (CurrentAmmoInClip <= 0 && CanReload()) { StartReload(); } // setup refire timer bRefiring = (CurrentState == EWeaponState::Firing && WeaponConfig.TimeBetweenShots > 0.0f); if (bRefiring) { GetWorldTimerManager().SetTimer(TimerHandle_HandleFiring, this, &AShooterWeapon::HandleFiring, WeaponConfig.TimeBetweenShots, false); } } LastFireTime = GetWorld()->GetTimeSeconds(); }