DelayNoMore/frontend/assets/scripts/ResultPanel.js
2023-01-18 12:22:12 +08:00

104 lines
2.4 KiB
JavaScript

const i18n = require('LanguageData');
i18n.init(window.language); // languageID should be equal to the one we input in New Language ID input field
cc.Class({
extends: cc.Component,
properties: {
onCloseDelegate: {
type: cc.Object,
default: null
},
onAgainClicked: {
type: cc.Object,
default: null
},
rankingNodes: {
type: [cc.Node],
default: [],
},
winNode: {
type: cc.Node,
default: null,
},
},
// LIFE-CYCLE CALLBACKS:
onLoad() {
},
againBtnOnClick(evt) {
this.onClose();
if (!this.onAgainClicked) return;
this.onAgainClicked();
},
homeBtnOnClick(evt) {
this.onClose();
window.clearLocalStorageAndBackToLoginScene();
},
showPlayerInfo(playerRichInfoDict) {
this.showRanking(playerRichInfoDict);
},
showRanking(playerRichInfoDict) {
const self = this;
const sortablePlayers = [];
for (let playerId in playerRichInfoDict) {
const p = playerRichInfoDict[playerId];
p.id = playerId;
if (null == p.score) {
p.score = playerRichInfoDict[playerId].score;
}
if (null == p.score) {
p.score = 0;
}
sortablePlayers.push(p);
}
const sortedPlayers = sortablePlayers.sort((a, b) => {
if (a.score != b.score) {
return (b.score - a.score);
} else {
return (a.id > b.id);
}
});
const selfPlayerInfo = JSON.parse(cc.sys.localStorage.getItem('selfPlayer'));
for (let k in sortedPlayers) {
const p = sortedPlayers[k];
const nameToDisplay = (() => {
function isEmptyString(str) {
return str == null || str == '';
}
if (!isEmptyString(p.displayName)) {
return p.displayName;
} else if (!isEmptyString(p.name)) {
return p.name;
} else {
return "";
}
})();
if (selfPlayerInfo.playerId == p.id) {
const rank = k + 1;
if (1 != rank && null != self.winNode) {
self.winNode.active = false;
}
}
self.rankingNodes[k].getChildByName('name').getComponent(cc.Label).string = nameToDisplay;
self.rankingNodes[k].getChildByName('score').getComponent(cc.Label).string = playerRichInfoDict[p.id].score;
}
},
onClose(evt) {
if (this.node.parent) {
this.node.parent.removeChild(this.node);
}
if (!this.onCloseDelegate) {
return;
}
this.onCloseDelegate();
}
});