using System.Collections; using System.Collections.Generic; using TMPro; using Unity.VisualScripting; using UnityEngine; using UnityEngine.UI; using static MainCanvasManager; public class MediaViwerPanel : PanelBasic { /// /// 关闭 /// public Button close_button; /// /// 导入媒体 /// public Button import_media_button; public Toggle video_files_button; public Toggle audio_files_button; private TextMeshProUGUI video_label; private TextMeshProUGUI audio_label; public Image video_media_panel; public Image audio_media_panel; public RectTransform video_media_content; public RectTransform audio_media_content; /// /// 预制体 /// public MediaViewerItem media_viewer_item_prefab; /// /// 对象池 /// public List media_viwer_item_pool; /// /// 右键菜单 /// public RectTransform context_menu_image; public Button context_menu_preview_button; public Button context_menu_delete_button; /// /// 当前选中的 /// public MediaViewerItem current_media_item; /// /// 文件字典,路径$@$文件名 /// public static List file_dic = new List(); protected override void Awake() { base.Awake(); } private void Start() { close_button.onClick.AddListener(OnClose); import_media_button.onClick.AddListener(OnImportMedia); video_files_button.onValueChanged.AddListener(OnVideoFiles); audio_files_button.onValueChanged.AddListener(OnAudioFiles); context_menu_preview_button.onClick.AddListener(OnPreview); context_menu_delete_button.onClick.AddListener(OnDelete); MyInit(); gameObject.SetActive(false); } private void OnDestroy() { file_dic.Clear(); } /// /// 新增初始化 /// public void MyInit() { if (PlayerPrefs.HasKey("media_cache")) { var lis = PlayerPrefs.GetString("media_cache"); var lis_sp = lis.Split(">*<"); for (int i = 0; i < lis_sp.Length; i++) { if (!string.IsNullOrEmpty(lis_sp[i])) { var lis_sp_sp = lis_sp[i].Split("/*/"); Init(lis_sp_sp[0], lis_sp_sp[1], lis_sp_sp[2], true); } } } } public bool Init(string _file_type, string _file_name, string _path, bool _start_init = false) { bool _add_new_data = false; //是否有新增 if (media_viewer_item_prefab == null) media_viewer_item_prefab = Resources.Load("Prefabs/UIItem/MediaViewerItem"); if (file_dic.Find(x => x.file_path.Equals(_path))) { ConsolePanel.ConsoleOutput(_path + " 文件已存在!"); return _add_new_data = false; } else { _add_new_data = true; } if (!_start_init) { var lis = ""; if (PlayerPrefs.HasKey("media_cache")) { lis = PlayerPrefs.GetString("media_cache"); } lis += ">*<" + _file_type + "/*/" + _file_name + "/*/" + _path; PlayerPrefs.SetString("media_cache", lis); } if (_file_type == "mp3") { var _audio_item = Instantiate(media_viewer_item_prefab, audio_media_content); _audio_item.Init(_file_type, _file_name, _path); file_dic.Add(_audio_item); } else if (_file_type == "mp4" || _file_type == "mov" || _file_type == "avi") { var _video_item = Instantiate(media_viewer_item_prefab, video_media_content); _video_item.Init(_file_type, _file_name, _path); file_dic.Add(_video_item); } else if (_file_type == "jpg" || _file_type == "png" || _file_type == "jpeg") { } return _add_new_data; } private MediaViewerItem Get(RectTransform _content) { MediaViewerItem __item = null; if (media_viwer_item_pool == null) { media_viwer_item_pool = new List(); } else { if (media_viwer_item_pool.Count > 0) { __item = media_viwer_item_pool[0]; media_viwer_item_pool.Remove(__item); } } if (__item == null) { __item = Instantiate(media_viewer_item_prefab, _content); } else { __item.gameObject.SetActive(true); __item.transform.SetParent(_content); } return __item; } private void Recycle(MediaViewerItem _item) { _item.gameObject.SetActive(false); _item.transform.SetParent(transform); media_viwer_item_pool.Add(_item); var p = PlayerPrefs.GetString("media_cache"); var p_sp = p.Split(">*<"); for (int i = 0; i < p_sp.Length; i++) { if (!string.IsNullOrEmpty(p_sp[i])) { if (p_sp[i].Equals(_item.perfer_str)) { p_sp[i] = ""; } } } p = ""; for (int i = 0; i < p_sp.Length; i++) { if (!string.IsNullOrEmpty(p_sp[i])) { p += ">*<" + p_sp[i]; } } PlayerPrefs.SetString("media_cache", p); } public void OnClose() { OnPopupEnd(); } public void OnImportMedia() { menu_panel.OnImportMedia(); } public void OnVideoFiles(bool _ison) { video_media_panel.gameObject.SetActive(_ison); video_label.color = new Color(1, 1, 1, _ison ? 1 : 0.5f); } public void OnAudioFiles(bool _ison) { audio_media_panel.gameObject.SetActive(_ison); audio_label.color = new Color(1, 1, 1, _ison ? 1 : 0.5f); } public void OnPreview() { if (current_media_item.file_type.Equals("mp3") || current_media_item.file_type.Equals("wav")) { MediaPlayer.Instance.AudioLoad(current_media_item.file_name_text.text, (result,_file_name) => { if (result) { media_preview_panel.OnPopup(); media_preview_panel.PreviewAudio(_file_name); } }); } else if (current_media_item.file_type.Equals("mp4") || current_media_item.file_type.Equals("avi")) { media_preview_panel.OnPopup(); media_preview_panel.PreviewVideo(current_media_item.file_name_text.text, current_media_item.file_path); } } public void OnDelete() { confirm_panel.OnPopup("删除确认", "是否确认删除" + current_media_item.file_name_text.text + "?", "提示", (_delete) => { if (_delete) { Recycle(current_media_item); context_menu_image.gameObject.SetActive(false); file_dic.Remove(current_media_item); current_media_item = null; } else { } }); } }