Hello guys im working on a game in c++.My game has main menu and coins counter.They both work fine,but not together.Start button loads the game,coins counter is counting coins,but when i press start and loads into my map,it doesnt want to count coins.And i dont know why.
I can try to help you if you show me some code
Of course man.Here is my main menu code
mainmenu.h
#pragma once
include “CoreMinimal.h”
include “Blueprint/UserWidget.h”
include “MainMenu.generated.h”
class UButton;
UCLASS()
class DEV_ENABLED_YT_API UMainMenu : public UUserWidget
{
GENERATED_BODY()
protected:
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
TObjectPtr<UButton> Startbtn;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
TObjectPtr<UButton> Exitbtn;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
TObjectPtr<UButton> Levelsbtn;
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
TObjectPtr<UButton> Creditsbtn;
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TSubclassOf<UUserWidget> CreditsMeniWidgetClass;
virtual void NativeConstruct() override;
public:
UFUNCTION()
void OnStartClick();
UFUNCTION()
void OnExitClick();
UFUNCTION()
void OnLevelsClick();
UFUNCTION()
void OnCreditsClicked();
};
mainmenu.cpp:
include “General/MainMenu.h”
include “Components/Button.h”
include “Kismet/GameplayStatics.h”
void UMainMenu::NativeConstruct()
{
if (Startbtn)
{
Startbtn->OnClicked.AddDynamic(this, &UMainMenu::OnStartClick);
}
if (Exitbtn)
{
Exitbtn->OnClicked.AddDynamic(this, &UMainMenu::OnExitClick);
}
if (Levelsbtn)
{
Levelsbtn->OnClicked.AddDynamic(this, &UMainMenu::OnLevelsClick);
}
if (Creditsbtn)
{
Creditsbtn->OnClicked.AddDynamic(this, &UMainMenu::OnCreditsClicked);
}
}
void UMainMenu::OnStartClick()
{
UWorld* World = GetWorld();
if (World)
{
UGameplayStatics::OpenLevel(World, TEXT(“nebitno”));
}
}
void UMainMenu::OnExitClick()
{
UWorld* World = GetWorld();
if (World)
{
UKismetSystemLibrary::ExecuteConsoleCommand(World, TEXT(“quit”));
}
}
void UMainMenu::OnLevelsClick()
{
}
void UMainMenu::OnCreditsClicked()
{
if (IsValid(CreditsMeniWidgetClass))
{
UGameplayStatics::SetGamePaused(GetWorld(), true);
UUserWidget* Widget = CreateWidget(GetWorld(), CreditsMeniWidgetClass);
if (Widget)
{
Widget->AddToViewport();
}
}
}
coin_widget.h:
#pragma once
include “CoreMinimal.h”
include “Blueprint/UserWidget.h”
include “Components/Button.h”
include “Coin_Widget.generated.h”
class UTextBlock;
class ACoin;
class UButton;
UCLASS()
class DEV_ENABLED_YT_API UCoin_Widget : public UUserWidget
{
GENERATED_BODY()
protected:
UPROPERTY(EditDefaultsOnly,Category="Coin")
TSubclassOf<ACoin> CoinActorClass;
UPROPERTY(BlueprintReadOnly, meta = (BindWidget))
TObjectPtr<UButton> PauseBtn;
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TSubclassOf<UUserWidget> PauseMeniWidgetClas;
public:
UPROPERTY(BlueprintReadOnly, meta = (BindWidget))
TObjectPtr<UTextBlock> CoinCountText;
int CoinCount;
virtual void NativeConstruct() override;
UFUNCTION()
void OnCoinPickup();
UFUNCTION()
void OnPauseMenu();
};
coinwidget.cpp:
include “General/CoinSystem/Coin_Widget.h”
include “Kismet/GameplayStatics.h”
include “Blueprint/WidgetBlueprintLibrary.h”
include “Components/Button.h”
include “General/CoinSystem/Coin.h”
include “Components/TextBlock.h”
void UCoin_Widget::NativeConstruct()
{
Super::NativeConstruct();
TArray<AActor*> FoundActors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), CoinActorClass, FoundActors);
for (AActor* Actor : FoundActors)
{
if (!Actor) continue;//ako nemamo aktora nastavi
if (ACoin* Coin = Cast<ACoin>(Actor))
{
Coin->OnCoinPickup.AddDynamic(this, &UCoin_Widget::OnCoinPickup);
}//ako smo pokupili coin oznaci da smo ga pokupili i pozovi funckiju
}
if (PauseBtn)
{
PauseBtn->OnClicked.AddDynamic(this, &UCoin_Widget::OnPauseMenu);
}
UWidgetBlueprintLibrary::SetInputMode_GameAndUIEx(UGameplayStatics::GetPlayerController(GetWorld(), 0), this);
}
void UCoin_Widget::OnCoinPickup()
{
CoinCount++;
CoinCountText->SetText(FText::FromString(FString::Printf(TEXT(“%d”), CoinCount)));
}
void UCoin_Widget::OnPauseMenu()
{
if (IsValid(PauseMeniWidgetClas))
{
UUserWidget* Widget = CreateWidget(GetWorld(), PauseMeniWidgetClas);
if (Widget)
{
Widget->AddToViewport();
}
UGameplayStatics::SetGamePaused(GetWorld(), true);
}
}
Thanks man<3