2024-02-11 14:21:45 +00:00

74 lines
2.3 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "BountyClass.h"
// Sets default values
ABountyClass::ABountyClass()
{
// 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;
}
void ABountyClass::ActivateFirstCheckpoint()
{
if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr) return;
BountyCheckpoints[0]->Active = true;
BountyCheckpoints[0]->SpawnWaypoint(BountyTitle);
// BountyCheckpoints[0]->CheckpointActivated();
BountyCheckpoints[0]->CompletedCheckpoint.AddDynamic(this, &ABountyClass::IncrementBountyCheckpoint);
}
void ABountyClass::DeActivateFirstCheckpoint()
{
if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr) return;
BountyCheckpoints[0]->Active = false;
BountyCheckpoints[0]->DestroyWaypoint();
}
void ABountyClass::SpawnCheckpoints()
{
// Spawn all checkpoints associated with this bounty and store them in order
FActorSpawnParameters SpawnParameters;
SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
for(TSubclassOf<ACheckpointClass> CheckpointClass : CheckpointsToSpawn)
{
if (CheckpointClass == nullptr)
{
// An unassigned checkpoint class can lead to undefined behaviour, hence the fatal log
UE_LOG(LogTemp, Fatal, TEXT("A checkpoint class wasn't set for %s"), *BountyTitle);
return;
}
FVector Loc = CheckpointClass.GetDefaultObject()->GetCheckpointSpawnTransform().GetLocation();
FRotator Rot = CheckpointClass.GetDefaultObject()->GetCheckpointSpawnTransform().GetRotation().Rotator();
ACheckpointClass* SpawnedCheckpoint = Cast<ACheckpointClass>(GetWorld()->SpawnActor<AActor>(CheckpointClass, Loc, Rot, SpawnParameters));
BountyCheckpoints.Add(SpawnedCheckpoint);
}
}
void ABountyClass::IncrementBountyCheckpoint()
{
if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr) return;
// Destroy Actor and Shrink Array
BountyCheckpoints[0]->Active = false;
BountyCheckpoints[0]->Destroy();
BountyCheckpoints.RemoveAt(0);
ActivateFirstCheckpoint();
}
void ABountyClass::CollectRewards_Implementation()
{
UE_LOG(LogTemp, Warning, TEXT("The player has gained $%d for completing the bounty!"), RewardMoney);
}