diff --git a/API/GameModeBase-HandleSeamlessTravelPlayer(Controller).md b/API/GameModeBase-HandleSeamlessTravelPlayer(Controller).md new file mode 100644 index 00000000..4d018a97 --- /dev/null +++ b/API/GameModeBase-HandleSeamlessTravelPlayer(Controller).md @@ -0,0 +1,10 @@ +### [UnrealEngine.Framework](./UnrealEngine-Framework.md 'UnrealEngine.Framework').[GameModeBase](./GameModeBase.md 'UnrealEngine.Framework.GameModeBase') +## GameModeBase.HandleSeamlessTravelPlayer(UnrealEngine.Framework.Controller) Method +Reinitializes a player remained through a seamless level transition +```csharp +public void HandleSeamlessTravelPlayer(UnrealEngine.Framework.Controller controller); +``` +#### Parameters + +`controller` [Controller](./Controller.md 'UnrealEngine.Framework.Controller') + diff --git a/API/GameModeBase-UseSeamlessTravel.md b/API/GameModeBase-UseSeamlessTravel.md new file mode 100644 index 00000000..77a30142 --- /dev/null +++ b/API/GameModeBase-UseSeamlessTravel.md @@ -0,0 +1,8 @@ +### [UnrealEngine.Framework](./UnrealEngine-Framework.md 'UnrealEngine.Framework').[GameModeBase](./GameModeBase.md 'UnrealEngine.Framework.GameModeBase') +## GameModeBase.UseSeamlessTravel Property +Gets or sets whether the game perform seamless map travels which loads in the background and doesn't disconnect clients +```csharp +public bool UseSeamlessTravel { get; set; } +``` +#### Property Value +[System.Boolean](https://docs.microsoft.com/en-us/dotnet/api/System.Boolean 'System.Boolean') diff --git a/API/GameModeBase.md b/API/GameModeBase.md index 61a32976..4dc59f72 100644 --- a/API/GameModeBase.md +++ b/API/GameModeBase.md @@ -5,5 +5,8 @@ Defines the game being played, instantiated only on the server public class GameModeBase : UnrealEngine.Framework.Actor ``` Inheritance [System.Object](https://docs.microsoft.com/en-us/dotnet/api/System.Object 'System.Object') 🡒 [Actor](./Actor.md 'UnrealEngine.Framework.Actor') 🡒 GameModeBase +### Properties +- [UseSeamlessTravel](./GameModeBase-UseSeamlessTravel.md 'UnrealEngine.Framework.GameModeBase.UseSeamlessTravel') ### Methods +- [HandleSeamlessTravelPlayer(UnrealEngine.Framework.Controller)](./GameModeBase-HandleSeamlessTravelPlayer(Controller).md 'UnrealEngine.Framework.GameModeBase.HandleSeamlessTravelPlayer(UnrealEngine.Framework.Controller)') - [SwapPlayerControllers(UnrealEngine.Framework.PlayerController, UnrealEngine.Framework.PlayerController)](./GameModeBase-SwapPlayerControllers(PlayerController_PlayerController).md 'UnrealEngine.Framework.GameModeBase.SwapPlayerControllers(UnrealEngine.Framework.PlayerController, UnrealEngine.Framework.PlayerController)') diff --git a/Source/Managed/Framework/Codegen.cs b/Source/Managed/Framework/Codegen.cs index 5dfe04df..2aa15b15 100644 --- a/Source/Managed/Framework/Codegen.cs +++ b/Source/Managed/Framework/Codegen.cs @@ -35,7 +35,7 @@ namespace UnrealEngine.Framework { // Automatically generated internal static class Shared { - internal const int checksum = 0x2CB; + internal const int checksum = 0x2CD; internal static Dictionary userFunctions = new(); private const string dynamicTypesAssemblyName = "UnrealEngine.DynamicTypes"; private static readonly ModuleBuilder moduleBuilder = AssemblyBuilder.DefineDynamicAssembly(new(dynamicTypesAssemblyName), AssemblyBuilderAccess.RunAndCollect).DefineDynamicModule(dynamicTypesAssemblyName); @@ -334,6 +334,8 @@ internal static unsafe Dictionary Load(IntPtr* events, IntPtr funct int head = 0; IntPtr* gameModeBaseFunctions = (IntPtr*)buffer[position++]; + GameModeBase.getUseSeamlessTravel = (delegate* unmanaged[Cdecl])gameModeBaseFunctions[head++]; + GameModeBase.setUseSeamlessTravel = (delegate* unmanaged[Cdecl])gameModeBaseFunctions[head++]; GameModeBase.swapPlayerControllers = (delegate* unmanaged[Cdecl])gameModeBaseFunctions[head++]; } @@ -1588,6 +1590,8 @@ unsafe partial class Actor { } unsafe partial class GameModeBase { + internal static delegate* unmanaged[Cdecl] getUseSeamlessTravel; + internal static delegate* unmanaged[Cdecl] setUseSeamlessTravel; internal static delegate* unmanaged[Cdecl] swapPlayerControllers; } diff --git a/Source/Managed/Framework/Framework.cs b/Source/Managed/Framework/Framework.cs index 0cb5836f..d59b233a 100644 --- a/Source/Managed/Framework/Framework.cs +++ b/Source/Managed/Framework/Framework.cs @@ -5465,6 +5465,14 @@ private protected GameModeBase() { } internal GameModeBase(IntPtr pointer) => Pointer = pointer; + /// + /// Gets or sets whether the game perform seamless map travels which loads in the background and doesn't disconnect clients + /// + public bool UseSeamlessTravel { + get => getUseSeamlessTravel(Pointer); + set => setUseSeamlessTravel(Pointer, value); + } + /// /// Swaps player controllers /// diff --git a/Source/Managed/Tests/Tests.cs b/Source/Managed/Tests/Tests.cs index f0563cb7..7ea50773 100644 --- a/Source/Managed/Tests/Tests.cs +++ b/Source/Managed/Tests/Tests.cs @@ -3,7 +3,7 @@ using UnrealEngine.Framework; namespace UnrealEngine.Tests { - public static class Main { + public class Main { private static ISystem runningSystem; public static void OnWorldPostBegin() { diff --git a/Source/Native/Source/UnrealCLR/Private/UnrealCLR.cpp b/Source/Native/Source/UnrealCLR/Private/UnrealCLR.cpp index 7607c4a6..6ad996dc 100644 --- a/Source/Native/Source/UnrealCLR/Private/UnrealCLR.cpp +++ b/Source/Native/Source/UnrealCLR/Private/UnrealCLR.cpp @@ -465,6 +465,8 @@ void UnrealCLR::Module::StartupModule() { int32 head = 0; Shared::Functions[position++] = Shared::GameModeBaseFunctions; + Shared::GameModeBaseFunctions[head++] = (void*)&UnrealCLRFramework::GameModeBase::GetUseSeamlessTravel; + Shared::GameModeBaseFunctions[head++] = (void*)&UnrealCLRFramework::GameModeBase::SetUseSeamlessTravel; Shared::GameModeBaseFunctions[head++] = (void*)&UnrealCLRFramework::GameModeBase::SwapPlayerControllers; checksum += head; diff --git a/Source/Native/Source/UnrealCLR/Private/UnrealCLRFramework.cpp b/Source/Native/Source/UnrealCLR/Private/UnrealCLRFramework.cpp index 84338b4c..a318e568 100644 --- a/Source/Native/Source/UnrealCLR/Private/UnrealCLRFramework.cpp +++ b/Source/Native/Source/UnrealCLR/Private/UnrealCLRFramework.cpp @@ -1683,6 +1683,14 @@ namespace UnrealCLRFramework { } namespace GameModeBase { + bool GetUseSeamlessTravel(AGameModeBase* GameModeBase) { + return GameModeBase->bUseSeamlessTravel; + } + + void SetUseSeamlessTravel(AGameModeBase* GameModeBase, bool Value) { + GameModeBase->bUseSeamlessTravel = Value; + } + void SwapPlayerControllers(AGameModeBase* GameModeBase, APlayerController* PlayerController, APlayerController* NewPlayerController) { GameModeBase->SwapPlayerControllers(PlayerController, NewPlayerController); } diff --git a/Source/Native/Source/UnrealCLR/Public/UnrealCLRFramework.h b/Source/Native/Source/UnrealCLR/Public/UnrealCLRFramework.h index 01e284f8..8280697a 100644 --- a/Source/Native/Source/UnrealCLR/Public/UnrealCLRFramework.h +++ b/Source/Native/Source/UnrealCLR/Public/UnrealCLRFramework.h @@ -547,6 +547,8 @@ namespace UnrealCLRFramework { } namespace GameModeBase { + static bool GetUseSeamlessTravel(AGameModeBase* GameModeBase); + static void SetUseSeamlessTravel(AGameModeBase* GameModeBase, bool Value); static void SwapPlayerControllers(AGameModeBase* GameModeBase, APlayerController* PlayerController, APlayerController* NewPlayerController); }