diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index a763b64..c3038e8 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -1,5 +1,10 @@ [/Script/Engine.Engine] GameEngine=/Script/SimCadenceController.TrainingGameEngine UnrealEdEngine=/Script/SimCadenceController.TrainingEditorEngine +CustomTimeStepClassName=/Script/SimCadenceRuntime.SimFixedCustomTimeStep r.VSyncEditor=0 +[/Script/Engine.PhysicsSettings] +bSubstepping=True +MaxSubstepDeltaTime=0.008333 +MaxSubsteps=1 diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini index 816da3c..2607608 100644 --- a/Config/DefaultGame.ini +++ b/Config/DefaultGame.ini @@ -1,4 +1,4 @@ -[/Script/SimCadenceController.SimCadenceSettings] +[/Script/SimCadenceRuntime.SimCadenceSettings] Mode=Realtime FixedHz=60.0 bUncapRealtimeRendering=True diff --git a/Source/SimCadenceController/Private/SimCadenceControllerModule.cpp b/Source/SimCadenceController/Private/SimCadenceControllerModule.cpp deleted file mode 100644 index 768824e..0000000 --- a/Source/SimCadenceController/Private/SimCadenceControllerModule.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "SimCadenceControllerModule.h" -#include "Modules/ModuleManager.h" -#if WITH_EDITOR - #include "ISettingsModule.h" - #include "SimCadenceSettings.h" - #define LOCTEXT_NAMESPACE "FSimCadenceControllerModule" -#endif - -IMPLEMENT_MODULE(FSimCadenceControllerModule, SimCadenceController) - -void FSimCadenceControllerModule::StartupModule() -{ -#if WITH_EDITOR - if (ISettingsModule* SettingsModule = FModuleManager::LoadModulePtr(TEXT("Settings"))) - { - SettingsModule->RegisterSettings(TEXT("Project"), TEXT("Plugins"), TEXT("SimCadence"), - LOCTEXT("SimCadenceName", "Sim Cadence"), - LOCTEXT("SimCadenceDesc", "Physics-authoritative cadence and training controls."), - GetMutableDefault()); - } -#endif -} - -void FSimCadenceControllerModule::ShutdownModule() -{ -#if WITH_EDITOR - if (ISettingsModule* SettingsModule = FModuleManager::LoadModulePtr(TEXT("Settings"))) - { - SettingsModule->UnregisterSettings(TEXT("Project"), TEXT("Plugins"), TEXT("SimCadence")); - } -#endif -} - -#if WITH_EDITOR - #undef LOCTEXT_NAMESPACE -#endif \ No newline at end of file diff --git a/Source/SimCadenceController/Public/SimCadenceControllerModule.h b/Source/SimCadenceController/Public/SimCadenceControllerModule.h deleted file mode 100644 index 2d7b081..0000000 --- a/Source/SimCadenceController/Public/SimCadenceControllerModule.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include "Modules/ModuleManager.h" - -class FSimCadenceControllerModule : public IModuleInterface -{ -public: - virtual void StartupModule() override; - virtual void ShutdownModule() override; -}; \ No newline at end of file diff --git a/Source/SimCadenceController/SimCadenceController.Build.cs b/Source/SimCadenceController/SimCadenceController.Build.cs deleted file mode 100644 index d0b30bb..0000000 --- a/Source/SimCadenceController/SimCadenceController.Build.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UnrealBuildTool; - -public class SimCadenceController : ModuleRules -{ - public SimCadenceController(ReadOnlyTargetRules Target) : base(Target) - { - PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - - PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "DeveloperSettings" }); - - PrivateDependencyModuleNames.AddRange(new string[] { "UnrealEd", "Slate", "SlateCore", "Projects" }); - - if (!Target.bBuildEditor) - { - throw new BuildException("SimCadenceController must be built with the editor."); - } - } -} diff --git a/Source/SimCadenceEditor/Private/SimCadenceEditorModule.cpp b/Source/SimCadenceEditor/Private/SimCadenceEditorModule.cpp new file mode 100644 index 0000000..26bed5f --- /dev/null +++ b/Source/SimCadenceEditor/Private/SimCadenceEditorModule.cpp @@ -0,0 +1,36 @@ +#include "SimCadenceEditorModule.h" +#include "Modules/ModuleManager.h" +#if WITH_EDITOR +#include "ISettingsModule.h" +#include "SimCadenceSettings.h" +#define LOCTEXT_NAMESPACE "FSimCadenceEditorModule" +#endif + +IMPLEMENT_MODULE(FSimCadenceEditorModule, SimCadenceEditor) + +void FSimCadenceEditorModule::StartupModule() +{ +#if WITH_EDITOR + if (ISettingsModule* SettingsModule = FModuleManager::LoadModulePtr(TEXT("Settings"))) + { + SettingsModule->RegisterSettings(TEXT("Project"), TEXT("Plugins"), TEXT("SimCadence"), + LOCTEXT("SimCadenceName", "Sim Cadence"), + LOCTEXT("SimCadenceDesc", "Physics-authoritative cadence and training controls."), + GetMutableDefault()); + } +#endif +} + +void FSimCadenceEditorModule::ShutdownModule() +{ +#if WITH_EDITOR + if (ISettingsModule* SettingsModule = FModuleManager::LoadModulePtr(TEXT("Settings"))) + { + SettingsModule->UnregisterSettings(TEXT("Project"), TEXT("Plugins"), TEXT("SimCadence")); + } +#endif +} + +#if WITH_EDITOR +#undef LOCTEXT_NAMESPACE +#endif diff --git a/Source/SimCadenceController/Private/TrainingEditorEngine.cpp b/Source/SimCadenceEditor/Private/TrainingEditorEngine.cpp similarity index 100% rename from Source/SimCadenceController/Private/TrainingEditorEngine.cpp rename to Source/SimCadenceEditor/Private/TrainingEditorEngine.cpp diff --git a/Source/SimCadenceEditor/Public/SimCadenceEditorModule.h b/Source/SimCadenceEditor/Public/SimCadenceEditorModule.h new file mode 100644 index 0000000..a74559b --- /dev/null +++ b/Source/SimCadenceEditor/Public/SimCadenceEditorModule.h @@ -0,0 +1,9 @@ +#pragma once +#include "Modules/ModuleManager.h" + +class FSimCadenceEditorModule : public IModuleInterface +{ +public: + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; diff --git a/Source/SimCadenceController/Public/TrainingEditorEngine.h b/Source/SimCadenceEditor/Public/TrainingEditorEngine.h similarity index 83% rename from Source/SimCadenceController/Public/TrainingEditorEngine.h rename to Source/SimCadenceEditor/Public/TrainingEditorEngine.h index 2d73601..08c0b00 100644 --- a/Source/SimCadenceController/Public/TrainingEditorEngine.h +++ b/Source/SimCadenceEditor/Public/TrainingEditorEngine.h @@ -7,7 +7,7 @@ class IEngineLoop; UCLASS(Config = Engine, Transient) -class SIMCADENCECONTROLLER_API UTrainingEditorEngine : public UUnrealEdEngine +class SIMCADENCEEDITOR_API UTrainingEditorEngine : public UUnrealEdEngine { GENERATED_BODY() diff --git a/Source/SimCadenceEditor/SimCadenceEditor.Build.cs b/Source/SimCadenceEditor/SimCadenceEditor.Build.cs new file mode 100644 index 0000000..b7bb4dd --- /dev/null +++ b/Source/SimCadenceEditor/SimCadenceEditor.Build.cs @@ -0,0 +1,20 @@ +using UnrealBuildTool; + +public class SimCadenceEditor : ModuleRules +{ + public SimCadenceEditor(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PrivateDependencyModuleNames.AddRange(new string[] { + "Core", "CoreUObject", "Engine", + "UnrealEd", + "SimCadenceRuntime" + }); + + if (!Target.bBuildEditor) + { + throw new BuildException("SimCadenceEditor must be built with the editor."); + } + } +} diff --git a/Source/SimCadenceController/Private/SimCadenceEngineSubsystem.cpp b/Source/SimCadenceRuntime/Private/SimCadenceEngineSubsystem.cpp similarity index 100% rename from Source/SimCadenceController/Private/SimCadenceEngineSubsystem.cpp rename to Source/SimCadenceRuntime/Private/SimCadenceEngineSubsystem.cpp diff --git a/Source/SimCadenceController/Private/SimCadencePhysicsBridge.cpp b/Source/SimCadenceRuntime/Private/SimCadencePhysicsBridge.cpp similarity index 100% rename from Source/SimCadenceController/Private/SimCadencePhysicsBridge.cpp rename to Source/SimCadenceRuntime/Private/SimCadencePhysicsBridge.cpp diff --git a/Source/SimCadenceRuntime/Private/SimCadenceRuntimeModule.cpp b/Source/SimCadenceRuntime/Private/SimCadenceRuntimeModule.cpp new file mode 100644 index 0000000..d898a6a --- /dev/null +++ b/Source/SimCadenceRuntime/Private/SimCadenceRuntimeModule.cpp @@ -0,0 +1,4 @@ +#include "SimCadenceRuntimeModule.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_MODULE(FSimCadenceRuntimeModule, SimCadenceRuntime) diff --git a/Source/SimCadenceController/Private/SimCadenceSettings.cpp b/Source/SimCadenceRuntime/Private/SimCadenceSettings.cpp similarity index 98% rename from Source/SimCadenceController/Private/SimCadenceSettings.cpp rename to Source/SimCadenceRuntime/Private/SimCadenceSettings.cpp index 68a637c..f898a4e 100644 --- a/Source/SimCadenceController/Private/SimCadenceSettings.cpp +++ b/Source/SimCadenceRuntime/Private/SimCadenceSettings.cpp @@ -14,4 +14,5 @@ void USimCadenceSettings::PostEditChangeProperty(FPropertyChangedEvent& Property } } } -#endif \ No newline at end of file +#endif + diff --git a/Source/SimCadenceController/Private/SimFixedCustomTimeStep.cpp b/Source/SimCadenceRuntime/Private/SimFixedCustomTimeStep.cpp similarity index 100% rename from Source/SimCadenceController/Private/SimFixedCustomTimeStep.cpp rename to Source/SimCadenceRuntime/Private/SimFixedCustomTimeStep.cpp diff --git a/Source/SimCadenceController/Private/TrainingGameEngine.cpp b/Source/SimCadenceRuntime/Private/TrainingGameEngine.cpp similarity index 100% rename from Source/SimCadenceController/Private/TrainingGameEngine.cpp rename to Source/SimCadenceRuntime/Private/TrainingGameEngine.cpp diff --git a/Source/SimCadenceController/Public/SimCadenceEngineSubsystem.h b/Source/SimCadenceRuntime/Public/SimCadenceEngineSubsystem.h similarity index 93% rename from Source/SimCadenceController/Public/SimCadenceEngineSubsystem.h rename to Source/SimCadenceRuntime/Public/SimCadenceEngineSubsystem.h index d3e0fde..9ca908b 100644 --- a/Source/SimCadenceController/Public/SimCadenceEngineSubsystem.h +++ b/Source/SimCadenceRuntime/Public/SimCadenceEngineSubsystem.h @@ -7,7 +7,7 @@ class USimFixedCustomTimeStep; class ASimCadencePhysicsBridge; UCLASS() -class SIMCADENCECONTROLLER_API USimCadenceEngineSubsystem : public UEngineSubsystem +class SIMCADENCERUNTIME_API USimCadenceEngineSubsystem : public UEngineSubsystem { GENERATED_BODY() public: diff --git a/Source/SimCadenceController/Public/SimCadencePhysicsBridge.h b/Source/SimCadenceRuntime/Public/SimCadencePhysicsBridge.h similarity index 90% rename from Source/SimCadenceController/Public/SimCadencePhysicsBridge.h rename to Source/SimCadenceRuntime/Public/SimCadencePhysicsBridge.h index c79ecae..147074c 100644 --- a/Source/SimCadenceController/Public/SimCadencePhysicsBridge.h +++ b/Source/SimCadenceRuntime/Public/SimCadencePhysicsBridge.h @@ -6,7 +6,7 @@ DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFixedStepEvent, float, FixedDeltaTime); UCLASS(NotBlueprintable, Transient) -class SIMCADENCECONTROLLER_API ASimCadencePhysicsBridge : public AActor +class SIMCADENCERUNTIME_API ASimCadencePhysicsBridge : public AActor { GENERATED_BODY() public: diff --git a/Source/SimCadenceRuntime/Public/SimCadenceRuntimeModule.h b/Source/SimCadenceRuntime/Public/SimCadenceRuntimeModule.h new file mode 100644 index 0000000..fce34e9 --- /dev/null +++ b/Source/SimCadenceRuntime/Public/SimCadenceRuntimeModule.h @@ -0,0 +1,9 @@ +#pragma once +#include "Modules/ModuleManager.h" + +class FSimCadenceRuntimeModule : public IModuleInterface +{ +public: + virtual void StartupModule() override {} + virtual void ShutdownModule() override {} +}; diff --git a/Source/SimCadenceController/Public/SimCadenceSettings.h b/Source/SimCadenceRuntime/Public/SimCadenceSettings.h similarity index 96% rename from Source/SimCadenceController/Public/SimCadenceSettings.h rename to Source/SimCadenceRuntime/Public/SimCadenceSettings.h index b396354..476137a 100644 --- a/Source/SimCadenceController/Public/SimCadenceSettings.h +++ b/Source/SimCadenceRuntime/Public/SimCadenceSettings.h @@ -13,7 +13,7 @@ enum class ESimCadenceMode : uint8 }; UCLASS(Config = Game, DefaultConfig, meta = (DisplayName = "Sim Cadence")) -class SIMCADENCECONTROLLER_API USimCadenceSettings : public UDeveloperSettings +class SIMCADENCERUNTIME_API USimCadenceSettings : public UDeveloperSettings { GENERATED_BODY() public: diff --git a/Source/SimCadenceController/Public/SimFixedCustomTimeStep.h b/Source/SimCadenceRuntime/Public/SimFixedCustomTimeStep.h similarity index 83% rename from Source/SimCadenceController/Public/SimFixedCustomTimeStep.h rename to Source/SimCadenceRuntime/Public/SimFixedCustomTimeStep.h index 74a7229..079d920 100644 --- a/Source/SimCadenceController/Public/SimFixedCustomTimeStep.h +++ b/Source/SimCadenceRuntime/Public/SimFixedCustomTimeStep.h @@ -4,7 +4,7 @@ #include "SimFixedCustomTimeStep.generated.h" UCLASS() -class SIMCADENCECONTROLLER_API USimFixedCustomTimeStep : public UEngineCustomTimeStep +class SIMCADENCERUNTIME_API USimFixedCustomTimeStep : public UEngineCustomTimeStep { GENERATED_BODY() public: diff --git a/Source/SimCadenceController/Public/TrainingGameEngine.h b/Source/SimCadenceRuntime/Public/TrainingGameEngine.h similarity index 76% rename from Source/SimCadenceController/Public/TrainingGameEngine.h rename to Source/SimCadenceRuntime/Public/TrainingGameEngine.h index 490400a..910de30 100644 --- a/Source/SimCadenceController/Public/TrainingGameEngine.h +++ b/Source/SimCadenceRuntime/Public/TrainingGameEngine.h @@ -4,7 +4,7 @@ #include "TrainingGameEngine.generated.h" UCLASS(config = Engine) -class SIMCADENCECONTROLLER_API UTrainingGameEngine : public UGameEngine +class SIMCADENCERUNTIME_API UTrainingGameEngine : public UGameEngine { GENERATED_BODY() protected: diff --git a/Source/SimCadenceRuntime/SimCadenceRuntime.Build.cs b/Source/SimCadenceRuntime/SimCadenceRuntime.Build.cs new file mode 100644 index 0000000..9e1f921 --- /dev/null +++ b/Source/SimCadenceRuntime/SimCadenceRuntime.Build.cs @@ -0,0 +1,17 @@ +using UnrealBuildTool; + +public class SimCadenceRuntime : ModuleRules +{ + public SimCadenceRuntime(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { + "Core", "CoreUObject", "Engine", "DeveloperSettings" + }); + + PrivateDependencyModuleNames.AddRange(new string[] { + "Projects" + }); + } +} diff --git a/Source/UnrealMLAgents/UnrealMLAgents.Build.cs b/Source/UnrealMLAgents/UnrealMLAgents.Build.cs index c09db24..cc7c398 100644 --- a/Source/UnrealMLAgents/UnrealMLAgents.Build.cs +++ b/Source/UnrealMLAgents/UnrealMLAgents.Build.cs @@ -16,13 +16,20 @@ public UnrealMLAgents(ReadOnlyTargetRules Target) : base(Target) MLAgentsPlatformInstance = GetMLAgentsPlatformInstance(Target); bEnableExceptions = true; - PrivateDependencyModuleNames.AddRange( - new string[] { "Slate", "SlateCore", "Core", "CoreUObject", "Engine", "SimCadenceController" }); + PublicDependencyModuleNames.AddRange( + new string[] { "Core", "CoreUObject", "Engine", "SimCadenceRuntime" }); - if (Target.bBuildEditor) - { - PrivateDependencyModuleNames.AddRange(new string[] { "UnrealEd" }); - } + PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + + if (Target.bBuildEditor) + { + PrivateDependencyModuleNames.Add("SimCadenceEditor"); + PublicDefinitions.Add("WITH_SIMCADENCE_EDITOR=1"); + } + else + { + PublicDefinitions.Add("WITH_SIMCADENCE_EDITOR=0"); + } AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenSSL"); AddEngineThirdPartyPrivateStaticDependencies(Target, "zlib"); diff --git a/UnrealMLAgents.uplugin b/UnrealMLAgents.uplugin index 52c26d5..6ae4c84 100644 --- a/UnrealMLAgents.uplugin +++ b/UnrealMLAgents.uplugin @@ -1,33 +1,30 @@ { - "FileVersion": 3, - "Version": 100, - "VersionName": "1.0.0", - "FriendlyName": "UnrealMLAgents", - "Description": "A plugin for Unreal Engine enabling Deep Reinforcement Learning, inspired by Unity ML-Agents.", - "Category": "Machine Learning", - "CreatedBy": "AlanLaboratory, Stephane Capponi", - "CreatedByURL": "https://github.com/AlanLaboratory/UnrealMLAgents", - "DocsURL": "https://unrealmlagents.readthedocs.io/en/latest/", - "FabURL": "com.epicgames.launcher://ue/Fab/product/0207991a-a838-4b27-94f6-76ee166a0146/", - "MarketplaceURL": "", - "SupportURL": "discord.gg/XNNJFfgw6M", - "CanContainContent": true, - "IsBetaVersion": false, - "IsExperimentalVersion": false, - "Installed": false, - "Modules": [ - { - "name": "UnrealMLAgents", - "type": "Runtime", - "loadingphase": "Default", - "PlatformAllowList": [ - "Win64" - ] - }, - { - "Name": "SimCadenceController", - "Type": "Editor", - "LoadingPhase": "PostEngineInit" - } - ] + "FileVersion": 3, + "Version": 100, + "VersionName": "1.0.0", + "FriendlyName": "UnrealMLAgents", + "Description": "A plugin for Unreal Engine enabling Deep Reinforcement Learning, inspired by Unity ML-Agents.", + "Category": "Machine Learning", + "CreatedBy": "AlanLaboratory, Stephane Capponi", + "CreatedByURL": "https://github.com/AlanLaboratory/UnrealMLAgents", + "DocsURL": "https://unrealmlagents.readthedocs.io/en/latest/", + "FabURL": "com.epicgames.launcher://ue/Fab/product/0207991a-a838-4b27-94f6-76ee166a0146/", + "MarketplaceURL": "", + "SupportURL": "discord.gg/XNNJFfgw6M", + "CanContainContent": true, + "IsBetaVersion": false, + "IsExperimentalVersion": false, + "Installed": false, + "Modules": [ + { + "Name": "UnrealMLAgents", + "Type": "Runtime", + "LoadingPhase": "Default", + "PlatformAllowList": [ + "Win64" + ] + }, + { "Name": "SimCadenceRuntime", "Type": "Runtime", "LoadingPhase": "Default" }, + { "Name": "SimCadenceEditor", "Type": "Editor", "LoadingPhase": "PostEngineInit" } + ] }