From 495424a2b275545756f806945dbc2ca955fab0f7 Mon Sep 17 00:00:00 2001 From: Dolobarsch Date: Fri, 28 Aug 2026 00:01:16 +0200 Subject: [PATCH] =?UTF-8?q?F=C3=BCge=20HealthDebuff-Mechanik=20hinzu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die HealthComponent wurde erweitert, um einen neuen `HealthDebuff`-Wert zu unterstützen, der einen Teil der maximalen Gesundheit des Charakters unbrauchbar macht. - Neue Methoden `GetHealthDebuff`, `SetHealthDebuff` und `GetEffectiveMaxHealth` hinzugefügt. - `CurrentHealth` wird nun gegen den effektiven Maximalwert (`GetEffectiveMaxHealth`) begrenzt. - Neues Event `OnHealthDebuffChanged` implementiert, um Änderungen am Debuff zu signalisieren. - HealthBar-Widget aktualisiert, um den `HealthDebuff` dynamisch anzuzeigen. - Sprint-Logik verbessert: Sprinten nur möglich, wenn der Charakter am Boden ist. - Binärdateien (`BP_ThirdPersonCharacter.uasset`, `WBP_StaminaBar.uasset`) geändert. --- .../Blueprints/BP_ThirdPersonCharacter.uasset | Bin 110137 -> 119958 bytes Content/UI/WBP_StaminaBar.uasset | Bin 28787 -> 25191 bytes Source/KingshearthLegacy/HealthComponent.cpp | 32 +++++++++++++++--- Source/KingshearthLegacy/HealthComponent.h | 19 +++++++++++ .../KingshearthLegacyCharacter.cpp | 3 +- .../KingshearthLegacy/UI/HealthBarWidget.cpp | 9 ++++- Source/KingshearthLegacy/UI/HealthBarWidget.h | 7 ++-- 7 files changed, 60 insertions(+), 10 deletions(-) diff --git a/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset b/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset index f1874949ea7ee335003d7c97c764a1100d3c4961..3b0f64831b933c0af6bf0b14b610b101d3b76ba5 100644 GIT binary patch delta 28411 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 SP%{nPE=6>zqWv$BZvO?5h9>I( diff --git a/Content/UI/WBP_StaminaBar.uasset b/Content/UI/WBP_StaminaBar.uasset index 144203068e8a6ecf8505f8cb0ac8732e5b9820bd..c4847e83e1527026c2403831bb92d407453bb009 100644 GIT binary patch delta 3462 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 diff --git a/Source/KingshearthLegacy/HealthComponent.cpp b/Source/KingshearthLegacy/HealthComponent.cpp index dfbedda..3081ceb 100644 --- a/Source/KingshearthLegacy/HealthComponent.cpp +++ b/Source/KingshearthLegacy/HealthComponent.cpp @@ -9,7 +9,7 @@ void UHealthComponent::BeginPlay() { Super::BeginPlay(); - CurrentHealth = MaxHealth; + CurrentHealth = GetEffectiveMaxHealth(); } float UHealthComponent::GetHealth() const @@ -22,18 +22,28 @@ float UHealthComponent::GetMaxHealth() const return MaxHealth; } +float UHealthComponent::GetHealthDebuff() const +{ + return HealthDebuff; +} + +float UHealthComponent::GetEffectiveMaxHealth() const +{ + return MaxHealth * (1.0f - HealthDebuff); +} + void UHealthComponent::SetMaxHealth(float NewMaxHealth) { MaxHealth = FMath::Max(NewMaxHealth, 0.0f); - CurrentHealth = FMath::Clamp(CurrentHealth, 0.0f, MaxHealth); + CurrentHealth = FMath::Clamp(CurrentHealth, 0.0f, GetEffectiveMaxHealth()); } void UHealthComponent::SetHealth(float NewHealth) { const float PreviousHealth = CurrentHealth; - CurrentHealth = FMath::Clamp(NewHealth, 0.0f, MaxHealth); + CurrentHealth = FMath::Clamp(NewHealth, 0.0f, GetEffectiveMaxHealth()); OnHealthChanged.Broadcast(CurrentHealth); @@ -62,4 +72,18 @@ void UHealthComponent::RemoveHealth(float Amount) } SetHealth(CurrentHealth - Amount); -} \ No newline at end of file +} + +void UHealthComponent::SetHealthDebuff(float NewHealthDebuff) +{ + HealthDebuff = FMath::Clamp(NewHealthDebuff, 0.0f, 1.0f); + + const float ClampedHealth = FMath::Clamp(CurrentHealth, 0.0f, GetEffectiveMaxHealth()); + if (!FMath::IsNearlyEqual(ClampedHealth, CurrentHealth)) + { + CurrentHealth = ClampedHealth; + OnHealthChanged.Broadcast(CurrentHealth); + } + + OnHealthDebuffChanged.Broadcast(HealthDebuff); +} diff --git a/Source/KingshearthLegacy/HealthComponent.h b/Source/KingshearthLegacy/HealthComponent.h index c904a30..f69b6df 100644 --- a/Source/KingshearthLegacy/HealthComponent.h +++ b/Source/KingshearthLegacy/HealthComponent.h @@ -5,6 +5,7 @@ #include "HealthComponent.generated.h" DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnHealthChanged, float, NewHealth); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnHealthDebuffChanged, float, NewHealthDebuff); DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnDeath); UCLASS(ClassGroup = (Custom), meta = (BlueprintSpawnableComponent)) @@ -23,9 +24,14 @@ public: UFUNCTION(BlueprintPure, Category = "Health") float GetHealth() const; + /** Nominal cap, unaffected by HealthDebuff. Feeds the health bar's total width. */ UFUNCTION(BlueprintPure, Category = "Health") float GetMaxHealth() const; + /** 0-1 fraction of MaxHealth currently locked/unusable (curses, status effects, ...). */ + UFUNCTION(BlueprintPure, Category = "Health") + float GetHealthDebuff() const; + UFUNCTION(BlueprintCallable, Category = "Health") void SetMaxHealth(float NewMaxHealth); @@ -38,17 +44,30 @@ public: UFUNCTION(BlueprintCallable, Category = "Health") void RemoveHealth(float Amount); + /** Sets how much of MaxHealth is currently locked away (0-1). Not driven by anything yet - a future debuff/curse/status-effect system calls this. */ + UFUNCTION(BlueprintCallable, Category = "Health") + void SetHealthDebuff(float NewHealthDebuff); + protected: + /** MaxHealth minus whatever HealthDebuff currently locks away - what Health is actually clamped against. */ + float GetEffectiveMaxHealth() const; + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Health") float MaxHealth = 100.0f; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Health") float CurrentHealth = 100.0f; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Health") + float HealthDebuff = 0.0f; + public: UPROPERTY(BlueprintAssignable, Category = "Health") FOnHealthChanged OnHealthChanged; + UPROPERTY(BlueprintAssignable, Category = "Health") + FOnHealthDebuffChanged OnHealthDebuffChanged; + UPROPERTY(BlueprintAssignable, Category = "Health") FOnDeath OnDeath; }; \ No newline at end of file diff --git a/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp b/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp index 4f80a44..06d412e 100644 --- a/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp +++ b/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp @@ -69,8 +69,9 @@ void AKingshearthLegacyCharacter::Tick(float DeltaSeconds) } const bool bIsMoving = GetVelocity().SizeSquared() > FMath::Square(SprintMovementThreshold); + const bool bIsGrounded = GetCharacterMovement()->IsMovingOnGround(); - if (bWantsToSprint && bIsMoving && StaminaComponent->GetStamina() > 0.0f) + if (bWantsToSprint && bIsMoving && bIsGrounded && StaminaComponent->GetStamina() > 0.0f) { GetCharacterMovement()->MaxWalkSpeed = BaseWalkSpeed * SprintSpeedMultiplier; StaminaComponent->RemoveStamina(SprintStaminaDrainRate * DeltaSeconds); diff --git a/Source/KingshearthLegacy/UI/HealthBarWidget.cpp b/Source/KingshearthLegacy/UI/HealthBarWidget.cpp index dee33a6..57340c7 100644 --- a/Source/KingshearthLegacy/UI/HealthBarWidget.cpp +++ b/Source/KingshearthLegacy/UI/HealthBarWidget.cpp @@ -11,16 +11,18 @@ void UHealthBarWidget::InitializeHealthBar(UHealthComponent* InHealthComponent) if (HealthComponent) { HealthComponent->OnHealthChanged.RemoveDynamic(this, &UHealthBarWidget::HandleHealthChanged); + HealthComponent->OnHealthDebuffChanged.RemoveDynamic(this, &UHealthBarWidget::HandleHealthDebuffChanged); HealthComponent->OnDeath.RemoveDynamic(this, &UHealthBarWidget::HandleDeath); } HealthComponent = InHealthComponent; HealthComponent->OnHealthChanged.AddDynamic(this, &UHealthBarWidget::HandleHealthChanged); + HealthComponent->OnHealthDebuffChanged.AddDynamic(this, &UHealthBarWidget::HandleHealthDebuffChanged); HealthComponent->OnDeath.AddDynamic(this, &UHealthBarWidget::HandleDeath); SetStatValue(HealthComponent->GetHealth(), HealthComponent->GetMaxHealth()); - SetMaxHealthDebuff(DefaultMaxHealthDebuffPercent); + SetMaxHealthDebuff(HealthComponent->GetHealthDebuff()); } void UHealthBarWidget::SetMaxHealthDebuff(float InDebuffPercent) @@ -36,6 +38,11 @@ void UHealthBarWidget::HandleHealthChanged(float NewHealth) } } +void UHealthBarWidget::HandleHealthDebuffChanged(float NewHealthDebuff) +{ + SetMaxHealthDebuff(NewHealthDebuff); +} + void UHealthBarWidget::HandleDeath() { OnHealthDepleted(); diff --git a/Source/KingshearthLegacy/UI/HealthBarWidget.h b/Source/KingshearthLegacy/UI/HealthBarWidget.h index 2631c3c..b2152ad 100644 --- a/Source/KingshearthLegacy/UI/HealthBarWidget.h +++ b/Source/KingshearthLegacy/UI/HealthBarWidget.h @@ -27,6 +27,9 @@ protected: UFUNCTION() void HandleHealthChanged(float NewHealth); + UFUNCTION() + void HandleHealthDebuffChanged(float NewHealthDebuff); + UFUNCTION() void HandleDeath(); @@ -36,8 +39,4 @@ protected: UPROPERTY(BlueprintReadOnly, Category = "Health") TObjectPtr HealthComponent; - - /** 0-1 starting max-health debuff applied in InitializeHealthBar, e.g. 0.1 = 10% of max health locked/unusable. Defaults to 0 since this bar reflects a live component. */ - UPROPERTY(EditDefaultsOnly, Category = "Health") - float DefaultMaxHealthDebuffPercent = 0.0f; };