the player character can automatically pick up souls

This commit is contained in:
Ji Yoon Rhee 2024-08-22 23:24:14 +09:00
parent d91704b9a7
commit e8cacbe1c7
9 changed files with 160 additions and 1 deletions

View File

@ -0,0 +1,44 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "HYAutomaticPickUp.h"
#include "HYPlayerCharacController.h"
// Sets default values
AHYAutomaticPickUp::AHYAutomaticPickUp()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
PickupMesh = CreateDefaultSubobject<UStaticMeshComponent>("PickupMesh");
RootComponent = Cast<USceneComponent>(PickupMesh);
ItemID = FName("No ID");
}
void AHYAutomaticPickUp::Collect_Implementation(APlayerController* Controller)
{
AHYPlayerCharacController* IController = Cast<AHYPlayerCharacController>(Controller);
if (IController->AddItemToInventoryByID(ItemID))
Destroy();
}
FName AHYAutomaticPickUp::GetItemID()
{
return ItemID;
}
// Called when the game starts or when spawned
void AHYAutomaticPickUp::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AHYAutomaticPickUp::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}

View File

@ -0,0 +1,38 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "HYAutomaticPickUp.generated.h"
UCLASS()
class HWANYOUNG2_API AHYAutomaticPickUp : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AHYAutomaticPickUp();
UFUNCTION(BlueprintNativeEvent)
void Collect(APlayerController* Controller);
virtual void Collect_Implementation(APlayerController* Controller);
FName GetItemID();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
UPROPERTY(EditAnywhere)
UStaticMeshComponent* PickupMesh;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FName ItemID;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
};

View File

@ -0,0 +1,18 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "HYMoneyAutoPickUp.h"
#include "HYPlayerCharacController.h"
AHYMoneyAutoPickUp::AHYMoneyAutoPickUp()
{
Super::ItemID = FName("Lost soul");
Value = 1;
}
void AHYMoneyAutoPickUp::Collect_Implementation(APlayerController* Controller)
{
AHYPlayerCharacController* IController = Cast<AHYPlayerCharacController>(Controller);
IController->Currency += Value;
Destroy();
}

View File

@ -0,0 +1,26 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "HYAutomaticPickUp.h"
#include "HYMoneyAutoPickUp.generated.h"
/**
*
*/
UCLASS()
class HWANYOUNG2_API AHYMoneyAutoPickUp : public AHYAutomaticPickUp
{
GENERATED_BODY()
public:
AHYMoneyAutoPickUp();
void Collect_Implementation(APlayerController* Controller) override;
protected:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Value;
};

View File

@ -43,6 +43,9 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 InventoryWeightLimit;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Currency;
//interacts with the Interactable objects
UFUNCTION(BlueprintCallable, Category = "Utils")
void Interact();

View File

@ -7,5 +7,6 @@ FInventoryItem::FInventoryItem()
{
this->ItemName = FText::FromString("No Name");
this->ItemWeight = 1;
this->ItemValue = 1;
this->ItemDescription = FText::FromString("No Description");
}

View File

@ -37,6 +37,10 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 ItemWeight;
//value of the item
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 ItemValue;
//is the item only available through drops?
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool OnlyDropped;

View File

@ -12,6 +12,7 @@
#include "EnhancedInputSubsystems.h"
#include "HYInteractableActor.h"
#include "InventoryItem.h"
#include "HYAutomaticPickUp.h"
@ -97,12 +98,29 @@ void Ahwanyoung2Character::CheckForInteractables()
}
void Ahwanyoung2Character::CollectAutoPickups()
{
// Stores all the overlapping actors in an array
TArray<AActor*> CollectedActors;
CollectionSphere->GetOverlappingActors(CollectedActors);
AHYPlayerCharacController* IController = Cast<AHYPlayerCharacController>(GetController());
for (int32 indCollect = 0; indCollect < CollectedActors.Num(); ++indCollect) {
AHYAutomaticPickUp* const Pickup = Cast<AHYAutomaticPickUp>(CollectedActors[indCollect]);
if (Pickup && !Pickup->IsPendingKill()) {
Pickup->Collect(IController);
}
}
}
void Ahwanyoung2Character::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
CheckForInteractables();
CollectAutoPickups();
}
//////////////////////////////////////////////////////////////////////////
@ -201,6 +219,10 @@ void Ahwanyoung2Character::Initialize()
// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character)
// are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
CollectionSphere = CreateDefaultSubobject<USphereComponent>(TEXT("CollectionSphere"));
CollectionSphere->SetupAttachment(RootComponent);
CollectionSphere->SetSphereRadius(200.f);
}

View File

@ -6,6 +6,7 @@
#include "GameFramework/Character.h"
#include "InputAction.h"
#include "hwanyoung2.h"
#include "Components/SphereComponent.h"
#include "hwanyoung2Character.generated.h"
@ -102,7 +103,9 @@ protected:
/** Called for checking for the closest Interactable in sight and in range*/
void CheckForInteractables();
/** Called for collecting automatic pick-upable interactables*/
void CollectAutoPickups();
protected:
// APawn interface