You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
7.2 KiB
231 lines
7.2 KiB
4 years ago
|
|
||
|
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<AudioRecorder>();
|
||
|
recorder.Stopped += OnRecorderStopped;
|
||
|
CloseButton.onClick.AddListener(Hide);
|
||
|
listener = ClickEventListener.Get(AudioButton);
|
||
|
listener.SetPointerDownHandler(AudioButtonClickDown);
|
||
|
listener.SetPointerUpHandler(AudioButtonClickUp);
|
||
|
//作战建议初始化
|
||
|
SuggestListView.InitListView(ChatManager.Instance.SuggestChatMsg.Count, OnGetSuggestItemByIndex);
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 语音按钮弹起
|
||
|
/// </summary>
|
||
|
/// <param name="obj"></param>
|
||
|
private void AudioButtonClickUp(GameObject obj)
|
||
|
{
|
||
|
recorder.StopRecorder();
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 语音按钮按下
|
||
|
/// </summary>
|
||
|
/// <param name="obj"></param>
|
||
|
private void AudioButtonClickDown(GameObject obj)
|
||
|
{
|
||
|
|
||
|
if (recorder.Ready)
|
||
|
{
|
||
|
startTime = DateTime.Now;
|
||
|
recorder.StartRecorder();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LoadPromptWin.Instance.LoadTextPromptWindow("没有可用设备", 1f);
|
||
|
}
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 保存音频事件
|
||
|
/// </summary>
|
||
|
/// <param name="segment"></param>
|
||
|
private void OnRecorderStopped(ArraySegment<byte> 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<RectTransform>().sizeDelta = new Vector2(406f, 315f);
|
||
|
SuggestListView.ResetListView();
|
||
|
}
|
||
|
public void ShowNoInput()
|
||
|
{
|
||
|
base.Show();
|
||
|
//TODO 显示指挥界面
|
||
|
InputFiledObject.SetActive(false);
|
||
|
SuggestListView.GetComponent<RectTransform>().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);
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 显示面板
|
||
|
/// </summary>
|
||
|
/// <param name="obj"></param>
|
||
|
//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);
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 获取
|
||
|
/// </summary>
|
||
|
/// <param name="listView"></param>
|
||
|
/// <param name="index"></param>
|
||
|
/// <returns></returns>
|
||
|
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<SuggestTextItem>();
|
||
|
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<ChatAudioItem>();
|
||
|
if (item.IsInitHandlerCalled == false)
|
||
|
{
|
||
|
item.IsInitHandlerCalled = true;
|
||
|
itemScript.Init();
|
||
|
}
|
||
|
itemScript.SetData(itemData as ChatAudioMessage, index);
|
||
|
}
|
||
|
return item;
|
||
|
}
|
||
|
}
|