Beispiel #1
0
        public MixedGameStructure(FileCollection collection, IEnumerable <string> pathes) :
            base(collection)
        {
            Dictionary <string, string> files      = new Dictionary <string, string>();
            Dictionary <string, string> assemblies = new Dictionary <string, string>();
            HashSet <string>            dataPathes = new HashSet <string>();

            foreach (string path in pathes)
            {
                if (FileMultiStream.Exists(path))
                {
                    string name = FileMultiStream.GetFileName(path);
                    files.Add(name, path);
                    string directory = Path.GetDirectoryName(path);
                    dataPathes.Add(directory);
                }
                else if (DirectoryUtils.Exists(path))
                {
                    DirectoryInfo directory = new DirectoryInfo(DirectoryUtils.ToLongPath(path));
                    CollectFromDirectory(directory, files, assemblies, dataPathes);
                }
                else
                {
                    throw new Exception($"Neither file nor directory at '{path}' exists");
                }
            }

            DataPathes = dataPathes.ToArray();
            Files      = files;
            Assemblies = assemblies;
            SetScriptingBackend();
            Name = Files.First().Key;
        }
        protected void CollectGameFiles(DirectoryInfo root, IDictionary <string, string> files)
        {
            string filePath = Path.Combine(root.FullName, GlobalGameManagerName);

            if (FileMultiStream.Exists(filePath))
            {
                AddFile(files, GlobalGameManagerName, filePath);
            }
            else
            {
                filePath = Path.Combine(root.FullName, MainDataName);
                if (FileMultiStream.Exists(filePath))
                {
                    AddFile(files, MainDataName, filePath);
                }
            }

            foreach (FileInfo levelFile in root.EnumerateFiles())
            {
                string levelName = FileMultiStream.GetFileName(levelFile.Name);
                if (s_levelName.IsMatch(levelName))
                {
                    AddFile(files, levelName, levelFile.FullName);
                }
            }
        }
Beispiel #3
0
        public void Load(IEnumerable <string> pathes)
        {
            List <string> toProcess = new List <string>();

            toProcess.AddRange(pathes);
            if (CheckPC(toProcess))
            {
            }
            else if (CheckAndroid(toProcess))
            {
            }
            CheckMixed(toProcess);

            if (PlatformStructure != null)
            {
                foreach (string filePath in PlatformStructure.FetchFiles())
                {
                    string fileName = FileMultiStream.GetFileName(filePath);
                    if (m_knownFiles.Add(fileName))
                    {
                        FileCollection.Load(filePath);
                    }
                }
            }
            foreach (string filePath in MixedStructure.FetchFiles())
            {
                string fileName = FileMultiStream.GetFileName(filePath);
                if (m_knownFiles.Add(fileName))
                {
                    FileCollection.Load(filePath);
                }
            }
        }
Beispiel #4
0
 private void LoadFiles(IEnumerable <string> filePathes)
 {
     foreach (string filePath in filePathes)
     {
         string fileName = FileMultiStream.GetFileName(filePath);
         LoadFile(filePath, fileName);
     }
 }
Beispiel #5
0
        private void AddFile(string path)
        {
            string name = FileMultiStream.GetFileName(path);

            m_files.Add(name, path);
            string directory = Path.GetDirectoryName(path);

            m_knownDirectories.Add(directory);
        }
Beispiel #6
0
        private static void LoadFiles(AssetCollection collection, IEnumerable <string> filePathes)
        {
            List <string> processed = new List <string>();

            foreach (string path in filePathes)
            {
                string filePath = FileMultiStream.GetFilePath(path);
                if (processed.Contains(filePath))
                {
                    continue;
                }

                string fileName = FileMultiStream.GetFileName(path);
                using (Stream stream = FileMultiStream.OpenRead(path))
                {
                    collection.Read(stream, filePath, fileName);
                }
                processed.Add(filePath);
            }
        }