350 lines
14 KiB
TypeScript
350 lines
14 KiB
TypeScript
// Learn TypeScript:
|
|
// - https://docs.cocos.com/creator/2.4/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - https://docs.cocos.com/creator/2.4/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - https://docs.cocos.com/creator/2.4/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
import Utils from "./module/Pay/Utils";
|
|
import NumberToImage from "./NumberToImage";
|
|
import { MiniGameSdk } from "./Sdk/MiniGameSdk";
|
|
|
|
const { ccclass, property } = cc._decorator;
|
|
|
|
@ccclass
|
|
export default class ranking extends cc.Component {
|
|
@property(cc.SpriteAtlas)
|
|
ui: cc.SpriteAtlas = null;
|
|
@property(cc.Node)
|
|
subContextView: cc.Node = null;
|
|
@property(cc.Node)
|
|
closeButton: cc.Node = null;
|
|
@property(cc.Node)
|
|
btnRanks: cc.Node = null;
|
|
@property(cc.Node)
|
|
selfNode: cc.Node = null;
|
|
@property(cc.SpriteFrame)
|
|
defaultsprite: cc.SpriteFrame = null;
|
|
private isShow: boolean = true;
|
|
wordRank: any[];
|
|
selfInfo: any;
|
|
rankNumber: number = 0;
|
|
_touchCancle: boolean = false;
|
|
// LIFE-CYCLE CALLBACKS:
|
|
onLoad() {
|
|
this.wordRank = [];
|
|
this.selfInfo = null;
|
|
this.rankNumber = 0;
|
|
this._touchCancle = false;
|
|
}
|
|
start() {
|
|
}
|
|
|
|
init(event?: cc.Event, customEventData?: string) {
|
|
let eventName = "";
|
|
let btnName = ""
|
|
if (customEventData !== undefined) {
|
|
btnName = customEventData;
|
|
eventName = "click"
|
|
} else {
|
|
btnName = "btnRank";
|
|
eventName = "auto";
|
|
}
|
|
let dataInfo = {
|
|
interface_id: "ranking", // 界面名称
|
|
reason: eventName, // 事件名称
|
|
is_first_exposure: false, // 是否首次曝光
|
|
entry_point: btnName, // 按钮名称
|
|
}
|
|
cc.fx.GameTool.shushu_Track("interface_exposure", dataInfo);
|
|
|
|
this.openLoad();
|
|
this.btnRanks.active = true;
|
|
let user_Info = cc.fx.StorageMessage.getStorage("user_Info");
|
|
if (user_Info != null && user_Info != undefined && user_Info != "") {
|
|
cc.fx.GameConfig.GM_INFO.username = user_Info.username;
|
|
cc.fx.GameConfig.GM_INFO.useravatar = user_Info.useravatar;
|
|
setTimeout(() => {
|
|
if (!this.node.getChildByName("friend").active) {
|
|
this.onRanksBtnClicked();
|
|
this.node.getChildByName("friend").active = false;
|
|
this.node.getChildByName("word").active = true;
|
|
this.node.getChildByName("word_rank").active = true;
|
|
this.closeFriend();
|
|
}
|
|
else {
|
|
|
|
this._touchCancle = true;
|
|
this.openFriend();
|
|
this.closeWord();
|
|
}
|
|
}, 0);
|
|
}
|
|
else {
|
|
this.onRanksBtnClicked();
|
|
}
|
|
// this.openWord();
|
|
}
|
|
|
|
showRanks() {
|
|
if (typeof wx === 'undefined') {
|
|
return;
|
|
}
|
|
this.closeLoad();
|
|
// 设置容器可见
|
|
this.node.getChildByName("rank").active = true;
|
|
this.subContextView.active = true;
|
|
console.log("展示排行榜");
|
|
// 设置随机数(把这个当做玩家每局结算时的分数)
|
|
|
|
this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport();
|
|
setTimeout(() => {
|
|
console.log('显示排行榜');
|
|
//@ts-ignore
|
|
wx.getOpenDataContext().postMessage({
|
|
message: cc.fx.GameConfig.GM_INFO.openid
|
|
});
|
|
//@ts-ignore
|
|
wx.getOpenDataContext().postMessage({
|
|
message: parseInt(cc.fx.GameConfig.GM_INFO.level)
|
|
});
|
|
this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport();
|
|
}, 200);
|
|
};
|
|
|
|
requestFriendInfo() {
|
|
|
|
}
|
|
|
|
|
|
onRanksBtnClicked() {
|
|
if (typeof wx === 'undefined') {
|
|
this.showRanks(); // 非微信环境直接显示
|
|
return;
|
|
}
|
|
cc.fx.GameTool.getUserAvatar(() => {
|
|
this.showWord(true); // ✅ 授权成功,显示排行榜
|
|
this.isShow = false;
|
|
})
|
|
|
|
}
|
|
protected update(dt: number): void {
|
|
// if (this.isShow) {
|
|
// this.onRanksBtnClicked();
|
|
// }
|
|
}
|
|
|
|
closeRanks() {
|
|
// console.log('关闭排行榜');
|
|
this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport();
|
|
this.closeButton.active = false;
|
|
// 设置容器不可见,即关闭排行榜,并让开放域清空排名信息
|
|
this.node.getChildByName("rank").active = false;
|
|
this.subContextView.active = false;
|
|
//@ts-ignore
|
|
wx.getOpenDataContext().postMessage({
|
|
message: 'close'
|
|
});
|
|
}
|
|
|
|
closeFriend() {
|
|
// console.log('关闭好有排行榜');
|
|
this.subContextView.getComponent(cc.SubContextView).updateSubContextViewport();
|
|
//@ts-ignore
|
|
wx.getOpenDataContext().postMessage({
|
|
message: 'close'
|
|
});
|
|
// 设置容器不可见,即关闭排行榜,并让开放域清空排名信息
|
|
this.node.getChildByName("rank").active = false;
|
|
this.subContextView.active = false;
|
|
|
|
}
|
|
|
|
closeWord() {
|
|
// console.log('关闭世界排行榜');
|
|
this.node.getChildByName("word_rank").active = false;
|
|
}
|
|
|
|
openFriend() {
|
|
if (!this._touchCancle) {
|
|
return;
|
|
}
|
|
console.log("进入好友排行榜");
|
|
if (cc.fx.GameConfig.GM_INFO.wxFriend == true) {
|
|
console.log("已经授权过好友信息");
|
|
this.showRanks();
|
|
}
|
|
else {
|
|
console.log("未授权过好友信息");
|
|
MiniGameSdk.API.getWechatFriend((data) => {
|
|
console.log("获取好友信息成功?", data);
|
|
if (data == true)
|
|
this.showRanks();
|
|
})
|
|
}
|
|
this.node.getChildByName("friend").active = true;
|
|
this.node.getChildByName("word").active = false;
|
|
this.closeWord();
|
|
}
|
|
|
|
openWord() {
|
|
if (!this._touchCancle) {
|
|
return;
|
|
}
|
|
this.node.getChildByName("friend").active = false;
|
|
this.node.getChildByName("word").active = true;
|
|
this.node.getChildByName("word_rank").active = true;
|
|
this.closeFriend();
|
|
this.showWord(false);
|
|
}
|
|
|
|
showWord(type) {
|
|
// console.log("__________进入世界排行榜了");
|
|
if (type) {
|
|
this.wordRank = [];
|
|
|
|
Utils.getRank((data) => {
|
|
this.closeLoad();
|
|
if (data.code == 1) {
|
|
// console.log("获取排行榜数据", data.data.rank);
|
|
this.wordRank = data.data.rank;
|
|
this.rankNumber = data.data.index;
|
|
for (let i = 0; i < this.wordRank.length; i++) {
|
|
this.wordRank[i].rank = i + 1;
|
|
}
|
|
this.node.getChildByName("word_rank").active = true;
|
|
this.setSelfInfo();
|
|
this.node.getChildByName("word_rank").getComponent("RankManager").init(this.wordRank);
|
|
}
|
|
else {
|
|
MiniGameSdk.API.showToast('网络异常,获取排行榜数据失败');
|
|
this.btnRanks.active = false;
|
|
}
|
|
})
|
|
}
|
|
else {
|
|
// console.log("_______________", this.wordRank.length);
|
|
}
|
|
|
|
}
|
|
|
|
openLoad() {
|
|
this.node.parent.getChildByName("Loading").active = true;
|
|
this.node.parent.getChildByName("Loading").getChildByName("load").stopAllActions();
|
|
this.node.parent.getChildByName("Loading").getChildByName("load").runAction(cc.rotateTo(2, 1080).repeatForever());
|
|
}
|
|
|
|
closeLoad() {
|
|
this.node.parent.getChildByName("Loading").active = false;
|
|
this._touchCancle = true;
|
|
}
|
|
|
|
setSelfInfo() {
|
|
console.log("查询自己信息");
|
|
this.selfNode.opacity = 0;
|
|
this.selfInfo = null;
|
|
for (let i = 0; i < this.wordRank.length; i++) {
|
|
if (this.wordRank[i]._id == cc.fx.GameConfig.GM_INFO.uid) {
|
|
console.log("我自己的UID", cc.fx.GameConfig.GM_INFO.uid);
|
|
console.log("排行榜中的ID:", this.wordRank[i]._id);
|
|
// this.selfInfo = this.wordRank[i];
|
|
this.selfInfo = JSON.parse(JSON.stringify(this.wordRank[i]));
|
|
if (this.selfInfo.useravatar == "0" || this.selfInfo.useravatar == "1" || this.selfInfo.useravatar == "2"
|
|
|| this.selfInfo.useravatar == "3" || this.selfInfo.useravatar == "4" || this.selfInfo.useravatar == "5" || this.selfInfo.useravatar == "6"
|
|
|| this.selfInfo.useravatar == "7" || this.selfInfo.useravatar == "8" || this.selfInfo.useravatar == "9" || this.selfInfo.useravatar == "10") {
|
|
this.selfInfo.useravatar = "icon_" + this.selfInfo.useravatar;
|
|
}
|
|
this.selfInfo.useravatarIcon = "kuang_" + (parseInt(this.selfInfo.useravatarIcon) + 1);
|
|
console.log("我自己的信息", this.selfInfo);
|
|
|
|
}
|
|
}
|
|
if (this.selfInfo == null) {
|
|
if (this.rankNumber == -1 || this.rankNumber == 0) {
|
|
this.rankNumber = 9999;
|
|
}
|
|
this.selfInfo = {
|
|
useravatarIcon: cc.fx.GameConfig.GM_INFO.useravaterkuang,
|
|
useravatar: cc.fx.GameConfig.GM_INFO.useravatarIcon,
|
|
username: cc.fx.GameConfig.GM_INFO.username,
|
|
levelAmount: cc.fx.GameConfig.GM_INFO.level,
|
|
rank: this.rankNumber
|
|
}
|
|
this.selfInfo.useravatar = cc.fx.GameConfig.GM_INFO.useravatarIcon;
|
|
this.selfInfo.useravatarIcon = cc.fx.GameConfig.GM_INFO.useravaterkuang;
|
|
}
|
|
|
|
let useravatarIcon = this.selfInfo.useravatarIcon;
|
|
console.log("自己的头像框", useravatarIcon);
|
|
this.selfNode.getChildByName("icon").getComponent(cc.Sprite).spriteFrame =
|
|
this.ui.getSpriteFrame(useravatarIcon);
|
|
this.selfInfo.username = cc.fx.GameTool.subName(this.selfInfo.username, 7);
|
|
let name = this.selfInfo.username;
|
|
if (name == "user") name = "匿名玩家";
|
|
this.selfNode.getChildByName("nameLab").getComponent(cc.Label).string = name + "";
|
|
|
|
NumberToImage.numberToImageNodes3((this.selfInfo.rank), 43, 15, "rank_", this.selfNode.getChildByName("rankLab"), true);
|
|
NumberToImage.numberToImageNodes3(this.selfInfo.levelAmount, 43, 15, "level_", this.selfNode.getChildByName("totalLab"), true);
|
|
if (this.selfInfo.rank == 9999) {
|
|
this.selfNode.getChildByName("rankLab").scaleX = 0.75;
|
|
this.selfNode.getChildByName("rankLab").scaleY = 0.75;
|
|
this.selfNode.getChildByName("add").active = true;
|
|
}
|
|
else this.selfNode.getChildByName("add").active = false;
|
|
// this.node.getChildByName("timeLab").getComponent(cc.Label).string = timeTemp + "";
|
|
this.selfNode.getChildByName("rank").getChildByName("one").active = false;
|
|
this.selfNode.getChildByName("rank").getChildByName("two").active = false;
|
|
this.selfNode.getChildByName("rank").getChildByName("three").active = false;
|
|
if (this.selfInfo.rank == 1) {
|
|
this.selfNode.getChildByName("rank").getChildByName("one").active = true;
|
|
this.selfNode.getChildByName("rankLab").active = false;
|
|
}
|
|
else if (this.selfInfo.rank == 2) {
|
|
this.selfNode.getChildByName("rank").getChildByName("two").active = true;
|
|
this.selfNode.getChildByName("rankLab").active = false;
|
|
}
|
|
else if (this.selfInfo.rank == 3) {
|
|
this.selfNode.getChildByName("rank").getChildByName("three").active = true;
|
|
this.selfNode.getChildByName("rankLab").active = false;
|
|
} else {
|
|
this.selfNode.getChildByName("rankLab").active = true;
|
|
}
|
|
console.log("自己的他头像:", this.selfInfo.useravatar);
|
|
if (this.selfInfo.useravatar == "" || this.selfInfo.useravatar == null || this.selfInfo.useravatar == undefined
|
|
) {
|
|
this.selfNode.getChildByName("pic").getChildByName("pic").getComponent(cc.Sprite).spriteFrame = this.defaultsprite;
|
|
}
|
|
else if (this.selfInfo.useravatar == "icon_0" || this.selfInfo.useravatar == "icon_1" || this.selfInfo.useravatar == "icon_2"
|
|
|| this.selfInfo.useravatar == "icon_3" || this.selfInfo.useravatar == "icon_4" || this.selfInfo.useravatar == "icon_5" || this.selfInfo.useravatar == "icon_6"
|
|
|| this.selfInfo.useravatar == "icon_7" || this.selfInfo.useravatar == "icon_8" || this.selfInfo.useravatar == "icon_9" || this.selfInfo.useravatar == "icon_10") {
|
|
let useravatar = this.selfInfo.useravatar;
|
|
this.selfNode.getChildByName("pic").getChildByName("pic").getComponent(cc.Sprite).spriteFrame = this.ui.getSpriteFrame(useravatar);
|
|
}
|
|
else this.setPic();
|
|
this.selfNode.opacity = 255;
|
|
}
|
|
|
|
public setPic() {
|
|
// console.log("设置头像:", this.selfInfo.useravatar);
|
|
// this.node.getChildByName("pic").getChildByName("icon").active = false;
|
|
this.selfNode.getChildByName("pic").active = false;
|
|
var self = this;
|
|
let url = this.selfInfo.useravatar;
|
|
|
|
cc.assetManager.loadRemote(url, { ext: '.png' }, (err, texture: cc.Texture2D) => {
|
|
if (texture) {
|
|
this.selfNode.getChildByName("pic").active = true;
|
|
var sprite = this.selfNode.getChildByName("pic").getChildByName("pic").getComponent(cc.Sprite);
|
|
sprite.spriteFrame = new cc.SpriteFrame(texture);
|
|
// console.log(this.data.rank,"设置头像成功",err);
|
|
}
|
|
else {
|
|
// console.log("设置头像失败",url);
|
|
// console.log(err, texture)
|
|
}
|
|
})
|
|
}
|
|
|
|
// update (dt) {}
|
|
}
|