using System; using System.Collections.Generic; using UnityEngine; namespace DefaultNamespace { /// /// 单个文件的下载信息 /// [Serializable] public class FileDownloadInfo { /// /// 文件显示名称 /// public string name; /// /// 文件下载URL /// public string url; /// /// 保存的文件名 /// public string fileName; /// /// 本地文件路径(下载后设置) /// [NonSerialized] public string localFilePath; /// /// 是否已下载 /// [NonSerialized] public bool isDownloaded; /// /// 下载状态 /// [NonSerialized] public DownloadStatus downloadStatus; /// /// 错误信息(如果下载失败) /// [NonSerialized] public string errorMessage; } /// /// 下载状态枚举 /// public enum DownloadStatus { /// /// 未开始 /// NotStarted, /// /// 下载中 /// Downloading, /// /// 下载完成 /// Completed, /// /// 下载失败 /// Failed } /// /// 单个考试类型的文件配置 /// [Serializable] public class ExamFileConfig { /// /// 考试类型名称 /// public string examType; /// /// 该考试类型需要下载的文件列表 /// public List files = new List(); /// /// 获取指定名称的文件信息 /// /// 文件名称 /// 文件信息,如果不存在则返回null public FileDownloadInfo GetFileByName(string fileName) { return files.Find(f => f.fileName == fileName); } /// /// 获取已下载的文件列表 /// /// 已下载的文件列表 public List GetDownloadedFiles() { return files.FindAll(f => f.isDownloaded); } /// /// 获取所有文件的本地路径(仅已下载的文件) /// /// 已下载文件的本地路径列表 public List GetDownloadedFilePaths() { var downloadedFiles = GetDownloadedFiles(); var paths = new List(); foreach (var file in downloadedFiles) { if (!string.IsNullOrEmpty(file.localFilePath) && System.IO.File.Exists(file.localFilePath)) { paths.Add(file.localFilePath); } } return paths; } /// /// 检查是否所有文件都已下载 /// /// 是否所有文件都已下载 public bool AreAllFilesDownloaded() { return files.TrueForAll(f => f.isDownloaded); } // /// // /// 获取下载进度(0-1之间) // /// // /// 下载进度 // public float GetDownloadProgress() // { // if (files.Count == 0) return 1f; // // int downloadedCount = files.Count(f => f.isDownloaded); // return (float)downloadedCount / files.Count; // } } /// /// 考试文件配置管理器 /// [Serializable] public class ExamFileConfigManager { /// /// 所有考试类型的文件配置 /// public List examFileConfigs = new List(); /// /// 根据考试类型获取配置 /// /// 考试类型名称 /// 考试文件配置,如果不存在则返回null public ExamFileConfig GetConfigByExamType(string examType) { return examFileConfigs.Find(c => c.examType == examType); } /// /// 添加或更新考试配置 /// /// 考试文件配置 public void AddOrUpdateConfig(ExamFileConfig config) { var existingConfig = GetConfigByExamType(config.examType); if (existingConfig != null) { // 更新现有配置 int index = examFileConfigs.IndexOf(existingConfig); examFileConfigs[index] = config; } else { // 添加新配置 examFileConfigs.Add(config); } } /// /// 验证配置完整性 /// /// 验证结果 public bool Validate() { foreach (var config in examFileConfigs) { if (string.IsNullOrEmpty(config.examType)) { Debug.LogError($"考试类型名称不能为空"); return false; } if (config.files == null || config.files.Count == 0) { Debug.LogWarning($"考试类型 '{config.examType}' 没有配置任何文件"); continue; } foreach (var file in config.files) { if (string.IsNullOrEmpty(file.name)) { Debug.LogError($"考试类型 '{config.examType}' 存在文件名称为空的情况"); return false; } if (string.IsNullOrEmpty(file.url)) { Debug.LogError($"考试类型 '{config.examType}' 文件 '{file.name}' 的URL为空"); return false; } if (string.IsNullOrEmpty(file.fileName)) { Debug.LogError($"考试类型 '{config.examType}' 文件 '{file.name}' 的文件名为空"); return false; } } } return true; } } }