151 lines
3.8 KiB
JavaScript
151 lines
3.8 KiB
JavaScript
const { default: VIPUtil } = require("../ts/game/role/VIPUtil");
|
||
|
||
cc.Class({
|
||
extends: cc.Component,
|
||
|
||
properties: {
|
||
scrollNode: cc.Node,
|
||
contentNode: cc.Node,
|
||
chatPanel: cc.Prefab,
|
||
joinTeamBg:cc.SpriteFrame,
|
||
fontRes:cc.Font
|
||
},
|
||
|
||
onLoad() {
|
||
this.chatItemList = [];
|
||
// 聊天緩存
|
||
this.maxItems = 100;
|
||
this.chatItemNodes = [];
|
||
this.scrollNode.on('scroll-began', this.scrollBegan.bind(this));
|
||
this.scrollNode.on('scroll-ended', this.scrollEnded.bind(this));
|
||
this.scrollNode.on('touch-up', this.touchUp.bind(this));
|
||
this.beganPos = this.contentNode.y;
|
||
},
|
||
|
||
scrollBegan(event) {
|
||
this.beganPos = this.contentNode.y;
|
||
},
|
||
|
||
scrollEnded(event) {
|
||
this.beganPos = this.contentNode.y;
|
||
},
|
||
|
||
touchUp(event) {
|
||
if (Math.abs(this.contentNode.y - this.beganPos) < 4) {
|
||
let parent = cc.find('Canvas');
|
||
if (parent.getChildByName('ChatPanel') == null) {
|
||
let panel = cc.instantiate(this.chatPanel);
|
||
panel.parent = parent;
|
||
panel.getComponent('ChatPanel').loadListInfo(this.chatItemList);
|
||
this.scheduleOnce(() => {
|
||
panel.x = panel.y = 0;
|
||
}, 0);
|
||
}
|
||
}
|
||
},
|
||
|
||
onChatBtnClicked(e, d) {
|
||
let parent = cc.find('Canvas');
|
||
if (parent.getChildByName('ChatPanel') == null) {
|
||
let panel = cc.instantiate(this.chatPanel);
|
||
panel.x = panel.y = 0;
|
||
panel.parent = parent;
|
||
panel.getComponent('ChatPanel').loadListInfo(this.chatItemList);
|
||
this.scheduleOnce(() => {
|
||
panel.x = panel.y = 0;
|
||
}, 0);
|
||
}
|
||
},
|
||
|
||
addListInfo(info) {
|
||
if (info.scale == 5) {
|
||
this.fixChatItem(info.roleid);
|
||
return;
|
||
}
|
||
this.chatItemList.push(info);
|
||
this.addChatItem(info);
|
||
// console.log(this.chatItemList)
|
||
if (this.chatItemList.length > this.maxItems) {
|
||
this.delFirstChatItem();
|
||
this.chatItemList.shift();
|
||
}
|
||
},
|
||
|
||
delFirstChatItem() {
|
||
let delItem = this.chatItemNodes.shift();
|
||
if (delItem) {
|
||
this.contentNode.height -= delItem.height;
|
||
for (const item of this.chatItemNodes) {
|
||
item.y += delItem.height;
|
||
}
|
||
delItem.destroy();
|
||
}
|
||
},
|
||
|
||
addChatItem(info) {
|
||
if (info.msg.length < 0 && info.voice < 0) {
|
||
return;
|
||
}
|
||
|
||
let self = this;
|
||
let vipLevel = VIPUtil.getVipLevel(info.chargesum || 0);
|
||
|
||
cc.loader.loadRes('Common/ChatEmoji', cc.SpriteAtlas, function (err, atlas) {
|
||
let chatItem = new cc.Node();
|
||
chatItem.parent = self.contentNode;
|
||
let richText = chatItem.addComponent('CustomRichText');
|
||
richText.maxWidth = self.contentNode.width - 6;
|
||
richText.fontSize = 18;
|
||
richText.font = self.fontRes;
|
||
richText.lineHeight = 20;
|
||
richText.type = 1;
|
||
richText.scale = info.scale;
|
||
richText.vipLevel = vipLevel;
|
||
richText.rolename = info.name;
|
||
richText.emojiAtlas = atlas;
|
||
richText.joinTeamBg = self.joinTeamBg;
|
||
if (info.msg.length > 0) {
|
||
// console.log(richText)
|
||
richText.string = info.msg;
|
||
} else {
|
||
if (info.voice >= 0) {
|
||
richText.string = '[語音消息]';
|
||
}
|
||
}
|
||
chatItem.roleid = info.roleid;
|
||
chatItem.x = 5;
|
||
let blankHeight = self.contentNode.height;
|
||
if (self.chatItemNodes[0]) {
|
||
blankHeight = -self.chatItemNodes[0].y;
|
||
}
|
||
if (chatItem.height > blankHeight) {
|
||
self.contentNode.height += chatItem.height - blankHeight;
|
||
for (const item of self.chatItemNodes) {
|
||
item.y += blankHeight;
|
||
}
|
||
}
|
||
else {
|
||
for (const item of self.chatItemNodes) {
|
||
item.y += chatItem.height;
|
||
}
|
||
}
|
||
chatItem.y = -self.contentNode.height + chatItem.height;
|
||
self.chatItemNodes.push(chatItem);
|
||
if (self.contentNode.y > self.contentNode.height - self.contentNode.parent.height - chatItem.height - 20) {
|
||
self.contentNode.y = self.contentNode.height - self.contentNode.parent.height;
|
||
self.beganPos = self.contentNode.y;
|
||
}
|
||
});
|
||
},
|
||
|
||
fixChatItem(roleid) {
|
||
for (const chatitem of this.chatItemNodes) {
|
||
if (chatitem.roleid == roleid) {
|
||
let richText = chatitem.getComponent('CustomRichText');
|
||
richText.string = '給全體玩家拜年啦! ! ! ';
|
||
}
|
||
}
|
||
},
|
||
|
||
});
|