[박치영] Gruntling Monster 작업 완료

main
PCYPC\pcy35 2023-09-12 16:08:13 +09:00
parent 5b55cfbd79
commit 1556d20ba1
20 changed files with 75 additions and 13 deletions

Binary file not shown.

View File

@ -0,0 +1,36 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AI/BehaviorTreeNodes/T_FindRepositionLocation.h"
#include "BehaviorTree/BlackboardComponent.h"
#include "NavigationSystem.h"
EBTNodeResult::Type UT_FindRepositionLocation::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
EBTNodeResult::Type result = Super::ExecuteTask(OwnerComp, NodeMemory);
if(result == EBTNodeResult::Failed)
return EBTNodeResult::Failed;
BlackboardComponent = OwnerComp.GetBlackboardComponent();
if(BlackboardComponent == nullptr)
return EBTNodeResult::Failed;
UObject* pObj = BlackboardComponent->GetValueAsObject(BlackboardKey_TargetToFollow.SelectedKeyName);
if(pObj)
{
AActor* OwnedActor = Cast<AActor>(pObj);
if(OwnedActor)
{
UNavigationSystemV1* navSystem = UNavigationSystemV1::GetNavigationSystem(GetWorld());
if(navSystem)
{
FNavLocation outLavLocation;
navSystem->GetRandomReachablePointInRadius(OwnedActor->GetActorLocation(), RadiusRange, outLavLocation);
BlackboardComponent->SetValueAsVector(BlackboardKey_MoveToLocation.SelectedKeyName, outLavLocation.Location);
return EBTNodeResult::Succeeded;
}
}
}
return EBTNodeResult::Failed;
}

View File

@ -0,0 +1,28 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "BehaviorTree/BTTaskNode.h"
#include "T_FindRepositionLocation.generated.h"
/**
*
*/
UCLASS()
class D1_API UT_FindRepositionLocation : public UBTTaskNode
{
GENERATED_BODY()
protected:
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
private:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="BlackBoard", meta=(AllowPrivateAccess="true"))
FBlackboardKeySelector BlackboardKey_TargetToFollow;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="BlackBoard", meta=(AllowPrivateAccess="true"))
FBlackboardKeySelector BlackboardKey_MoveToLocation;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="BlackBoard", meta=(AllowPrivateAccess="true"))
float RadiusRange;
private:
TObjectPtr<UBlackboardComponent> BlackboardComponent;
};

View File

@ -54,15 +54,15 @@ void AGruntlingEnemy::BeginPlay()
MainWeaponCollisionComponent->SetCollisionMeshComponent(WeaponMeshComponent); MainWeaponCollisionComponent->SetCollisionMeshComponent(WeaponMeshComponent);
MainWeaponCollisionComponent->AddActorToIgnore(this); MainWeaponCollisionComponent->AddActorToIgnore(this);
if(APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0))
{
UUI_HealthBar* HealthBarRef = Cast<UUI_HealthBar>(HealthBarComponent->GetWidget()); UUI_HealthBar* HealthBarRef = Cast<UUI_HealthBar>(HealthBarComponent->GetWidget());
if(HealthBarRef) //ExposeOnSpawn 대용으로 사용 if (HealthBarRef) //ExposeOnSpawn 대용으로 사용
{ {
HealthBarRef->InitializeHealthBar(this->StatsComponent, EStats::Health); HealthBarRef->InitializeHealthBar(this->StatsComponent, EStats::Health);
HealthBarComponent->SetWidget(HealthBarRef); HealthBarComponent->SetWidget(HealthBarRef);
} }
}
if(IsValid(IntroAnimMontage))
PlayAnimMontage(IntroAnimMontage);
} }
void AGruntlingEnemy::OnTargeted(bool bIsTargeted) void AGruntlingEnemy::OnTargeted(bool bIsTargeted)

View File

@ -44,4 +44,6 @@ private:
FName AttachSocketName; FName AttachSocketName;
UPROPERTY(EditAnywhere, Blueprintable, Category="Initialization", meta=(AllowPrivateAccess="true")) UPROPERTY(EditAnywhere, Blueprintable, Category="Initialization", meta=(AllowPrivateAccess="true"))
FName WeaponHandSocketName; FName WeaponHandSocketName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Montage|Intro", meta = (AllowPrivateAccess = "true"))
TObjectPtr<UAnimMontage> IntroAnimMontage;
}; };

View File

@ -4,7 +4,6 @@
#include "AI/MasterAI.h" #include "AI/MasterAI.h"
#include "AIController.h" #include "AIController.h"
#include "CombatPlayerController.h"
#include "Components/CapsuleComponent.h" #include "Components/CapsuleComponent.h"
#include "Components/InputComponent.h" #include "Components/InputComponent.h"
#include "GameFramework/CharacterMovementComponent.h" #include "GameFramework/CharacterMovementComponent.h"
@ -274,6 +273,7 @@ float AMasterAI::PerformAttack(FGameplayTag AttackType, int32 AttackIndex, bool
} }
else else
{ {
RotateToTarget();
StateManagerComponent->SetCurrentState(FCombatGameplayTags::Get().Character_State_Attacking); StateManagerComponent->SetCurrentState(FCombatGameplayTags::Get().Character_State_Attacking);
StateManagerComponent->SetCurrentAction(AttackType); StateManagerComponent->SetCurrentAction(AttackType);
@ -333,9 +333,7 @@ void AMasterAI::CharacterStateBegin(FGameplayTag CharState)
if (FGameplayTag::EmptyTag == CharState) if (FGameplayTag::EmptyTag == CharState)
{/*None*/} {/*None*/}
else if (FCombatGameplayTags::Get().Character_State_Attacking == CharState) else if (FCombatGameplayTags::Get().Character_State_Attacking == CharState)
{ {/*None*/}
RotateToTarget();
}
else if (FCombatGameplayTags::Get().Character_State_Dodging == CharState) else if (FCombatGameplayTags::Get().Character_State_Dodging == CharState)
{/*None*/} {/*None*/}
else if (FCombatGameplayTags::Get().Character_State_GeneralActionState == CharState) else if (FCombatGameplayTags::Get().Character_State_GeneralActionState == CharState)
@ -470,7 +468,6 @@ void AMasterAI::RotateToTargetUpdate(float Value)
if(!IsValid(TargetActor)) if(!IsValid(TargetActor))
return; return;
const FRotator CurrentRotator = GetActorRotation(); const FRotator CurrentRotator = GetActorRotation();
FVector StartVector = GetActorLocation(); FVector StartVector = GetActorLocation();
FVector TargetVector = TargetActor->GetActorLocation(); FVector TargetVector = TargetActor->GetActorLocation();
@ -479,7 +476,6 @@ void AMasterAI::RotateToTargetUpdate(float Value)
UWorld* WorldPointer = GetWorld(); UWorld* WorldPointer = GetWorld();
if(!WorldPointer) if(!WorldPointer)
return; return;
double deltaTime = UGameplayStatics::GetWorldDeltaSeconds(WorldPointer);
FRotator NewRotator = FMath::Lerp<FRotator, float>(CurrentRotator, TargetRotator, Value); FRotator NewRotator = FMath::Lerp<FRotator, float>(CurrentRotator, TargetRotator, Value);
NewRotator.Roll = CurrentRotator.Roll; NewRotator.Roll = CurrentRotator.Roll;
NewRotator.Pitch = CurrentRotator.Pitch; NewRotator.Pitch = CurrentRotator.Pitch;