// Copyright (c) 2026 GregOrigin. All Rights Reserved.
#include "ARPGGameMode.h"
#include "TimerManager.h"
#include "Engine/World.h"
#include "GameFramework/PlayerController.h"

ARPGGameMode::ARPGGameMode()
{
	DefaultPawnClass = ARPGCharacter::StaticClass();
	RespawnDelay = 5.0f;
	bAllowFriendlyFire = false;
	ExperienceMultiplier = 1.0f;
}

void ARPGGameMode::HandlePlayerDeath()
{
	OnPlayerDied.Broadcast();
	FTimerHandle TimerHandle;
	GetWorldTimerManager().SetTimer(TimerHandle, this, &ARPGGameMode::RespawnPlayer, RespawnDelay, false);
}

void ARPGGameMode::RespawnPlayer()
{
	APlayerController* PC = GetWorld()->GetFirstPlayerController();
	if (!PC) return;
	AActor* PlayerStart = FindPlayerStart(PC);
	if (!PlayerStart) return;
	APawn* NewPawn = GetWorld()->SpawnActor<APawn>(DefaultPawnClass, PlayerStart->GetActorLocation(), PlayerStart->GetActorRotation());
	if (NewPawn)
	{
		PC->Possess(NewPawn);
		OnGameStarted.Broadcast();
	}
}