Example #1
0
        private string GetModuleNamespace(UnrealModuleType moduleType, string moduleName, UnrealModuleType moduleAssetType, bool allowFoldersAsNamespace, string path)
        {
            string namespaceName = null;

            switch (moduleType)
            {
            case UnrealModuleType.Game:
                switch (moduleAssetType)
                {
                case UnrealModuleType.Engine:
                    namespaceName = Settings.Namespaces.EngineAsset;
                    break;

                case UnrealModuleType.GamePlugin:
                    namespaceName = Settings.Namespaces.GamePluginAsset;
                    break;

                case UnrealModuleType.EnginePlugin:
                    namespaceName = Settings.Namespaces.EnginePluginAsset;
                    break;

                default:
                    namespaceName = Settings.Namespaces.Game;
                    break;
                }
                break;

            case UnrealModuleType.GamePlugin:
                namespaceName = Settings.Namespaces.GamePlugin;
                break;

            case UnrealModuleType.Engine:
                namespaceName = Settings.Namespaces.Engine;
                if (moduleName == "CoreUObject")
                {
                    // Allow CoreUObject to be redirected to a common namespace name (UnrealEngine.Runtime)
                    namespaceName = GetEngineObjectNamespace();
                }
                break;

            case UnrealModuleType.EnginePlugin:
                namespaceName = Settings.Namespaces.EnginePlugin;
                break;

            default:
                return(namespaceName);
            }

            if (string.IsNullOrWhiteSpace(namespaceName))
            {
                return(null);
            }

            if (namespaceName.Contains("{Default}"))
            {
                namespaceName = namespaceName.Replace("{Default}", Settings.Namespaces.Default);
            }

            if (namespaceName.Contains("{Game}"))
            {
                string gameName = FPaths.GetBaseFilename(FPaths.ProjectFilePath);
                namespaceName = namespaceName.Replace("{Game}", gameName);
            }

            if (namespaceName.Contains("{Module}"))
            {
                namespaceName = namespaceName.Replace("{Module}", moduleName);
            }

            if (namespaceName.Contains("{Folder}"))
            {
                if (allowFoldersAsNamespace && moduleAssetType != UnrealModuleType.Unknown)
                {
                    // Get the directory of the file and remove root name "/Game/"
                    string directory  = FPackageName.GetLongPackagePath(path);
                    int    slashIndex = directory.IndexOf('/', 1);
                    if (slashIndex >= 0)
                    {
                        directory = directory.Substring(slashIndex + 1);
                    }
                    else
                    {
                        // The path is empty or only the root name
                        directory = string.Empty;
                    }

                    // Make each '/' a part of the namespace
                    string expandedNamespace = directory.Replace("/", ".");

                    namespaceName = namespaceName.Replace("{Folder}", expandedNamespace);
                }
                else
                {
                    namespaceName = namespaceName.Replace("{Folder}", string.Empty);
                }
            }

            // Remove duplicate '.' chars
            StringBuilder result = new StringBuilder(namespaceName);

            for (int i = result.Length - 1; i >= 0; --i)
            {
                if (result[i] == '.')
                {
                    if (i == 0 || result[i - 1] == '.' || i == result.Length - 1)
                    {
                        result.Remove(i, 1);
                    }
                }
            }

            return(result.ToString());
        }