NBC修改
This commit is contained in:
@@ -1,196 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using FairyGUI;
|
||||
|
||||
public class EmojiMain : MonoBehaviour
|
||||
{
|
||||
GComponent _mainView;
|
||||
GList _list;
|
||||
GTextInput _input1;
|
||||
GTextInput _input2;
|
||||
GComponent _emojiSelectUI1;
|
||||
GComponent _emojiSelectUI2;
|
||||
|
||||
class Message
|
||||
{
|
||||
public string sender;
|
||||
public string senderIcon;
|
||||
public string msg;
|
||||
public bool fromMe;
|
||||
}
|
||||
List<Message> _messages;
|
||||
|
||||
Dictionary<uint, Emoji> _emojies;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
UIPackage.AddPackage("UI/Emoji");
|
||||
|
||||
UIConfig.verticalScrollBar = "ui://Emoji/ScrollBar_VT";
|
||||
UIConfig.defaultScrollBarDisplay = ScrollBarDisplayType.Auto;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
Application.targetFrameRate = 60;
|
||||
Stage.inst.onKeyDown.Add(OnKeyDown);
|
||||
|
||||
_messages = new List<Message>();
|
||||
|
||||
_mainView = this.GetComponent<UIPanel>().ui;
|
||||
|
||||
_list = _mainView.GetChild("list").asList;
|
||||
_list.SetVirtual();
|
||||
_list.itemProvider = GetListItemResource;
|
||||
_list.itemRenderer = RenderListItem;
|
||||
|
||||
_input1 = _mainView.GetChild("input1").asTextInput;
|
||||
_input1.onKeyDown.Add(__inputKeyDown1);
|
||||
|
||||
_input2 = _mainView.GetChild("input2").asTextInput;
|
||||
_input2.onKeyDown.Add(__inputKeyDown2);
|
||||
|
||||
//作为demo,这里只添加了部分表情素材
|
||||
_emojies = new Dictionary<uint, Emoji>();
|
||||
for (uint i = 0x1f600; i < 0x1f637; i++)
|
||||
{
|
||||
string url = UIPackage.GetItemURL("Emoji", Convert.ToString(i, 16));
|
||||
if (url != null)
|
||||
_emojies.Add(i, new Emoji(url));
|
||||
}
|
||||
_input2.emojies = _emojies;
|
||||
|
||||
_mainView.GetChild("btnSend1").onClick.Add(__clickSendBtn1);
|
||||
_mainView.GetChild("btnSend2").onClick.Add(__clickSendBtn2);
|
||||
|
||||
_mainView.GetChild("btnEmoji1").onClick.Add(__clickEmojiBtn1);
|
||||
_mainView.GetChild("btnEmoji2").onClick.Add(__clickEmojiBtn2);
|
||||
|
||||
_emojiSelectUI1 = UIPackage.CreateObject("Emoji", "EmojiSelectUI").asCom;
|
||||
_emojiSelectUI1.fairyBatching = true;
|
||||
_emojiSelectUI1.GetChild("list").asList.onClickItem.Add(__clickEmoji1);
|
||||
|
||||
_emojiSelectUI2 = UIPackage.CreateObject("Emoji", "EmojiSelectUI_ios").asCom;
|
||||
_emojiSelectUI2.fairyBatching = true;
|
||||
_emojiSelectUI2.GetChild("list").asList.onClickItem.Add(__clickEmoji2);
|
||||
}
|
||||
|
||||
void AddMsg(string sender, string senderIcon, string msg, bool fromMe)
|
||||
{
|
||||
bool isScrollBottom = _list.scrollPane.isBottomMost;
|
||||
|
||||
Message newMessage = new Message();
|
||||
newMessage.sender = sender;
|
||||
newMessage.senderIcon = senderIcon;
|
||||
newMessage.msg = msg;
|
||||
newMessage.fromMe = fromMe;
|
||||
_messages.Add(newMessage);
|
||||
|
||||
if (newMessage.fromMe)
|
||||
{
|
||||
if (_messages.Count == 1 || UnityEngine.Random.Range(0f, 1f) < 0.5f)
|
||||
{
|
||||
Message replyMessage = new Message();
|
||||
replyMessage.sender = "FairyGUI";
|
||||
replyMessage.senderIcon = "r1";
|
||||
replyMessage.msg = "Today is a good day. \U0001f600";
|
||||
replyMessage.fromMe = false;
|
||||
_messages.Add(replyMessage);
|
||||
}
|
||||
}
|
||||
|
||||
if (_messages.Count > 100)
|
||||
_messages.RemoveRange(0, _messages.Count - 100);
|
||||
|
||||
_list.numItems = _messages.Count;
|
||||
|
||||
if (isScrollBottom)
|
||||
_list.scrollPane.ScrollBottom();
|
||||
}
|
||||
|
||||
string GetListItemResource(int index)
|
||||
{
|
||||
Message msg = _messages[index];
|
||||
if (msg.fromMe)
|
||||
return "ui://Emoji/chatRight";
|
||||
else
|
||||
return "ui://Emoji/chatLeft";
|
||||
}
|
||||
|
||||
void RenderListItem(int index, GObject obj)
|
||||
{
|
||||
GButton item = (GButton)obj;
|
||||
Message msg = _messages[index];
|
||||
if (!msg.fromMe)
|
||||
item.GetChild("name").text = msg.sender;
|
||||
item.icon = UIPackage.GetItemURL("Emoji", msg.senderIcon);
|
||||
|
||||
//Recaculate the text width
|
||||
GRichTextField tf = item.GetChild("msg").asRichTextField;
|
||||
tf.emojies = _emojies;
|
||||
tf.text = EmojiParser.inst.Parse(msg.msg);
|
||||
}
|
||||
|
||||
void __clickSendBtn1(EventContext context)
|
||||
{
|
||||
string msg = _input1.text;
|
||||
if (msg.Length == 0)
|
||||
return;
|
||||
|
||||
AddMsg("Unity", "r0", msg, true);
|
||||
_input1.text = "";
|
||||
}
|
||||
|
||||
void __clickSendBtn2(EventContext context)
|
||||
{
|
||||
string msg = _input2.text;
|
||||
if (msg.Length == 0)
|
||||
return;
|
||||
|
||||
AddMsg("Unity", "r0", msg, true);
|
||||
_input2.text = "";
|
||||
}
|
||||
|
||||
void __clickEmojiBtn1(EventContext context)
|
||||
{
|
||||
GRoot.inst.ShowPopup(_emojiSelectUI1, (GObject)context.sender, PopupDirection.Up);
|
||||
}
|
||||
|
||||
void __clickEmojiBtn2(EventContext context)
|
||||
{
|
||||
GRoot.inst.ShowPopup(_emojiSelectUI2, (GObject)context.sender, PopupDirection.Up);
|
||||
}
|
||||
|
||||
void __clickEmoji1(EventContext context)
|
||||
{
|
||||
GButton item = (GButton)context.data;
|
||||
_input1.ReplaceSelection("[:" + item.text + "]");
|
||||
}
|
||||
|
||||
void __clickEmoji2(EventContext context)
|
||||
{
|
||||
GButton item = (GButton)context.data;
|
||||
_input2.ReplaceSelection(Char.ConvertFromUtf32(Convert.ToInt32(UIPackage.GetItemByURL(item.icon).name, 16)));
|
||||
}
|
||||
|
||||
void __inputKeyDown1(EventContext context)
|
||||
{
|
||||
if (context.inputEvent.keyCode == KeyCode.Return)
|
||||
_mainView.GetChild("btnSend1").onClick.Call();
|
||||
}
|
||||
|
||||
void __inputKeyDown2(EventContext context)
|
||||
{
|
||||
if (context.inputEvent.keyCode == KeyCode.Return)
|
||||
_mainView.GetChild("btnSend2").onClick.Call();
|
||||
}
|
||||
|
||||
void OnKeyDown(EventContext context)
|
||||
{
|
||||
if (context.inputEvent.keyCode == KeyCode.Escape)
|
||||
{
|
||||
Application.Quit();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user