Bug Fixed Mining crashing the game

When pressing E on the crystals it kept on crashing due to destroy being executed before pointer checks
This commit is contained in:
MarcelHara 2023-05-10 13:27:27 +01:00
parent fc25c8adf0
commit 4ad0959f08
2 changed files with 46 additions and 18 deletions

View File

@ -26,7 +26,6 @@ ATempCharacter::ATempCharacter()
void ATempCharacter::BeginPlay()
{
Super::BeginPlay();
FirstPlayerController = GetWorld()->GetFirstPlayerController();
CombatSystem = Cast<ATurnBaseCombatV2>(GetWorld()->GetGameState());
WidgetPointer = Cast<UWidgetInteractionComponent>(this->GetComponentByClass(UWidgetInteractionComponent::StaticClass()));
@ -136,7 +135,6 @@ void ATempCharacter::LineTraceLogic()
{
//UE_LOG(LogTemp, Display, TEXT("LineTraceLogic activated"));
float GlobalTrace = TraceDistance;
FHitResult OutHit;
ThisCamera = Cast<UCameraComponent>(this->FindComponentByClass<UCameraComponent>());
FVector Start = ThisCamera->GetComponentLocation();
FVector End = Start + GlobalTrace * ThisCamera->GetForwardVector();
@ -149,24 +147,28 @@ void ATempCharacter::LineTraceLogic()
{
return;
}
if (OutHit.GetActor()->FindComponentByClass<UInventoryComponent>())
{
if(OutHit.GetActor()->ActorHasTag(TEXT("Probertium")))
{
OutHit.GetActor()->Destroy();
AddToInventory();
return;
}
else if(OutHit.GetActor()->ActorHasTag(TEXT("Iroquid")))
if(OutHit.GetActor()->ActorHasTag(TEXT("Iroquid")))
{
OutHit.GetActor()->Destroy();
AddToInventory();
return;
}
else if (OutHit.GetActor()->ActorHasTag(TEXT("Azos")))
if (OutHit.GetActor()->ActorHasTag(TEXT("Azos")))
{
OutHit.GetActor()->Destroy();
AddToInventory();
return;
}
else if (OutHit.GetActor()->ActorHasTag(TEXT("Eis")))
if (OutHit.GetActor()->ActorHasTag(TEXT("Eis")))
{
OutHit.GetActor()->Destroy();
AddToInventory();
return;
}
if (OutHit.GetActor()->FindComponentByClass<UInventoryComponent>())
{
UE_LOG(LogTemp, Display, TEXT("Hit Merchant"));
auto ItemArray = OutHit.GetActor()->FindComponentByClass<UInventoryComponent>()->GetItem(0);
if (GoldBalance >= ItemArray->ItemCostPrice)
@ -219,6 +221,26 @@ void ATempCharacter::LineTraceLogic()
}
}
void ATempCharacter::AddToInventory()
{
if (OutHit.GetActor()->FindComponentByClass<UInventoryComponent>())
{
UE_LOG(LogTemp, Display, TEXT("Hit Merchant"));
auto ItemArray = OutHit.GetActor()->FindComponentByClass<UInventoryComponent>()->GetItem(0);
if (GoldBalance >= ItemArray->ItemCostPrice)
{
GoldBalance -= ItemArray->ItemCostPrice;
Inventory->AddItem(ItemArray);
UE_LOG(LogTemp, Display, TEXT("Item Purchased"));
}
if (GoldBalance <= 0)
{
UE_LOG(LogTemp, Display, TEXT("Not Enough Gold"));
}
OutHit.GetActor()->Destroy();
}
}
void ATempCharacter::InputDisabler()
{
//Disable Character Movement

View File

@ -128,5 +128,11 @@ public:
UPROPERTY(EditAnywhere, Category= "Widgets")
TSubclassOf<UUserWidget> CrossHairSub;
private:
UPROPERTY()
FHitResult OutHit;
UFUNCTION()
void AddToInventory();
};