You are correct about the explicit offset of the .h file and moving it breaks your code.
What you can do is … put following in your "Project.Build.cs"file. This code walks through all your project code directories and adds them to your include paths.
Add this C# function to the “Project : ModuleRules” class.
/*
* IncludeSubDirectoriesRecursive()
* - automatically adds all code folders to "PublicIncludePaths"
* - so users will not have to explicitly offset all .h includes
*/
private void IncludeSubDirectoriesRecursive(string baseDirectory, string DirectoryPathToSearch)
{
string[] allDirectories = Directory.GetDirectories(DirectoryPathToSearch);
foreach (string nextDirectory in allDirectories)
{
string relativePath = Path.GetRelativePath(baseDirectory, nextDirectory);
Console.WriteLine("Adding include path: " + relativePath);
PublicIncludePaths.Add(relativePath);
IncludeSubDirectoriesRecursive(baseDirectory, nextDirectory);
}
}
Then in the same file in the “ProjectName : base” function add the following:
// include all code directories in this project
// so users do not have to explicitly offset all include files
string baseCodeDirectory = Path.Combine(ModuleDirectory, "..\\");
Console.WriteLine("Including all directories for " + ModuleDirectory.ToString());
IncludeSubDirectoriesRecursive(baseCodeDirectory, baseCodeDirectory);
If it works correctly, in VisualStudio output you will see "“Adding include path: foldeName” for every code folder in your project. Now you can just Include “BaseItem.h” no matter where it is in your project code. No explicit offset needed.