C++ 팀 과제 TIL (5)

정완훈·2025년 3월 4일

CP_PauseMenu.h

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Button.h"
#include "CP_PauseMenu.generated.h"

UCLASS()
class CYBERPUNK_API UCP_PauseMenu : public UUserWidget
{
	GENERATED_BODY()

public:
	UCP_PauseMenu(const FObjectInitializer& ObjectInitializer);

protected:
	virtual void NativeConstruct() override;

	UPROPERTY(meta = (BindWidget))
	UButton* ResumeButton;

	UPROPERTY(meta = (BindWidget))
	UButton* ExitFromPauseButton;

private:
	UFUNCTION()
	void OnResumeButtonClicked();

	UFUNCTION()
	void OnExitFromPauseButtonClicked();
};

CP_PauseMenu.cpp

#include "CP_PauseMenu.h"
#include "Kismet/GameplayStatics.h"
#include "Blueprint/WidgetTree.h"
#include "Kismet/KismetSystemLibrary.h"

UCP_PauseMenu::UCP_PauseMenu(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
}

void UCP_PauseMenu::NativeConstruct()
{
	Super::NativeConstruct();

	if (ResumeButton)
	{
		ResumeButton->OnClicked.AddDynamic(this, &UCP_PauseMenu::OnResumeButtonClicked);
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("CP_PauseMenu: ResumeButton 위젯이 바인딩되지 않았습니다."));
	}

	if (ExitFromPauseButton)
	{
		ExitFromPauseButton->OnClicked.AddDynamic(this, &UCP_PauseMenu::OnExitFromPauseButtonClicked);
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("CP_PauseMenu: ExitFromPauseButton 위젯이 바인딩되지 않았습니다."));
	}
}


void UCP_PauseMenu::OnResumeButtonClicked()
{
	// 일시정지 메뉴 제거 (화면에서 숨김)
	RemoveFromParent();
	// 게임 재개 로직 (Unpause 등, 필요하면 여기에 구현)
	UE_LOG(LogTemp, Warning, TEXT("CP_PauseMenu: Resume Button Clicked"));
}

void UCP_PauseMenu::OnExitFromPauseButtonClicked()
{
	UKismetSystemLibrary::QuitGame(GetWorld(), GetWorld()->GetFirstPlayerController(), EQuitPreference::Quit, true);
	UE_LOG(LogTemp, Warning, TEXT("CP_PauseMenu: Exit from Pause Button Clicked"));
}

0개의 댓글