Loading screen in UE4 ONCE AND FOR ALL!

I am having the most stressful days trying to polish the level transition in a multiplayer game.
I checked all the different loading screen solutions and found the one posted by Jamsh is the cleanest (A new, community-hosted Unreal Engine Wiki - Announcements - Unreal Engine Forums).
The problem is that I need to manually turn off the loading screen on clients to hide all the ugliness when loading an online map. The problem is that this doesn’t seem to be possible since “I can’t call stopmovie() myself if the game thread is frozen… AND I need the game thread to set the game up while the loading screen is still on.” (as mentioned in Loading Screen won't go away without mouse movement - Programming & Scripting - Unreal Engine Forums)

That being said, I would like to find a definitive CLEAN solution to do loading screens that work for all level transition (Open Level and Seamless Travel), Since multiplayer games should work with Seamless Travel and upon joining a session an Open Level kind of transition is executed.

As of now, I have this code. It works if I comment out LoadingScreen.bWaitForManualStop = true; But that means that I can’t manually turn the LoadingScreen off and consequently can’t hide some ugliness that happens in the client in the first few seconds after joining.

#include "CustomGameInstance.h"
#include "MoviePlayer.h"

void UCustomGameInstance::Init()
{
	Super::Init();

	FCoreUObjectDelegates::PreLoadMap.AddUObject(this, &UCustomGameInstance::OnPreLoadMap);
	FCoreUObjectDelegates::PostLoadMapWithWorld.AddUObject(this, &UCustomGameInstance::OnPostLoadMapWithWorld);
}

void UCustomGameInstance::OnPreLoadMap(const FString& InMapName)
{
	BeginLoadingScreen();
}

void UCustomGameInstance::OnPostLoadMapWithWorld(UWorld* InLoadedWorld)
{
	EndLoadingScreen();
}

void UCustomGameInstance::BeginLoadingScreen()
{
	if (!IsRunningDedicatedServer())
	{
		FLoadingScreenAttributes LoadingScreen;
		LoadingScreen.bAutoCompleteWhenLoadingCompletes = true;
		LoadingScreen.MinimumLoadingScreenDisplayTime = 3;
		LoadingScreen.bMoviesAreSkippable = false;
		LoadingScreen.bWaitForManualStop = true;
		LoadingScreen.MoviePaths.Init("LoadingScreen", 1);
		LoadingScreen.PlaybackType = EMoviePlaybackType::MT_Looped;
		//LoadingScreen.WidgetLoadingScreen = FLoadingScreenAttributes::NewTestLoadingScreenWidget();

		GetMoviePlayer()->SetupLoadingScreen(LoadingScreen);
	}
	OnPreLoadMapEvent();
}

void UCustomGameInstance::EndLoadingScreen()
{
	GetMoviePlayer()->StopMovie();
	OnPostLoadMapWithWorldEvent();
}

Did you ever manage to find a good, clean solution? I have been spending the last 4 days (not counting the days setting up UMG and level streaming before attempting TheJamsh’s method) trying to get a smooth, animated loading screen to work.

At the moment, I’ve got the loading screen set up in a separate module and called from blueprints prior to opening a map, as advocated in this talk and like how they do in ShooterGame, Fortnite and ActionRPG, instead of hooking it up to OnPreLoadMap.

But I have two issues.

First; the only way I’ve managed to actually stop the loadingscreen movie is when I’ve set bMoviesAreSkippable = true; which means that they can be instantly skipped by clicking any mouse button or key, which makes it a no-go for loading screens.

Second; The loadingscreen and movie still hangs while opening the other map, which makes for a bad experience and kinda defeats the purpose of separating it into a different module.

Can’t believe how Epic hasn’t given UE4 a robust, simple loading system yet, when they have added so many frivolous features over the years.

Has anyone got a clean way to do this? I have been trying for weeks to find a reasonable way to do this.

Did you ever find a solution to this that you would be willing to share? I can’t seem find any solution for this.