140 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include "CoreMinimal.h"
 | |
| #include "Components/ActorComponent.h"
 | |
| #include "CharacterStatsComponent.generated.h"
 | |
| 
 | |
| DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnHealthChanged, float, CurrentHealth, float, MaxHealth);
 | |
| DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnDamageChanged, float, CurrentDamage);
 | |
| DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSpeedChanged, float, CurrentSpeed);
 | |
| DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnStatsUpdated);
 | |
| 
 | |
| UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
 | |
| class UTAD_UI_API UCharacterStatsComponent : public UActorComponent
 | |
| {
 | |
|     GENERATED_BODY()
 | |
| 
 | |
| public:
 | |
|     UCharacterStatsComponent();
 | |
| 
 | |
| protected:
 | |
|     virtual void BeginPlay() override;
 | |
| 
 | |
|     // Base stats (without any bonuses)
 | |
|     UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Base Stats")
 | |
|     float BaseMaxHealth;
 | |
| 
 | |
|     UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Base Stats")
 | |
|     float BaseDamage;
 | |
| 
 | |
|     UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Base Stats")
 | |
|     float BaseSpeed;
 | |
| 
 | |
|     // Current values
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Current Stats")
 | |
|     float CurrentHealth;
 | |
| 
 | |
|     // Calculated stats (base + bonuses)
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Current Stats")
 | |
|     float MaxHealth;
 | |
| 
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Current Stats")
 | |
|     float CurrentDamage;
 | |
| 
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Current Stats")
 | |
|     float CurrentSpeed;
 | |
| 
 | |
|     // Skill tree bonuses (flat bonuses)
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Skill Bonuses")
 | |
|     float SkillHealthBonus;
 | |
| 
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Skill Bonuses")
 | |
|     float SkillDamageBonus;
 | |
| 
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Skill Bonuses")
 | |
|     float SkillSpeedBonus;
 | |
| 
 | |
|     // Skill tree bonuses (percentage bonuses)
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Skill Bonuses")
 | |
|     float SkillHealthBonusPercent;
 | |
| 
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Skill Bonuses")
 | |
|     float SkillDamageBonusPercent;
 | |
| 
 | |
|     UPROPERTY(BlueprintReadOnly, Category = "Skill Bonuses")
 | |
|     float SkillSpeedBonusPercent;
 | |
| 
 | |
| public:
 | |
|     // Initialize stats
 | |
|     UFUNCTION(BlueprintCallable, Category = "Character Stats")
 | |
|     void InitializeStats();
 | |
| 
 | |
|     // Update stats from skill tree
 | |
|     UFUNCTION(BlueprintCallable, Category = "Character Stats")
 | |
|     void UpdateStatsFromSkillTree();
 | |
| 
 | |
|     // Called when a skill is purchased
 | |
|     UFUNCTION()
 | |
|     void OnSkillPurchased(FName SkillID);
 | |
| 
 | |
|     // Calculate final stats
 | |
|     UFUNCTION(BlueprintCallable, Category = "Character Stats")
 | |
|     void RecalculateStats();
 | |
| 
 | |
|     // Getters for current stats
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats")
 | |
|     float GetCurrentHealth() const { return CurrentHealth; }
 | |
| 
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats")
 | |
|     float GetMaxHealth() const { return MaxHealth; }
 | |
| 
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats")
 | |
|     float GetHealthPercentage() const { return MaxHealth > 0 ? CurrentHealth / MaxHealth : 0.0f; }
 | |
| 
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats")
 | |
|     float GetCurrentDamage() const { return CurrentDamage; }
 | |
| 
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats")
 | |
|     float GetCurrentSpeed() const { return CurrentSpeed; }
 | |
| 
 | |
|     // Health management
 | |
|     UFUNCTION(BlueprintCallable, Category = "Character Stats")
 | |
|     void TakeDamage(float DamageAmount);
 | |
| 
 | |
|     UFUNCTION(BlueprintCallable, Category = "Character Stats")
 | |
|     void Heal(float HealAmount);
 | |
| 
 | |
|     UFUNCTION(BlueprintCallable, Category = "Character Stats")
 | |
|     void SetHealth(float NewHealth);
 | |
| 
 | |
|     // Get formatted text for UI
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats UI")
 | |
|     FText GetHealthText() const;
 | |
| 
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats UI")
 | |
|     FText GetDamageText() const;
 | |
| 
 | |
|     UFUNCTION(BlueprintPure, Category = "Character Stats UI")
 | |
|     FText GetSpeedText() const;
 | |
| 
 | |
|     // Events
 | |
|     UPROPERTY(BlueprintAssignable, Category = "Stats Events")
 | |
|     FOnHealthChanged OnHealthChanged;
 | |
| 
 | |
|     UPROPERTY(BlueprintAssignable, Category = "Stats Events")
 | |
|     FOnDamageChanged OnDamageChanged;
 | |
| 
 | |
|     UPROPERTY(BlueprintAssignable, Category = "Stats Events")
 | |
|     FOnSpeedChanged OnSpeedChanged;
 | |
| 
 | |
|     UPROPERTY(BlueprintAssignable, Category = "Stats Events")
 | |
|     FOnStatsUpdated OnStatsUpdated;
 | |
| 
 | |
| private:
 | |
|     // Apply speed to character movement
 | |
|     void ApplySpeedToMovement();
 | |
| 
 | |
|     // Reference to owner's skill tree component
 | |
|     UPROPERTY()
 | |
|     class USkillTreeComponent* OwnerSkillTree;
 | |
| }; |