This error pops up whenever I kill the turret and when the turret kills me I crash without warning.
It could be a null pointer.
Could you show the base class’ version too?
That’s the game mode and not the base pawn.
oh sorry
#include "PawnBase.h"
#include "Components/CapsuleComponent.h"
#include "ToonTanks/Actors/ProjectileBase.h"
// Sets default values
APawnBase::APawnBase()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
CapsuleComp = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule Collider"));
RootComponent = CapsuleComp;
BaseMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Base Mesh"));
BaseMesh->SetupAttachment(RootComponent);
TurretMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Turret Mesh"));
TurretMesh->SetupAttachment(BaseMesh);
ProjectileSpawnPoint = CreateDefaultSubobject<USceneComponent>(TEXT("Projectile Spawn Point"));
ProjectileSpawnPoint->SetupAttachment(TurretMesh);
}
void APawnBase::RotateTurret(FVector LookAtTarget)
{
FVector LookAtTargetCleaned = FVector(LookAtTarget.X, LookAtTarget.Y, TurretMesh->GetComponentLocation().Z);
FVector StartLocation = TurretMesh->GetComponentLocation();
FRotator TurretRotation = FVector(LookAtTargetCleaned - StartLocation).Rotation();
TurretMesh->SetWorldRotation(TurretRotation);
}
void APawnBase::Fire()
{
if (ProjectileClass)
{
FVector SpawnLocation = ProjectileSpawnPoint->GetComponentLocation();
FRotator SpawnRotation = ProjectileSpawnPoint->GetComponentRotation();
AProjectileBase* TempProjectile = GetWorld()->SpawnActor<AProjectileBase>(ProjectileClass, SpawnLocation, SpawnRotation);
TempProjectile->SetOwner(this);
}
}
void APawnBase::HandleDestruction()
{
HandleDestruction();
}
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "PawnBase.generated.h"
class UCapsuleComponent;
class AProjectileBase;
UCLASS()
class TOONTANKS_API APawnBase : public APawn
{
GENERATED_BODY()
private:
// Component
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category= "Components", meta = (AllowPrivateAccess = "true"))
UCapsuleComponent* CapsuleComp;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category= "Components", meta = (AllowPrivateAccess = "true"))
UStaticMeshComponent* BaseMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category= "Components", meta = (AllowPrivateAccess = "true"))
UStaticMeshComponent* TurretMesh;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category= "Components", meta = (AllowPrivateAccess = "true"))
USceneComponent* ProjectileSpawnPoint;
// Varibles
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category= "Projectile Type", meta = (AllowPrivateAccess = "true"))
TSubclassOf<AProjectileBase> ProjectileClass;
public:
// Sets default values for this pawn's properties
APawnBase();
void PawnDestroyed();
virtual void HandleDestruction();
protected:
void RotateTurret(FVector LookAtTarget);
void Fire();
};
That’s an infinite loop. You have a function calling itself.
so put destroy
I’m not sure what lecture you’re on but you could do that. Move destroy from the overridden functions and put it there.
im on toontanks
Tried adding destroy and i still crashed. I was planning to remove handle-destruction but i think that would cause more problems then good
I’m aware of that. I just don’t know what lecture you’re on. The end state of APawnBase::HandleDestruction
looks like this
void APawnBase::HandleDestruction()
{
// --- Universal functionality ---
// Play death effects particle, sound and camera shake.
UGameplayStatics::SpawnEmitterAtLocation(this, DeathParticle, GetActorLocation());
UGameplayStatics::PlaySoundAtLocation(this, DeathSound, GetActorLocation());
GetWorld()->GetFirstPlayerController()->ClientPlayCameraShake(DeathShake);
}
I’m on the end game widget
i’ve must have missed something in fact i didn’t have that
@DanM I’ve managed to fix it the problem was as you said it was calling it self. Thank you
void APawnBase::HandleDestruction()
{
HandleDestruction();
}
To add, the lecture’s code at this point has that as an empty function
https://gitlab.com/GameDevTV/UnrealCourse/ToonTanks/-/blob/e4cae3b67bf007cae2a55cf3ded6ee327a1c92f2/Source/ToonTanks/Pawns/PawnBase.cpp#L49-58
This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.