diff --git a/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset b/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset index c0bf391c..9dcfc29b 100644 Binary files a/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset and b/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/ABP_UE4_CombatCharacter.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/ABP_UE4_CombatCharacter.uasset new file mode 100644 index 00000000..60ac850f Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/ABP_UE4_CombatCharacter.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/BS_MM_WalkRun.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/BS_MM_WalkRun.uasset new file mode 100644 index 00000000..4bc95e9d Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/BS_MM_WalkRun.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/GreatSword_BS.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/GreatSword_BS.uasset new file mode 100644 index 00000000..36160bbe Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/GreatSword_BS.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Idle.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Idle.uasset new file mode 100644 index 00000000..eca4e5ff Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Idle.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Idle1.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Idle1.uasset new file mode 100644 index 00000000..cb90993f Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Idle1.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Jog_Fwd.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Jog_Fwd.uasset new file mode 100644 index 00000000..61d3a6e6 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Jog_Fwd.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Jog_Fwd1.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Jog_Fwd1.uasset new file mode 100644 index 00000000..c10b0f8c Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Jog_Fwd1.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/LightSword_BS.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/LightSword_BS.uasset new file mode 100644 index 00000000..693eb93b Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/LightSword_BS.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Fall_Loop.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Fall_Loop.uasset new file mode 100644 index 00000000..f3630920 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Fall_Loop.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Idle.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Idle.uasset new file mode 100644 index 00000000..0f792c7f Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Idle.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Jump.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Jump.uasset new file mode 100644 index 00000000..d128560b Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Jump.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Land.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Land.uasset new file mode 100644 index 00000000..39a907ae Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Land.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Run_Fwd.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Run_Fwd.uasset new file mode 100644 index 00000000..f669203e Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Run_Fwd.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Walk_Fwd.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Walk_Fwd.uasset new file mode 100644 index 00000000..a9824306 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Walk_Fwd.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Walk_InPlace.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Walk_InPlace.uasset new file mode 100644 index 00000000..b3309391 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/MM_Walk_InPlace.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front.uasset new file mode 100644 index 00000000..da8218e1 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_Montage.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_Montage.uasset new file mode 100644 index 00000000..2f169f56 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/Standing_React_Large_Front_Montage.uasset differ diff --git a/Content/Characters/Mannequin_UE4/UE4_MannyAnims/TravelMode_Fwd.uasset b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/TravelMode_Fwd.uasset new file mode 100644 index 00000000..8aeb6728 Binary files /dev/null and b/Content/Characters/Mannequin_UE4/UE4_MannyAnims/TravelMode_Fwd.uasset differ diff --git a/Content/CombatSystem/Blueprints/Actor/BP_SteelBoots.uasset b/Content/CombatSystem/Blueprints/Actor/BP_SteelBoots.uasset new file mode 100644 index 00000000..f643d112 Binary files /dev/null and b/Content/CombatSystem/Blueprints/Actor/BP_SteelBoots.uasset differ diff --git a/Content/CombatSystem/Blueprints/Actor/BP_SteelChest.uasset b/Content/CombatSystem/Blueprints/Actor/BP_SteelChest.uasset new file mode 100644 index 00000000..e147e558 Binary files /dev/null and b/Content/CombatSystem/Blueprints/Actor/BP_SteelChest.uasset differ diff --git a/Content/CombatSystem/Blueprints/Actor/BP_SteelGauntlets.uasset b/Content/CombatSystem/Blueprints/Actor/BP_SteelGauntlets.uasset new file mode 100644 index 00000000..6c851e90 Binary files /dev/null and b/Content/CombatSystem/Blueprints/Actor/BP_SteelGauntlets.uasset differ diff --git a/Content/CombatSystem/Blueprints/Actor/BP_SteelHelmet.uasset b/Content/CombatSystem/Blueprints/Actor/BP_SteelHelmet.uasset new file mode 100644 index 00000000..af27c6cf Binary files /dev/null and b/Content/CombatSystem/Blueprints/Actor/BP_SteelHelmet.uasset differ diff --git a/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset b/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset index a53c7515..c710ec7f 100644 Binary files a/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset and b/Content/CombatSystem/Blueprints/BP_CombatCharacter.uasset differ diff --git a/Content/CombatSystem/Blueprints/BP_CombatPlayerController.uasset b/Content/CombatSystem/Blueprints/BP_CombatPlayerController.uasset new file mode 100644 index 00000000..fbd378cd Binary files /dev/null and b/Content/CombatSystem/Blueprints/BP_CombatPlayerController.uasset differ diff --git a/Content/CombatSystem/Blueprints/BP_D1GameMode.uasset b/Content/CombatSystem/Blueprints/BP_D1GameMode.uasset index 8668d26f..345e76b3 100644 Binary files a/Content/CombatSystem/Blueprints/BP_D1GameMode.uasset and b/Content/CombatSystem/Blueprints/BP_D1GameMode.uasset differ diff --git a/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset b/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset new file mode 100644 index 00000000..bcc88cdd Binary files /dev/null and b/Content/CombatSystem/Blueprints/BP_TestDummyCharacter.uasset differ diff --git a/Content/CombatSystem/UI/WBP_MainHUD.uasset b/Content/CombatSystem/UI/WBP_MainHUD.uasset index 639d4129..9f4808c0 100644 Binary files a/Content/CombatSystem/UI/WBP_MainHUD.uasset and b/Content/CombatSystem/UI/WBP_MainHUD.uasset differ diff --git a/Content/CombatSystem/UI/WBP_StatBar.uasset b/Content/CombatSystem/UI/WBP_StatBar.uasset index 0844e1eb..cab096eb 100644 Binary files a/Content/CombatSystem/UI/WBP_StatBar.uasset and b/Content/CombatSystem/UI/WBP_StatBar.uasset differ diff --git a/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset b/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset new file mode 100644 index 00000000..6aa2dd9f Binary files /dev/null and b/Content/__ExternalActors__/Maps/ThirdPersonMap/5/ES/FPX4CMFFPDV2LSL5SRPJ3D.uasset differ diff --git a/Content/__ExternalActors__/Maps/ThirdPersonMap/7/YS/ZFVZV5RGVXFDJDFNO8TVNW.uasset b/Content/__ExternalActors__/Maps/ThirdPersonMap/7/YS/ZFVZV5RGVXFDJDFNO8TVNW.uasset deleted file mode 100644 index 74cc1a70..00000000 Binary files a/Content/__ExternalActors__/Maps/ThirdPersonMap/7/YS/ZFVZV5RGVXFDJDFNO8TVNW.uasset and /dev/null differ diff --git a/Source/D1/Actor/BaseEquippable.cpp b/Source/D1/Actor/BaseEquippable.cpp index 2a7c5cc8..9996f4bf 100644 --- a/Source/D1/Actor/BaseEquippable.cpp +++ b/Source/D1/Actor/BaseEquippable.cpp @@ -42,7 +42,7 @@ UPrimitiveComponent* ABaseEquippable::GetItemMesh() void ABaseEquippable::OnEquipped() { SetIsEquipped(true); - AttachToActor(this, FAttachmentTransformRules::SnapToTargetNotIncludingScale, AttachSocketName); + AttachActor(AttachSocketName); } void ABaseEquippable::OnUnequipped() diff --git a/Source/D1/Actor/BaseEquippable.h b/Source/D1/Actor/BaseEquippable.h index 1af1bcc8..9c4e18da 100644 --- a/Source/D1/Actor/BaseEquippable.h +++ b/Source/D1/Actor/BaseEquippable.h @@ -24,12 +24,12 @@ public: virtual void SetIsEquipped(bool IsEquipped); virtual bool GetIsEquipped(); protected: - UPROPERTY(EditAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true")) class USceneComponent* DefaultSceneRoot; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Mesh, meta = (AllowPrivateAccess = "true")) class USkeletalMeshComponent* ItemSkeletalMesh; - UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Mesh, meta = (AllowPrivateAccess = "true")) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Mesh, meta = (AllowPrivateAccess = "true")) class UStaticMeshComponent* ItemStaticMesh; protected: UPROPERTY(VisibleAnywhere, BlueprintReadWrite) diff --git a/Source/D1/Actor/BaseWeapon.cpp b/Source/D1/Actor/BaseWeapon.cpp index 51552a62..e8ebdbc4 100644 --- a/Source/D1/Actor/BaseWeapon.cpp +++ b/Source/D1/Actor/BaseWeapon.cpp @@ -68,7 +68,7 @@ void ABaseWeapon::OnHit(FHitResult hitResult) if (pActor) { if (pActor->Execute_CanReceiveDamage(hitResult.GetActor())) - UGameplayStatics::ApplyPointDamage(hitResult.GetActor(), Damage, GetOwner()->GetActorForwardVector(), hitResult, GetInstigatorController(), this, TSubclassOf(UDamageType::StaticClass())); + UGameplayStatics::ApplyPointDamage(hitResult.GetActor(), GetDamage(), GetOwner()->GetActorForwardVector(), hitResult, GetInstigatorController(), this, TSubclassOf(UDamageType::StaticClass())); } } diff --git a/Source/D1/Actor/MasterPose.cpp b/Source/D1/Actor/MasterPose.cpp new file mode 100644 index 00000000..62f7d2b4 --- /dev/null +++ b/Source/D1/Actor/MasterPose.cpp @@ -0,0 +1,42 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Actor/MasterPose.h" +#include "MasterPose.h" +#include "GameFramework/Character.h" +#include "Components/StatsComponent.h" + +AMasterPose::AMasterPose() +{ + ArmorValue = 2.f; +} + +void AMasterPose::AttachActor(const FName SocketName) +{ + USkeletalMesh* skelMeshAsset = ItemSkeletalMesh->GetSkeletalMeshAsset(); + if (!IsValid(skelMeshAsset)) + return; + + + USkeletalMeshComponent* OwnerSkelMesh = Cast(GetOwner())->GetMesh(); + if (!IsValid(OwnerSkelMesh)) + return; + + FAttachmentTransformRules rules(EAttachmentRule::KeepRelative, EAttachmentRule::KeepRelative, EAttachmentRule::KeepRelative, true); + ItemSkeletalMesh->AttachToComponent(OwnerSkelMesh, rules, SocketName); + ItemSkeletalMesh->SetLeaderPoseComponent(OwnerSkelMesh); +} + +void AMasterPose::OnEquipped() +{ + Super::OnEquipped(); + if (UStatsComponent* StatComponent = GetOwner()->GetComponentByClass()) + StatComponent->ModifyCurrentStatValue(EStats::Armor, ArmorValue, false); +} + +void AMasterPose::OnUnequipped() +{ + Super::OnUnequipped(); + if (UStatsComponent* StatComponent = GetOwner()->GetComponentByClass()) + StatComponent->ModifyCurrentStatValue(EStats::Armor, -1.f * ArmorValue); +} diff --git a/Source/D1/Actor/MasterPose.h b/Source/D1/Actor/MasterPose.h new file mode 100644 index 00000000..c41faf04 --- /dev/null +++ b/Source/D1/Actor/MasterPose.h @@ -0,0 +1,27 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Actor/BaseEquippable.h" +#include "MasterPose.generated.h" + +/** + * + */ +UCLASS() +class D1_API AMasterPose : public ABaseEquippable +{ + GENERATED_BODY() +public: + AMasterPose(); + +public: + virtual void AttachActor(const FName SocketName) override; + virtual void OnEquipped() override; + virtual void OnUnequipped() override; + +public: + UPROPERTY(EditDefaultsOnly, Category = "Stats") + float ArmorValue; +}; diff --git a/Source/D1/CombatCharacter.h b/Source/D1/CombatCharacter.h index 37d2eed3..17a2b191 100644 --- a/Source/D1/CombatCharacter.h +++ b/Source/D1/CombatCharacter.h @@ -139,7 +139,7 @@ private: bool PerformAction(ECharacterState characterState, ECharacterAction characterAction, int32 montageIndex); void PerformDeath(); -private: +protected: bool CanPerformToggleCombat(); bool CanPerformAttack(); bool CanPerformDodge(); diff --git a/Source/D1/CombatPlayerController.cpp b/Source/D1/CombatPlayerController.cpp new file mode 100644 index 00000000..b5467f43 --- /dev/null +++ b/Source/D1/CombatPlayerController.cpp @@ -0,0 +1,15 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "CombatPlayerController.h" +#include "UI/UI_MainHUD.h" + +void ACombatPlayerController::BeginPlay() +{ + if (MainHUDClass) + { + UUI_MainHUD* mainHUD = CreateWidget(this, MainHUDClass); + mainHUD->AddToViewport(); + } + +} diff --git a/Source/D1/CombatPlayerController.h b/Source/D1/CombatPlayerController.h new file mode 100644 index 00000000..4691b40d --- /dev/null +++ b/Source/D1/CombatPlayerController.h @@ -0,0 +1,23 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/PlayerController.h" +#include "CombatPlayerController.generated.h" + +/** + * + */ +UCLASS() +class D1_API ACombatPlayerController : public APlayerController +{ + GENERATED_BODY() + +public: + virtual void BeginPlay() override; + +private: + UPROPERTY(EditDefaultsOnly, Category = UI) + TSubclassOf MainHUDClass; +}; diff --git a/Source/D1/Components/StatsComponent.cpp b/Source/D1/Components/StatsComponent.cpp index 182ac2c7..05c4157f 100644 --- a/Source/D1/Components/StatsComponent.cpp +++ b/Source/D1/Components/StatsComponent.cpp @@ -4,6 +4,7 @@ #include "Components/StatsComponent.h" #include "Components/StateManagerComponent.h" #include "Math/UnrealMathUtility.h" +#include "Kismet/KismetSystemLibrary.h" // Sets default values for this component's properties UStatsComponent::UStatsComponent() @@ -96,7 +97,7 @@ void UStatsComponent::StartRegen(EStats statType) if (World) { World->GetTimerManager().ClearTimer(RegenTimerHandle); - World->GetTimerManager().SetTimer(RegenTimerHandle, this, &UStatsComponent::RegenerateStamina, 1.5f, true); + World->GetTimerManager().SetTimer(AfterRegenTimerHandle, this, &UStatsComponent::AfterDelayExecuteRegenStamina, 1.5f, false); } } } @@ -108,12 +109,28 @@ void UStatsComponent::StartRegen(EStats statType) } } +void UStatsComponent::AfterDelayExecuteRegenStamina() +{ + if (GEngine) + { + UWorld* World = GEngine->GetWorldFromContextObjectChecked(this); + if (World) + { + World->GetTimerManager().ClearTimer(RegenTimerHandle); + World->GetTimerManager().SetTimer(RegenTimerHandle, this, &UStatsComponent::RegenerateStamina, 0.1f, true); + } + } +} + void UStatsComponent::RegenerateStamina() { float curStamina = StaminaRegenRate + GetCurrentStatValue(EStats::Stamina); curStamina = FMath::Clamp(curStamina, 0.f, GetMaxStatValue(EStats::Stamina)); SetCurrentStatValue(EStats::Stamina, curStamina); + //FString debugStr = FString::Printf(TEXT("Stamina %f"), curStamina); + //GEngine->AddOnScreenDebugMessage(-1, 3.f, FColor::Blue, debugStr); + if (GetCurrentStatValue(EStats::Stamina) >= GetMaxStatValue(EStats::Stamina)) { UWorld* World = GEngine->GetWorldFromContextObjectChecked(this); diff --git a/Source/D1/Components/StatsComponent.h b/Source/D1/Components/StatsComponent.h index 20854780..8c9aad15 100644 --- a/Source/D1/Components/StatsComponent.h +++ b/Source/D1/Components/StatsComponent.h @@ -55,6 +55,7 @@ public: void ModifyCurrentStatValue(EStats stat, float value, bool bShouldRegenerate = true); void TakeDamageOnStat(float inDamage); void StartRegen(EStats statType); + void AfterDelayExecuteRegenStamina(); void RegenerateStamina(); public: @@ -77,5 +78,6 @@ public: //Delegate FOnCurrentStatValueUpdated OnCurrentStatValueUpdated; private: + FTimerHandle AfterRegenTimerHandle; FTimerHandle RegenTimerHandle; }; diff --git a/Source/D1/TestDummyCharacter.cpp b/Source/D1/TestDummyCharacter.cpp new file mode 100644 index 00000000..09def306 --- /dev/null +++ b/Source/D1/TestDummyCharacter.cpp @@ -0,0 +1,50 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "TestDummyCharacter.h" +#include "Engine/DamageEvents.h" +#include "Actor/BaseEquippable.h" +#include "Kismet/GameplayStatics.h" + +void ATestDummyCharacter::BeginPlay() +{ + ACharacter::BeginPlay(); + StatsComponent->InitializeStats(); + + for (auto armor : StartingEquipment) + { + FActorSpawnParameters spawnParam; + spawnParam.Owner = this; + spawnParam.Instigator = this; + ABaseEquippable* SpawnItem = Cast(GetWorld()->SpawnActor(armor, &GetActorTransform(), spawnParam)); + if (SpawnItem) + SpawnItem->OnEquipped(); + } +} + +//float ATestDummyCharacter::TakeDamage(float Damage, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) +//{ +// float fDamage = ACharacter::TakeDamage(Damage, DamageEvent, EventInstigator, DamageCauser); +// +// if (DamageEvent.IsOfType(FPointDamageEvent::ClassID)) +// { +// const FPointDamageEvent* PointDamageEvent = static_cast(&DamageEvent); +// +// StatsComponent->TakeDamageOnStat(Damage); +// +// //Play Sound +// UGameplayStatics::PlaySoundAtLocation(this, HitSound, PointDamageEvent->HitInfo.Location); +// +// //Hit Effect +// UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), HitEmitter, PointDamageEvent->HitInfo.Location); +// +// if (CanReceiveHitReaction()) +// { +// StateManagerComponent->SetCurrentState(ECharacterState::Disable); +// +// //Play Animation +// PlayAnimMontage(HitMontage); +// } +// } +// return fDamage; +//} diff --git a/Source/D1/TestDummyCharacter.h b/Source/D1/TestDummyCharacter.h new file mode 100644 index 00000000..9df543a7 --- /dev/null +++ b/Source/D1/TestDummyCharacter.h @@ -0,0 +1,23 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "CombatCharacter.h" +#include "TestDummyCharacter.generated.h" + +/** + * + */ +UCLASS() +class D1_API ATestDummyCharacter : public ACombatCharacter +{ + GENERATED_BODY() + +public: + virtual void BeginPlay() override; + +public: + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + TArray> StartingEquipment; +}; diff --git a/Source/D1/UI/UI_MainHUD.cpp b/Source/D1/UI/UI_MainHUD.cpp new file mode 100644 index 00000000..12ef1a64 --- /dev/null +++ b/Source/D1/UI/UI_MainHUD.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "UI/UI_MainHUD.h" + diff --git a/Source/D1/UI/UI_MainHUD.h b/Source/D1/UI/UI_MainHUD.h new file mode 100644 index 00000000..214b18d3 --- /dev/null +++ b/Source/D1/UI/UI_MainHUD.h @@ -0,0 +1,21 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "UI_MainHUD.generated.h" + +/** + * + */ +UCLASS() +class D1_API UUI_MainHUD : public UUserWidget +{ + GENERATED_BODY() +public: + UPROPERTY(meta = (BindWidget)) + TObjectPtr HealthBar; + UPROPERTY(meta = (BindWidget)) + TObjectPtr StaminaBar; +}; diff --git a/Source/D1/UI/UI_StatBar.cpp b/Source/D1/UI/UI_StatBar.cpp index a3fbd52b..eebb332a 100644 --- a/Source/D1/UI/UI_StatBar.cpp +++ b/Source/D1/UI/UI_StatBar.cpp @@ -4,7 +4,25 @@ #include "UI/UI_StatBar.h" #include "Components/ProgressBar.h" -void UUI_StatBar::PreConstruct() +void UUI_StatBar::NativeConstruct() { - + APawn* pplayer = GetOwningPlayerPawn(); + if (pplayer) + { + StatsComponent = pplayer->GetComponentByClass(); + if (IsValid(StatsComponent)) + StatsComponent->OnCurrentStatValueUpdated.AddUObject(this, &UUI_StatBar::StatBarStatValueUpdated); + } +} + +void UUI_StatBar::StatBarStatValueUpdated(EStats stat, float value) +{ + if (StatType != stat) + return; + + if (!IsValid(StatsComponent)) + return; + + float fPercent = value / StatsComponent->GetMaxStatValue(StatType); + StatBar->SetPercent(fPercent); } diff --git a/Source/D1/UI/UI_StatBar.h b/Source/D1/UI/UI_StatBar.h index aebcebea..604c5835 100644 --- a/Source/D1/UI/UI_StatBar.h +++ b/Source/D1/UI/UI_StatBar.h @@ -4,6 +4,7 @@ #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" +#include "Components/StatsComponent.h" #include "UI_StatBar.generated.h" /** @@ -15,8 +16,16 @@ class D1_API UUI_StatBar : public UUserWidget GENERATED_BODY() protected: - virtual void PreConstruct() override; + virtual void NativeConstruct() override; +public: //Delegate + void StatBarStatValueUpdated(EStats stat, float value); public: - UPROPERTY(EditAnywhere, meta = (BindWidget)) + UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget)) class UProgressBar* StatBar; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Initialization , meta=(AllowPrivateAccess="true")) + EStats StatType; + + UPROPERTY(visibleAnywhere, BlueprintReadWrite, Category=Initialization , meta=(AllowPrivateAccess="true")) + TObjectPtr StatsComponent; };