|
|
@@ -0,0 +1,107 @@
|
|
|
+# EnTT and Unreal Engine
|
|
|
+
|
|
|
+<!--
|
|
|
+@cond TURN_OFF_DOXYGEN
|
|
|
+-->
|
|
|
+# Table of Contents
|
|
|
+
|
|
|
+* [Enable Cpp17](#enable-cpp17)
|
|
|
+* [EnTT as a third party module](#entt-as-a-third-party-module)
|
|
|
+* [Include EnTT](#include-entt)
|
|
|
+<!--
|
|
|
+@endcond TURN_OFF_DOXYGEN
|
|
|
+-->
|
|
|
+
|
|
|
+## Enable Cpp17
|
|
|
+
|
|
|
+As of writing (Unreal Engine v4.25), the default C++ standard of Unreal Engine
|
|
|
+is C++14.<br/>
|
|
|
+On the other hand, note that `EnTT` requires C++17 to compile. To enable it, in
|
|
|
+the main module of the project there should be a `<Game Name>.Build.cs` file,
|
|
|
+the constructor of which must contain the following lines:
|
|
|
+
|
|
|
+```cs
|
|
|
+PCHUsage = PCHUsageMode.NoSharedPCHs;
|
|
|
+PrivatePCHHeaderFile = "<PCH filename>.h";
|
|
|
+CppStandard = CppStandardVersion.Cpp17;
|
|
|
+```
|
|
|
+
|
|
|
+Replace `<PCH filename>.h` with the name of the already existing PCH header
|
|
|
+file, if any.<br/>
|
|
|
+In case the project doesn't already contain a file of this type, it's possible
|
|
|
+to create one with the following content:
|
|
|
+
|
|
|
+```cpp
|
|
|
+#pragma once
|
|
|
+#include "CoreMinimal.h"
|
|
|
+```
|
|
|
+
|
|
|
+Remember to remove any old `PCHUsage = <...>` line that was previously there. At
|
|
|
+this point, C++17 support should be in place.<br/>
|
|
|
+Try to compile the project to ensure it works as expected before following
|
|
|
+further steps.
|
|
|
+
|
|
|
+Note that updating a *project* to C++17 doesn't necessarily mean that the IDE in
|
|
|
+use will also start to recognize its syntax.<br/>
|
|
|
+If the plan is to use C++17 in the project too, check the specific instructions
|
|
|
+for the IDE in use.
|
|
|
+
|
|
|
+## EnTT as a third party module
|
|
|
+
|
|
|
+Once this point is reached, the `Source` directory should look like this:
|
|
|
+
|
|
|
+```
|
|
|
+Source
|
|
|
+| MyGame.Target.cs
|
|
|
+| MyGameEditor.Target.cs
|
|
|
+|
|
|
|
++---MyGame
|
|
|
+| | MyGame.Build.cs
|
|
|
+| | MyGame.h (PCH Header file)
|
|
|
+|
|
|
|
+\---ThirdParty
|
|
|
+ \---EnTT
|
|
|
+ | EnTT.Build.cs
|
|
|
+ |
|
|
|
+ \---entt (GitHub repository content inside)
|
|
|
+```
|
|
|
+
|
|
|
+To make this happen, create the folder `ThirdParty` under `Source` if it doesn't
|
|
|
+exist already. Then, add an `EnTT` folder under `ThirdParty`.<br/>
|
|
|
+Within the latter, create a new file `EnTT.Build.cs` with the following content:
|
|
|
+
|
|
|
+```cs
|
|
|
+using System.IO;
|
|
|
+using UnrealBuildTool;
|
|
|
+
|
|
|
+public class EnTT: ModuleRules {
|
|
|
+ public EnTT(ReadOnlyTargetRules Target) : base(Target) {
|
|
|
+ Type = ModuleType.External;
|
|
|
+ PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "entt", "src", "entt"));
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+The last line indicates that the actual files will be found in the directory
|
|
|
+`EnTT/entt/src/entt`.<br/>
|
|
|
+Download the repository for `EnTT` and place it next to `EnTT.Build.cs` or
|
|
|
+update the path above accordingly.
|
|
|
+
|
|
|
+Finally, open the `<Game Name>.Build.cs` file and add `EnTT` as a dependency at
|
|
|
+the end of the list:
|
|
|
+
|
|
|
+```cs
|
|
|
+PublicDependencyModuleNames.AddRange(new[] {
|
|
|
+ "Core", "CoreUObject", "Engine", "InputCore", [...], "EnTT"
|
|
|
+});
|
|
|
+```
|
|
|
+
|
|
|
+Note that some IDEs might require a restart to start recognizing the new module
|
|
|
+for code-highlighting features and such.
|
|
|
+
|
|
|
+## Include EnTT
|
|
|
+
|
|
|
+In any source file of the project, add `#include "entt.hpp"` or any other path
|
|
|
+to the file from `EnTT` to use it.<br/>
|
|
|
+Try to create a registry as `entt::registry registry;` to make sure everything
|
|
|
+compiles fine.
|