2023-10-19 16:22:13 +01:00

124 lines
2.8 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "MainBountyClass.h"
#include "SideBountyClass.h"
#include "EndlessVendetta/EndlessVendettaCharacter.h"
#include "EndlessVendetta/InteractionInterface.h"
#include "EndlessVendetta/UserWidgets/PC_Display.h"
#include "GameFramework/Actor.h"
#include "BountyDirector.generated.h"
UCLASS()
class ENDLESSVENDETTA_API ABountyDirector : public AActor, public IInteractionInterface
{
GENERATED_BODY()
AEndlessVendettaCharacter* PlayerChar;
// Scene Component Used to Attach Bounties to
UArrowComponent* BountyAttachmentPoint;
// Ordered Array of Main Bounties
UPROPERTY(EditDefaultsOnly, Category = "Bounty Director")
TArray<TSubclassOf<AMainBountyClass>> BountyClassArray;
UPROPERTY(EditDefaultsOnly, Category = "Bounty Director")
int FavourCost = 500;
UPROPERTY(EditDefaultsOnly, Category = "Bounty Director")
TSubclassOf<UPC_Display> PC_DisplayWidgetClass;
UUserWidget* PC_DisplayWidget;
UPC_Display* PC_Display;
int CurrentBountyIndex = 0;
UPROPERTY(VisibleAnywhere, Category = "Bounty")
AMainBountyClass* ActiveBounty;
UPROPERTY(VisibleAnywhere, Category = "Bounty")
TArray<ASideBountyClass*> ActiveSideBounties;
// Checks if completed the bounty, and moves onto the next if so
void UpdateBountyProgression();
void SpawnBountyAndItsSideBounties();
// Collect reward for current Bounty and prepare for the next
void FinishActiveBounty();
// Opens up Bounty Director PC Interface
void Interact() override;
protected:
int Favours = 20;
// Called when the game starts or when spawned
virtual void BeginPlay() override;
UFUNCTION()
void DestroyActiveSideBounties();
UFUNCTION()
void DestroyBountyDirectorPCWidget();
// Listens for when a side bounty is completed
UFUNCTION()
void EarnFavours(int FavoursEarned);
// -------- Buy Buttons --------
UFUNCTION()
void BuyCustomBountyAlteration_1();
UFUNCTION()
void BuyCustomBountyAlteration_2();
UFUNCTION()
void BuyCustomBountyAlteration_3();
UFUNCTION()
void BuyAmmoDrop();
UFUNCTION()
void BuyHealthDrop();
UFUNCTION()
void BuyEnemyRadio();
UFUNCTION()
void BuyFavours();
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Sets default values for this actor's properties
ABountyDirector();
// ------ Getters ------
FString GetBountyTitle()
{
return !IsValid(ActiveBounty) ? FString("") : ActiveBounty->GetBountyTitle();
}
UTexture2D* GetBountyIcon()
{
return !IsValid(ActiveBounty) ? nullptr : ActiveBounty->GetActiveWaypointIcon();
}
FString GetBountyDescription()
{
return !IsValid(ActiveBounty) ? FString("") : ActiveBounty->GetBountyDesc();
}
int GetBountyReward()
{
return !IsValid(ActiveBounty) ? 0 : ActiveBounty->GetBountyrewardMoney();
}
};