private void LoadResources()
        {
            GameConfig game = _games[_gameEnum];
            _dialogFilePath = Path.Combine(_rootPath, DialogFilename);
            bool dialogfileExists = File.Exists(_dialogFilePath);
            if (!dialogfileExists)
            {
                _dialogFilePath = Path.Combine(_rootPath, "lang", "en_US", DialogFilename);
            }

            _keyResource = _keyResourceService.GetKeyResource(_gameEnum, _keyFilePath);

            foreach (var resourceEntryResource in _keyResource.ResourceEntries)
            {
                var resourceFile = new ResourceFile();
                resourceFile.Extension = resourceEntryResource.Extension;
                resourceFile.Folder = resourceEntryResource.Extension;
                resourceFile.RootFolder = resourceEntryResource.Extension;
                resourceFile.File = resourceEntryResource.FileName;
                resourceFile.ResourceEntry = true;
                _resourceFiles.Add(resourceFile);
            }

            List<string> currentExtraDirs = game.ExtraDirs.Select(GetFullPath).ToList();

            if (currentExtraDirs.IsNullOrEmpty())
            {
                // TODO: throw Exception
            }

            foreach (var extraDir in currentExtraDirs)
            {
                if (Directory.Exists(extraDir))
                {
                    _extraDirs.Add(extraDir);
                    LoadResourceFiles(extraDir, currentExtraDirs);
                }
            }

            string overrideFullPath = Path.Combine(_rootPath, OverrideFolder);
            if (Directory.Exists(overrideFullPath))
            {
                string[] overrideFiles = Directory.GetFiles(overrideFullPath);

                foreach (var overrideFile in overrideFiles)
                {
                    string fileName = Path.GetFileName(overrideFile);
                    string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(overrideFile);
                    string extension = Path.GetExtension(overrideFile);
                    ResourceFile resourceFile = _resourceFiles.FirstOrDefault(file => file.File == fileNameWithoutExtension);

                    string overrideFolder = OverrideFolder.Split(Path.DirectorySeparatorChar).Last();

                    if (resourceFile == null)
                    {
                        resourceFile = new ResourceFile();
                        resourceFile.File = fileName;
                        resourceFile.FullPath = Path.Combine(OverrideFolder, overrideFile);
                        resourceFile.RootFolder = overrideFolder;
                        resourceFile.Folder = overrideFolder;
                        resourceFile.Extension = string.IsNullOrEmpty(extension)
                             ? string.Empty
                             : extension.ToUpper().Replace(".", string.Empty);

                        _resourceFiles.Add(resourceFile);
                    }
                    else
                    {
                        ResourceEntryResource resourceEntryResource = _keyResource.ResourceEntries.FirstOrDefault(resource => resource.FileName == fileName);
                        if (resourceEntryResource != null)
                        {
                            resourceEntryResource.HasOverride = true;
                        }
                    }
                }
            }
        }
        private void LoadResourceFiles(string directory, ICollection<string> extraDirectories)
        {
            string[] filePaths = Directory.GetFiles(directory);
            string[] directoryPaths = Directory.GetDirectories(directory);

            var filesAndDirectories = new List<string>();
            filesAndDirectories.AddRange(filePaths);
            filesAndDirectories.AddRange(directoryPaths);

            string parentFolder = GetParentOfExtraSubDirectory(extraDirectories, directory);

            foreach (var file in filesAndDirectories)
            {
                FileAttributes attr = File.GetAttributes(file);

                if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    LoadResourceFiles(file, extraDirectories);
                    continue;
                }

                var resourceFile = new ResourceFile();
                string fileName = Path.GetFileName(file);
                string extension = Path.GetExtension(file);

                if (string.IsNullOrEmpty(fileName))
                {
                    // TODO : throw Exception
                }

                resourceFile.RootFolder = parentFolder;
                resourceFile.File = fileName.ToUpper();
                resourceFile.FullPath = file;
                resourceFile.Folder = directory.Split(Path.DirectorySeparatorChar).Last();
                resourceFile.Extension = string.IsNullOrEmpty(extension)
                                             ? string.Empty
                                             : extension.ToUpper().Replace(".", string.Empty);

                _resourceFiles.Add(resourceFile);
            }
        }