void ASWeaponPickup::OnUsed(APawn* InstigatorPawn) { ASCharacter* MyPawn = Cast<ASCharacter>(InstigatorPawn); if (MyPawn) { /* Fetch the default variables of the class we are about to pick up and check if the storage slot is available on the pawn. */ if (MyPawn->WeaponSlotAvailable(WeaponClass->GetDefaultObject<ASWeapon>()->GetStorageSlot())) { FActorSpawnParameters SpawnInfo; SpawnInfo.bNoCollisionFail = true; ASWeapon* NewWeapon = GetWorld()->SpawnActor<ASWeapon>(WeaponClass, SpawnInfo); MyPawn->AddWeapon(NewWeapon); Super::OnUsed(InstigatorPawn); } else { // TODO - FIXME: Send message request to client. ASPlayerController* MyController = Cast<ASPlayerController>(MyPawn->GetController()); if (MyController) { ASHUD* MyHUD = Cast<ASHUD>(MyController->GetHUD()); if (MyHUD) { MyHUD->MessageReceived("Weapon slot already taken."); } } } } }
void ASPlayerController::ClientHUDStateChanged_Implementation(EHUDState NewState) { ASHUD* MyHUD = Cast<ASHUD>(GetHUD()); if (MyHUD) { MyHUD->OnStateChanged(NewState); } }
void ASPlayerController::ClientHUDMessage_Implementation(EHUDMessage MessageID) { /* Turn the ID into a message for the HUD to display */ FText TextMessage = GetText(MessageID); ASHUD* MyHUD = Cast<ASHUD>(GetHUD()); if (MyHUD) { /* Implemented in SurvivalHUD Blueprint */ MyHUD->MessageReceived(TextMessage); } }
/* As with Server side functions, NetMulticast functions have a _Implementation body */ void ASGameState::BroadcastGameMessage_Implementation(const FString& NewMessage) { for (FConstPlayerControllerIterator It = GetWorld()->GetPlayerControllerIterator(); It; It++) { ASPlayerController* MyController = Cast<ASPlayerController>(*It); if (MyController && MyController->IsLocalController()) { ASHUD* MyHUD = Cast<ASHUD>(MyController->GetHUD()); if (MyHUD) { MyHUD->MessageReceived(NewMessage); } } } }
void ASCharacter::ConsumeFood(float AmountRestored) { // Reduce Hunger, ensure we do not go outside of our bounds Hunger = FMath::Clamp(Hunger - AmountRestored, 0.0f, GetMaxHunger()); // Restore Hitpoints Health = FMath::Clamp(Health + AmountRestored, 0.0f, GetMaxHealth()); APlayerController* PC = Cast<APlayerController>(Controller); if (PC) { ASHUD* MyHUD = Cast<ASHUD>(PC->GetHUD()); if (MyHUD) { MyHUD->MessageReceived("Food consumed!"); } } }