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.
264 lines
7.7 KiB
264 lines
7.7 KiB
using Assets.Scripts.Common.ChatSystem; |
|
|
|
using AX.NetworkSystem; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using System.Linq; |
|
using UnityEngine; |
|
using UnityEngine.UI; |
|
using SuperScrollView; |
|
using AX.MessageSystem; |
|
using Tween; |
|
|
|
public class ChatPanel : UIView |
|
{ |
|
//无限循环ListView |
|
public LoopListView2 MyList; |
|
//输入框数据 |
|
public InputField ChatInputField; |
|
// 频道按钮 |
|
public GameObject ChannelButtons; |
|
// |
|
public CommonButton HideButton; |
|
public CommonButton ShowButton; |
|
//录音机 |
|
private AudioRecorder recorder; |
|
|
|
private string fileName; |
|
|
|
private TimeSpan time; |
|
private DateTime startTime; |
|
|
|
public override UIViewType ViewType |
|
{ |
|
get |
|
{ |
|
return UIViewType.Normal; |
|
} |
|
} |
|
public void ShowLongSize() |
|
{ |
|
Show(); |
|
ChannelButtons.SetActive(false); |
|
(transform as RectTransform).sizeDelta = new Vector2(1260, 226); |
|
MyList.ResetListView(); |
|
UpdateUI(); |
|
} |
|
public void ShowShortSize() |
|
{ |
|
Show(); |
|
// 调整层次到最后 |
|
transform.SetAsFirstSibling(); |
|
HideButton.gameObject.SetActive(true); |
|
ChannelButtons.SetActive(true); |
|
(transform as RectTransform).sizeDelta = new Vector2(600, 315); |
|
MyList.ResetListView(); |
|
UpdateUI(); |
|
//①提升战术素养 (<color=#a40e24>27</color>) ②提升战术协同 (<color=#f80c2e>25</color>) ③购买车辆 (<color=#fb435d>11</color>) |
|
} |
|
// 显示指挥中心聊天尺寸 |
|
public void ShowCommandCenterSize() |
|
{ |
|
Show(); |
|
// 调整层次到最后 |
|
HideButton.gameObject.SetActive(true); |
|
ChannelButtons.SetActive(true); |
|
(transform as RectTransform).sizeDelta = new Vector2(600, 315); |
|
MyList.ResetListView(); |
|
UpdateUI(); |
|
} |
|
/// <summary> |
|
/// 显示出警聊天尺寸 |
|
/// </summary> |
|
public void ShowPoliceSize() |
|
{ |
|
Show(); |
|
ChannelButtons.SetActive(false); |
|
(transform as RectTransform).sizeDelta = new Vector2(810, 226); |
|
MyList.ResetListView(); |
|
UpdateUI(); |
|
} |
|
private void Awake() |
|
{ |
|
ChatManager.Instance.InitPublicChatMsgs(); |
|
MyList.InitListView(ChatManager.Instance.GetMsgsCountFromCurrentPublicChannel(), SetPublicMsgData); |
|
|
|
HideButton.OnClicked = HideButton_OnClicked; |
|
ShowButton.OnClicked = ShowButton_OnClicked; |
|
} |
|
|
|
private void ShowButton_OnClicked(CommonButton obj) |
|
{ |
|
ShowButton.gameObject.SetActive(false); |
|
RectTransform rect = transform as RectTransform; |
|
rect.TnUguiMove(new Vector3(86, 16, 0), 1) |
|
.SetEase(Ease.InOutBack) |
|
.SetCallBack(x => HideButton.gameObject.SetActive(true)); |
|
} |
|
|
|
private void HideButton_OnClicked(CommonButton obj) |
|
{ |
|
HideButton.gameObject.SetActive(false); |
|
RectTransform rect = transform as RectTransform; |
|
rect.TnUguiMove(new Vector3(-rect.sizeDelta.x, 16, 0), 1) |
|
.SetEase(Ease.InBack) |
|
.SetCallBack(x => ShowButton.gameObject.SetActive(true)); |
|
} |
|
|
|
private void Start() |
|
{ |
|
recorder = GetComponent<AudioRecorder>(); |
|
recorder.Stopped += OnRecorderStopped; |
|
|
|
} |
|
//更新Item |
|
private LoopListViewItem2 SetPublicMsgData(LoopListView2 listView, int index) |
|
{ |
|
// 获取数据 |
|
ChatMessage itemData = ChatManager.Instance.GetCurrentPublicChatMsgByIndex(index); |
|
LoopListViewItem2 item = null; |
|
// 判断数据的类型 |
|
if (itemData is ChatTextMessage) |
|
{ |
|
ChatTextMessage msg = itemData as ChatTextMessage; |
|
item = listView.NewListViewItem("ChatTextItem"); |
|
ChatTextItem itemScript = item.GetComponent<ChatTextItem>(); |
|
if (item.IsInitHandlerCalled == false) |
|
{ |
|
item.IsInitHandlerCalled = true; |
|
itemScript.Init(); |
|
} |
|
itemScript.SetData(msg, index); |
|
} |
|
else if (itemData is ChatAudioMessage) |
|
{ |
|
ChatAudioMessage msg = itemData as ChatAudioMessage; |
|
item = listView.NewListViewItem("ChatAudioItem"); |
|
ChatAudioItem itemScript = item.GetComponent<ChatAudioItem>(); |
|
if (item.IsInitHandlerCalled == false) |
|
{ |
|
item.IsInitHandlerCalled = true; |
|
itemScript.Init(); |
|
} |
|
itemScript.SetData(msg, index); |
|
} |
|
return item; |
|
} |
|
private void OnEnable() |
|
{ |
|
MessageDispatcher.AddListener(MessageName.RefreshPublicChatMsgs.ToString(), RefreshPublicChatMsgs); |
|
} |
|
private void OnDisable() |
|
{ |
|
MessageDispatcher.RemoveListener(MessageName.RefreshPublicChatMsgs.ToString(), RefreshPublicChatMsgs); |
|
} |
|
|
|
private void RefreshPublicChatMsgs(IMessage obj) |
|
{ |
|
UpdateUI(); |
|
} |
|
|
|
public override void OnDestroy() |
|
{ |
|
base.OnDestroy(); |
|
recorder.Stopped -= OnRecorderStopped; |
|
#if !UNITY_EDITOR |
|
//销毁聊天数据 |
|
ChatManager.Instance.ClearPublicChatMsgs(); |
|
#endif |
|
|
|
} |
|
/// <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.SendPublicAudioChatMessage(fileName, time); |
|
// 输入框获取焦点 |
|
ChatInputField.ActivateInputField(); |
|
} |
|
|
|
private void Update() |
|
{ |
|
if (Input.GetKeyDown(KeyCode.Return)) |
|
{ |
|
InputFieldEnter(); |
|
} |
|
} |
|
/// <summary> |
|
/// 更新UI |
|
/// </summary> |
|
public void UpdateUI() |
|
{ |
|
int count = ChatManager.Instance.GetMsgsCountFromCurrentPublicChannel(); |
|
MyList.SetListItemCount(count, false); |
|
MyList.MovePanelToItemIndex(count, 0); |
|
} |
|
/// <summary> |
|
/// 移动到指定位置 |
|
/// </summary> |
|
/// <param name="index"></param> |
|
public void MoveTo(int index) |
|
{ |
|
MyList.MovePanelToItemIndex(index, 0); |
|
} |
|
/// <summary> |
|
/// 发送文本消息 |
|
/// </summary> |
|
public void InputFieldEnter() |
|
{ |
|
string inputText = ChatInputField.text; |
|
ChatInputField.text = null; |
|
if (!string.IsNullOrEmpty(inputText)) |
|
{ |
|
//向服务器发送公聊文本消息 |
|
ChatManager.Instance.SendPublicTextChatMessage(inputText); |
|
} |
|
// 输入框获取焦点 |
|
ChatInputField.ActivateInputField(); |
|
} |
|
/// <summary> |
|
/// 弹起语音按钮 |
|
/// </summary> |
|
public void AudioFieldEnterUp() |
|
{ |
|
recorder.StopRecorder(); |
|
//// 结束记录语音时间 |
|
//time = DateTime.Now - startTime; |
|
//ChatManager.Instance.SendPublicAudioChatMessage(fileName, time); |
|
} |
|
/// <summary> |
|
/// 按下语音按钮 |
|
/// </summary> |
|
public void AudioFieldEnterDown() |
|
{ |
|
|
|
if (recorder.Ready) |
|
{ |
|
startTime = DateTime.Now; |
|
// 开始记录语音事件 |
|
recorder.StartRecorder(); |
|
} |
|
else |
|
{ |
|
LoadPromptWin.Instance.LoadTextPromptWindow("没有可用设备", 1f); |
|
} |
|
} |
|
}
|
|
|