64 template<CEngineSubsystem T>
67 return GEngine ? GEngine->GetEngineSubsystem<T>() :
nullptr;
78 template<CGameInstanceSubsystem T>
80 const UObject* worldContextObject =
nullptr,
82 EGetWorldErrorMode errorMode = EGetWorldErrorMode::LogAndReturnNull
89 if (worldContextObject ==
nullptr)
91 if (IsRunningDedicatedServer() || GEngine->GameViewport ==
nullptr)
100 const FWorldContext* worldContext = GEngine->GameViewport
101 ? GEngine->GetWorldContextFromGameViewport(GEngine->GameViewport)
103 const UGameInstance* owningGameInstance = worldContext ? worldContext->OwningGameInstance :
nullptr;
104 return owningGameInstance ? owningGameInstance->GetSubsystem<T>() :
nullptr;
108 for (
auto it = GEngine->GetWorldContexts().CreateConstIterator(); it; ++it)
110 if (T* result = it->OwningGameInstance ? it->OwningGameInstance->GetSubsystem<T>() :
nullptr)
119 if (
const UWorld* world = GEngine->GetWorldFromContextObject(worldContextObject, errorMode))
121 return UGameInstance::GetSubsystem<T>(world->GetGameInstance());
134 template<CLocalPlayerSubsystem T>
135 T*
Get(
const UObject* worldContext)
137 const UWorld* world = GEngine->GetWorldFromContextObject(worldContext, EGetWorldErrorMode::LogAndReturnNull);
138 APlayerController* controller = world && !world->IsNetMode(NM_DedicatedServer)
139 ? UGameplayStatics::GetPlayerController(worldContext, 0)
141 return controller ? ULocalPlayer::GetSubsystem<T>(controller->GetLocalPlayer()) :
nullptr;
152 template<CWorldSubsystem T>
153 T*
Get(
const UObject* worldContext, EGetWorldErrorMode errorMode = EGetWorldErrorMode::LogAndReturnNull)
155 if (
const UWorld* world = GEngine ? GEngine->GetWorldFromContextObject(worldContext, errorMode) :
nullptr)
157 return world->GetSubsystem<T>();
174 T* result =
Get<T>(args...);
195 T* result =
Get<T>(args...);
214 template<CSubsystem T>
217 const USubsystem* cdo = T::StaticClass()->template GetDefaultObject<USubsystem>();
218 return cdo->ShouldCreateSubsystem(outer);
#define TEXT_
A convenience alternative to Unreal's own TEXT macro but this one doesn't require parenthesis around ...