So im trying to add Some things to the HUD of this project and UE4 is crying like there is no tomorrow. As far as i can tell everything(all my code) is fine. This is making me want to throw my pc out the window,douse it in gasoline, and torch it. Please help i do not know what is wrong D: .
I have already declared it as a pointer and it is telling me its not -_-
VS ERRORS:
CODE :
RPG.h
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#ifndef __RPG_H__
#define __RPG_H__
#include "Engine.h"
DECLARE_LOG_CATEGORY_EXTERN(LogRPG, Log, All);
#endif
RPG.cpp
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#include "RPG.h"
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, RPG, "RPG" );
DEFINE_LOG_CATEGORY(LogRPG)
RPGGamemode.h
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/GameMode.h"
#include "RPGGameMode.generated.h"
UCLASS(minimalapi)
class ARPGGameMode : public AGameMode
{
GENERATED_BODY()
virtual void BeginPlay() override;
public:
ARPGGameMode();
enum EHUDState : uint8 {HS_Ingame, HS_Inventory, HS_Shop};
//Checks the hud state, then calls apply hud
void ApplyHUDChanges();
//Getter for hud state
uint8 GetHUDState();
//setter for the hud state, applies the new state then calls ApplyHudChanges()
UFUNCTION(BlueprintCallable, Category = "HUD Functions")
void SetHUDState(uint8 NewState);
//Applys a hud to the screen, returns true if succsesful, false otherwise.
bool ApplyHUD(TSubclassOf <class UUserWidget> WidgetToApply, bool bShowMouseCursor, bool EnableClickEvents);
protected:
uint8 HUDState;
//The hud to be shown in-game
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HUD Widgets", Meta = (BlueprintProtected = true))
TSubclassOf<class UUserWidget> IngameHUDClass; //TSubclasOf makes it so you can only edit SUB CLASSES OF THE BASE CLASS!!!
//The hud to be shown in the inventory
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HUD Widgets", Meta = (BlueprintProtected = true))
TSubclassOf<class UUserWidget> InventoryHUDClass;
//The hud to be shown in the shop
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HUD Widgets", Meta = (BlueprintProtected = true))
TSubclassOf<class UUserWidget> ShopHUDClass;
UPROPERTY()
UUserWidget* CurrentWidget;
};
RPGGamemode.cpp
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#include "RPG.h"
#include "RPGGameMode.h"
#include "RPGPlayerController.h"
#include "RPGCharacter.h"
#include "Blueprint/UserWidget.h"
void ARPGGameMode::BeginPlay()
{
//As soon as the player loads into the game apply the hud
ApplyHUDChanges();
}
ARPGGameMode::ARPGGameMode()
{
// use our custom PlayerController class
PlayerControllerClass = ARPGPlayerController::StaticClass();
// set default pawn class to our Blueprinted character
static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/TopDownCPP/Blueprints/TopDownCharacter"));
if (PlayerPawnBPClass.Class != NULL)
{
DefaultPawnClass = PlayerPawnBPClass.Class;
}
//Set the hud state to InGame on defualt
HUDState = EHUDState::HS_Ingame;
}
void ARPGGameMode::ApplyHUDChanges()
{
//Remove previous hud to add a new one.
if (CurrentWidget != nullptr)
{
CurrentWidget->RemoveFromParent; // removes the current hud
}
switch (HUDState)
{
case EHUDState::HS_Ingame:
{
ApplyHUD(IngameHUDClass, false, false);
break;
}
case EHUDState::HS_Inventory:
{
ApplyHUD(InventoryHUDClass, true, true); //ApplyHUD Takes params (HUDCLASS, ShowMouseCursor, EnableClickEvents)
break;
}
case EHUDState::HS_Shop:
{
ApplyHUD(ShopHUDClass, true, true);
break;
}
}
}
uint8 ARPGGameMode::GetHUDState()
{
return HUDState;
}
void ARPGGameMode::SetHUDState(uint8 NewState)
{
HUDState = NewState;
ApplyHUDChanges();
}
bool ARPGGameMode::ApplyHUD(TSubclassOf<class UUserWidget> WidgetToApply, bool bShowMouseCursor, bool EnableClickEvents)
{
//Get a refrence to the player, and the controller
ARPGCharacter* Character = Cast<ARPGCharacter>(UGameplayStatics::GetPlayerCharacter(this, 0));
APlayerController* Controller = GetWorld()->GetFirstPlayerController;
//Null check things to prevent a crash
if (WidgetToApply != nullptr)
{
//Set mouse visablity and click events according to params
Controller->bShowMouseCursor = bShowMouseCursor;
Controller->bEnableClickEvents = EnableClickEvents;
//Create new widget
CurrentWidget = CreateWidget<UUserWidget>(GetWorld(), WidgetToApply);
if (CurrentWidget != nullptr)
{
CurrentWidget->AddToViewport;
return true;
}
else return false; // if the widget failed to be made then return false
}
else return false; // if the widget is null then return false
}
Thanks for the help i am wanting to shoot myself ):.