// Copyright IHY. Universal Bars plugin. #include "UniversalBarsSubsystem.h" #include "UniversalHUDWidget.h" #include "Blueprint/UserWidget.h" #include "Engine/World.h" #include "GameFramework/PlayerController.h" UUniversalBarsSubsystem* UUniversalBarsSubsystem::Get(const UObject* WorldContextObject) { if (!WorldContextObject) { return nullptr; } if (const UWorld* World = WorldContextObject->GetWorld()) { return World->GetSubsystem(); } return nullptr; } UUniversalHUDWidget* UUniversalBarsSubsystem::CreateHUD(APlayerController* Owner, TSubclassOf HUDClass, int32 ZOrder) { if (!HUDClass) { return nullptr; } UUniversalHUDWidget* Widget = CreateWidget(Owner ? Cast(Owner) : GetWorld()->GetFirstPlayerController(), HUDClass); if (Widget) { Widget->AddToViewport(ZOrder); RegisterHUD(Widget); // also registered in NativeConstruct; idempotent } return Widget; } void UUniversalBarsSubsystem::RegisterHUD(UUniversalHUDWidget* InHUD) { if (InHUD) { HUD = InHUD; } } void UUniversalBarsSubsystem::UnregisterHUD(UUniversalHUDWidget* InHUD) { if (HUD.Get() == InHUD) { HUD.Reset(); } } void UUniversalBarsSubsystem::SetHealth(float Percent) { if (UUniversalHUDWidget* H = HUD.Get()) { H->SetHealth(Percent); } } void UUniversalBarsSubsystem::SetStamina(float Percent) { if (UUniversalHUDWidget* H = HUD.Get()) { H->SetStamina(Percent); } } void UUniversalBarsSubsystem::SetShield(float Percent) { if (UUniversalHUDWidget* H = HUD.Get()) { H->SetShield(Percent); } } void UUniversalBarsSubsystem::SetHunger(float Amount) { if (UUniversalHUDWidget* H = HUD.Get()) { H->SetHunger(Amount); } } void UUniversalBarsSubsystem::SetWeight(float Amount) { if (UUniversalHUDWidget* H = HUD.Get()) { H->SetWeight(Amount); } } void UUniversalBarsSubsystem::SetCold(float Amount) { if (UUniversalHUDWidget* H = HUD.Get()) { H->SetCold(Amount); } } void UUniversalBarsSubsystem::DamageHealth(float Delta) { if (UUniversalHUDWidget* H = HUD.Get()) { H->DamageHealth(Delta); } } void UUniversalBarsSubsystem::HealHealth(float Delta) { if (UUniversalHUDWidget* H = HUD.Get()) { H->HealHealth(Delta); } }