Hey guys, I’ll explain the whole situation. I factored my ACharacter class into an AActorComponent(where I do a lot of private/protected things) and called it CharacterComponent. Now I want to change some values of a protected UStruct inside my CharacterComponent, but using a Button. The whole part of creating the Widget Blueprint is okay, but I can’t create a UUserWidget class to handle these buttons callbacks because I need to change the protected values, so I tried to do something like this:
I created a class inherited from my CharacterComponent class and wrote this code:
CharacterComponentUI.cpp:
#include "CharacterComponentUI.h"
#include "MenuSystem/MenuWidget.h"
#include "Blueprint/UserWidget.h"
#include "MenuInterface.h"
#include "MenuWidget.h"
#include "Components/Button.h"
bool UCharacterComponentUI::Initialize()
{
bool Success = Super::Initialize();
if (!Success) return false;
if (!ensure(STRButton != nullptr)) return false;
STRButton->OnClicked.AddDynamic(this, &UCharacterComponentUI::STRPressed);
}
void UCharacterComponentUI::STRPressed()
{
UE_LOG(LogTemp, Warning, TEXT("PRESSED STR"));
}
And CharacterComponentUI.h:
#include "CoreMinimal.h"
#include "CharacterComponent.h"
#include "MenuSystem/MenuWidget.h"
#include "Blueprint/UserWidget.h"
#include "MenuInterface.h"
#include "MenuWidget.h"
#include "CharacterComponentUI.generated.h"
/**
*
*/
UCLASS()
class MEHILOONLINE_API UCharacterComponentUI : public UCharacterComponent
{
GENERATED_BODY()
public:
bool Initialize();
private:
UPROPERTY(meta = (BindWidget))
class UButton* STRButton;
UFUNCTION(BlueprintCallable)
void STRPressed();
};
But reading this you’ll probably notice that class “UActorComponent” has no member Initialize(). I really just copied the way I did with previous Menu/button stuff. What’s the correct approach to solve my problem? Am I in the correct path?
Note: I know that I’m not using all these includes, I’ll remove the ones I’m not using later.