using AX.MessageSystem; using SuperScrollView; using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI; public class SuggestPanel : UIView { public GameObject InputFiledObject; public LoopListView2 SuggestListView; public Button CloseButton; public Button TextButton; public GameObject AudioButton; public InputField InputField; private ClickEventListener listener; //录音机 private AudioRecorder recorder; private string fileName; private TimeSpan time; private DateTime startTime; public override UIViewType ViewType { get { return UIViewType.Normal; } } private void Awake() { TextButton.onClick.AddListener(TextButtonClick); recorder = gameObject.AddComponent(); recorder.Stopped += OnRecorderStopped; CloseButton.onClick.AddListener(Hide); listener = ClickEventListener.Get(AudioButton); listener.SetPointerDownHandler(AudioButtonClickDown); listener.SetPointerUpHandler(AudioButtonClickUp); //作战建议初始化 SuggestListView.InitListView(ChatManager.Instance.SuggestChatMsg.Count, OnGetSuggestItemByIndex); } /// /// 语音按钮弹起 /// /// private void AudioButtonClickUp(GameObject obj) { recorder.StopRecorder(); } /// /// 语音按钮按下 /// /// private void AudioButtonClickDown(GameObject obj) { if (recorder.Ready) { startTime = DateTime.Now; recorder.StartRecorder(); } else { LoadPromptWin.Instance.LoadTextPromptWindow("没有可用设备", 1f); } } /// /// 保存音频事件 /// /// private void OnRecorderStopped(ArraySegment segment) { fileName = string.Format("{0}.opus", Guid.NewGuid().ToString("N")); string userPath = ChatManager.Instance.UserPath; if (!Directory.Exists(userPath)) { Directory.CreateDirectory(userPath); } string filePath = Path.Combine(userPath, fileName); using (var filestream = new FileStream(filePath, FileMode.CreateNew)) { filestream.Write(segment.Array, segment.Offset, segment.Count); } time = DateTime.Now - startTime; ChatManager.Instance.SendSuggestAudioMessage(fileName, time); // 输入框获得焦点 InputField.ActivateInputField(); } //添加本地语音 public void AddLocalAudioData() { ChatAudioMessage msg = new ChatAudioMessage() { BattleId = 0, Channel = new ChatChannel(), ChatGroup = ChatType.SuggestChat, CreateTime = DateTime.Now, FileName = fileName, ID = 0, ReceiverId = ChatManager.Instance.FindSuggestReceiverId(), SenderId = CurrentUserInfo.mySelf.Id, ReplayFrameCount = InputManager.frameCount }; ChatManager.Instance.AddSuggestMsg(msg); //刷新UI RefreshSuggestMsg(); } private void TextButtonClick() { string str = InputField.text; InputField.text = null; if (!string.IsNullOrEmpty(str)) { ChatManager.Instance.SendSuggestTextMessage(str); } // 输入框获得焦点 InputField.ActivateInputField(); } //添加本地信息 public void AddLocalTextData(string str) { ChatTextMessage msg = new ChatTextMessage() { BattleId = 0, Channel = new ChatChannel(), ChatGroup = ChatType.SuggestChat, CreateTime = DateTime.Now, Data = str, ID = 0, ReceiverId = ChatManager.Instance.FindSuggestReceiverId(), SenderId = CurrentUserInfo.mySelf.Id, ReplayFrameCount = InputManager.frameCount }; ChatManager.Instance.AddSuggestMsg(msg); //刷新UI RefreshSuggestMsg(); } public void RefreshSuggestMsg() { SuggestListView.SetListItemCount(ChatManager.Instance.GetSuggestMsgCount(), false); SuggestListView.MovePanelToItemIndex(ChatManager.Instance.GetSuggestMsgCount(), 0); } public void ShowInput() { base.Show(); //TODO 显示参谋界面 InputFiledObject.SetActive(true); SuggestListView.GetComponent().sizeDelta = new Vector2(406f, 315f); SuggestListView.ResetListView(); } public void ShowNoInput() { base.Show(); //TODO 显示指挥界面 InputFiledObject.SetActive(false); SuggestListView.GetComponent().sizeDelta = new Vector2(406f, 365f); SuggestListView.ResetListView(); } // private void OnEnable() { //Show(); MessageDispatcher.AddListener(MessageName.RefreshSuggestChatMsgs.ToString(), RefreshSuggestChatMsgs); //MessageDispatcher.AddListener(MessageName.ShowSuggestPanel.ToString(), ShowSuggestPanel); } private void OnDisable() { MessageDispatcher.RemoveListener(MessageName.RefreshSuggestChatMsgs.ToString(), RefreshSuggestChatMsgs); //MessageDispatcher.AddListener(MessageName.ShowSuggestPanel.ToString(), ShowSuggestPanel); } /// /// 显示面板 /// /// //private void ShowSuggestPanel(IMessage obj) //{ // bool b = (bool)obj.Data; // gameObject.SetActive(b); //} private void RefreshSuggestChatMsgs(IMessage obj) { RefreshSuggestMsg(); } public override void Refresh() { base.Refresh(); SuggestListView.SetListItemCount(ChatManager.Instance.GetSuggestMsgCount(), false); } /// /// 获取 /// /// /// /// private LoopListViewItem2 OnGetSuggestItemByIndex(LoopListView2 listView, int index) { //获取要填充的数据 ChatMessage itemData = ChatManager.Instance.GetSuggestMsgByIndex(index); LoopListViewItem2 item = null; if (itemData is ChatTextMessage) { item = listView.NewListViewItem("SuggestTextItem"); SuggestTextItem itemScript = item.GetComponent(); if (item.IsInitHandlerCalled == false) { item.IsInitHandlerCalled = true; itemScript.Init(); } itemScript.SetData(itemData as ChatTextMessage, index); } else if (itemData is ChatAudioMessage) { item = listView.NewListViewItem("ChatAudioItem"); ChatAudioItem itemScript = item.GetComponent(); if (item.IsInitHandlerCalled == false) { item.IsInitHandlerCalled = true; itemScript.Init(); } itemScript.SetData(itemData as ChatAudioMessage, index); } return item; } }