123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- var RankItem = require('./rankitem.js').RankItem;
- var Label = require('./libs/label.js').Label;
- var Sprite = require('./libs/sprite.js').Sprite;
- var BottomScoreItem = require('./bottomscoreitem.js').BottomScoreItem;
- const PAGE_SIZE = 5;
- const ITEM_WIDTH =600;// 608;
- //100
- const ITEM_HEIGHT = 65;//126;
- //270
- const offsetY = 220;
- //间距
- const itemGap = 15;
- //1150
- const ownerY= 1150;
- const pageTextY=1250;
- var offsetX = 0;
- var canvawidth = 0;
- var canvaheight = 0;
- var normal_scale = 1;
- var swidth = 630;
- var sheight = 800;
- var friends_scores = [];
- //总排行数据 可为群或者好友
- var group_scores = [];
- //周排行数据 可为群或者好友
- var group_week_scores = [];
- var current_scores = [];
- var moveoffset = 0; //滑动偏移
- var allHeight = 0; //整个排行榜高
- var worldData;
- var isworldRank = false;
- const dataSorter = (gameDatas, filed = "Level") => {
- console.log("玩家信息----",gameDatas);
- return gameDatas.sort((a, b) => {
- const kvDataA = a.KVDataList.find(kvData => kvData.key == filed);
- const kvDataB = b.KVDataList.find(kvData => kvData.key == filed);
- console.log("玩家分数为------------");
- var stageA = JSON.parse(kvDataA.value).wxgame.Level;
-
- var stageB = JSON.parse(kvDataB.value).wxgame.Level;
- const gradeA = kvDataA ? parseInt(stageA || 0) : 0;
- const gradeB = kvDataB ? parseInt(stageB || 0) : 0;
- return gradeA > gradeB ? -1 : gradeA < gradeB ? 1 : 0;
- });
- }
- let myInfo;
- let avatarUrl;
- //获取个人信息
- wx.getUserInfo({
- openIdList: ["selfOpenId"],
- success: function (res) {
- myInfo = res.data[0];
- avatarUrl = myInfo.avatarUrl;
- console.log(myInfo);
- }
- })
- var adpater = 0;
- var h;//宽
- var v;//高
- class RankListRenderer {
- constructor() {
- this.totalPage = 0;
- this.currPage = 0;
- this.keyName = "";
- this.rankitemArr = [];
- this.init();
- this.sys_info = wx.getSystemInfoSync();
- }
- init() {
- this.canvas = wx.getSharedCanvas();
- this.ctx = this.canvas.getContext('2d');
- this.ctx.imageSmoothingEnabled = true;
- this.ctx.imageSmoothingQuality = "high";
- this.rankcanvas = wx.createCanvas();
- this.rankctx = this.rankcanvas.getContext('2d');
- }
- listen() {
- wx.onMessage(msg => {
- console.log(msg);
- switch (msg.action) {
- case "canvase_width_height":
- console.log(msg.data.width, msg.data.height);
- canvawidth = msg.data.width;
- canvaheight = msg.data.height;
- v = canvaheight / this.screenHeight;
- h = canvawidth / this.sys_info.screenWidth;
-
- offsetX = (canvawidth - ITEM_WIDTH) * 0.5 * normal_scale;
- this.rankcanvas.width = canvawidth;
- this.rankcanvas.height = canvaheight;
- break;
- case "clearctx":
- this.rankctx.clearRect(0, 0, canvawidth, canvaheight);
- break;
- case "get_friend_storage":
- this.getFriendStorage(msg.keyName);
- break;
- case "show_friend_rank":
- console.log("keyname111111", msg.keyName);
- this.keyName = msg.keyName;
- this.fetchFriendData(msg.keyName);
- isworldRank = false;
- this.currPage = 0;
- break;
- case "show_group_rank":
- console.log("show_group_rank", msg.data);
- if (!msg.data) return;
- this.keyName = msg.keyName;
- this.fetchGroupData(msg.keyName, msg.data);
- break;
- case "show_world_rank":
- console.log("show_group_rank", msg.data);
- if (!msg.data) return;
- this.keyName = msg.keyName;
- worldData = msg.data;
- this.totalPage = Math.ceil(worldData["list"].length / PAGE_SIZE);
- isworldRank = true;
- this.showWorldRanks(0);
- break;
- case "show_min_rank":
- this.keyName = msg.keyName;
- this.drawMinRank(msg.keyName, msg.data);
- break;
- case "show_up_page":
- if (!isworldRank && !current_scores.length) {
- return;
- }
- if (isworldRank && !worldData["list"].length) {
- return;
- } {
- let page = this.currPage;
- page -= 1;
- if (page < 0) page = 0;
- if (this.currPage > page) {
- this.currPage = page;
- if (isworldRank == false)
- this.showRanks(this.currPage);
- else this.showWorldRanks(this.currPage);
- }
- }
- break;
- case "show_next_page":
- if (!isworldRank) {
- if (!current_scores.length) return;
- } else {
- if (!worldData["list"].length) return;
- } {
- let page = this.currPage;
- page += 1;
- if (this.totalPage <= page) page = this.totalPage - 1;
- if (this.currPage < page) {
- this.currPage = page;
- if (isworldRank == false)
- this.showRanks(this.currPage);
- else this.showWorldRanks(this.currPage);
- }
- }
- break;
- default:
- console.log(`未知消息类型:msg.action=${msg.action}`);
- break;
- }
- });
- }
- fetchFriendData(keyName) {
- wx.getFriendCloudStorage({
- keyList: [
- keyName,
- ],
- success: res => {
- console.log("wx.getFriendCloudStorage success", res);
- const dataLen = res.data.length;
- friends_scores = dataSorter(res.data, keyName);
- console.log("Sort success", friends_scores);
- current_scores = friends_scores;
- this.totalPage = Math.ceil(current_scores.length / PAGE_SIZE);
- console.log(" this.totalPage", this.totalPage);
- if (dataLen) {
- this.showRanks(0);
- }
- },
- fail: res => {
- console.log("wx.getFriendCloudStorage fail", res);
- },
- });
- }
- showRanks(page) {
- const startIndex = page * PAGE_SIZE;
- const stopIndex = startIndex + PAGE_SIZE;
- const datas = current_scores.slice(startIndex, stopIndex);
- let x = 0;
- if (this.sys_info.model.match("iPhone X")) {
- x = 110
- }
- this.ctx.clearRect(0, 0, canvawidth, canvaheight);
- for (let i = 0, len = datas.length; i < len; i++) {
- let data = datas[i];
- const nick = data.nickname.length <= 5 ? data.nickname : data.nickname.substr(0, 5) + "...";
- const kvData = data.KVDataList.find(kvData => kvData.key == this.keyName);
- const itemGapY = (ITEM_HEIGHT + itemGap) * i + offsetY;
- const avatarUrl = data.avatarUrl;
-
- const grade = kvData ? this.max_crossed_stage(kvData.value) : 0;
- let rankItem = this.rankitemArr[i];
- if (rankItem == null) {
- rankItem = new RankItem(offsetX, itemGapY, ITEM_WIDTH, ITEM_HEIGHT);
- this.rankitemArr.push(rankItem);
- rankItem.create();
- }
- rankItem.setData(i + startIndex + 1, avatarUrl, nick, grade, this.keyName);
- rankItem.drawToCanvas(this.ctx);
- console.log("offsetY", offsetY);
- }
- // let page_y = canvaheight - 360;
- // let pageLabel = new Label(canvawidth * 0.5-40 , pageTextY);
- // pageLabel.fontSize = "45px"
- // pageLabel.fillStyle = "#ffffff";
- // pageLabel.text = `${this.currPage + 1} / ${this.totalPage}`;
- // pageLabel.drawToCanvas(this.ctx);
- this.showBottomOwner();
- }
- max_crossed_stage(value)
- {
- return parseInt(JSON.parse(value).wxgame.Level);
- }
- showBottomOwner() {
- let grade = 0;
- let mydata;
- let ranking=0;
- for (let i = current_scores.length - 1; i >= 0; i--) {
- let data = current_scores[i];
- if (data.avatarUrl == avatarUrl) {
- mydata = data;
- ranking=i+1;
- break;
- }
- }
- let kvData = mydata.KVDataList.find(kvData => kvData.key == this.keyName);
- grade = kvData ? this.max_crossed_stage(kvData.value) : 0;
- if (this.ownerItem == null) {
- //this.ownerItem = new BottomScoreItem(offsetX, 1040 + adpater, ITEM_WIDTH, ITEM_HEIGHT);
- this.ownerItem = new BottomScoreItem(offsetX, ownerY, ITEM_WIDTH, ITEM_HEIGHT);
- this.ownerItem.create();
- }
- console.log(mydata.nickname);
- console.log(grade);
- //this.ownerItem.setData( mydata.nickname, avatarUrl, grade);
- this.ownerItem.setData(ranking, mydata.nickname, avatarUrl, grade);
- this.ownerItem.drawToCanvas(this.ctx);
- }
- showWorldRanks(page) {
- const startIndex = page * PAGE_SIZE;
- const stopIndex = startIndex + PAGE_SIZE;
- const datas = worldData["list"].slice(startIndex, stopIndex);
- console.log("datas", datas);
- let x = 0;
- if (this.sys_info.model.match("iPhone X")) {
- x = 110
- }
- this.ctx.clearRect(0, 0, canvawidth, canvaheight);
- for (let i = 0, len = datas.length; i < len; i++) {
- let data = datas[i];
- let nick = data.nickname.length <= 10 ? data.nickname : data.nickname.substr(0, 10) + "...";
- nick = nick == "" ? "游客" : nick
- const itemGapY = (ITEM_HEIGHT + 6) * i + offsetY;
- const avatarUrl = data.avatar;
- const grade = data.score;
- let rankItem = this.rankitemArr[i];
- if (rankItem == null) {
- rankItem = new RankItem(offsetX, itemGapY, ITEM_WIDTH, ITEM_HEIGHT);
- this.rankitemArr.push(rankItem);
- rankItem.create();
- }
- rankItem.position(offsetX, itemGapY);
- rankItem.setData(i + startIndex + 1, avatarUrl, nick, grade, this.keyName);
- rankItem.drawToCanvas(this.ctx);
- console.log("offsetY", offsetY);
- }
- let page_y = canvaheight - 360;
- let pageLabel = new Label(canvawidth * 0.5 - 60, page_y);
- pageLabel.fontSize = "35px"
- pageLabel.fillStyle = "#ffffff";
- pageLabel.text = `${this.currPage + 1} / ${this.totalPage}`;
- pageLabel.drawToCanvas(this.ctx);
- this.showBottomOwner();
- }
- fetchGroupData(keyName, shareTicket) {
- //取出群同玩成员数据
- wx.getGroupCloudStorage({
- shareTicket,
- keyList: [
- keyName,
- ],
- success: res => {
- console.log("wx.getGroupCloudStorage success", res);
- const dataLen = res.data.length;
- group_scores = dataSorter(res.data, keyName);
- current_scores = group_scores;
- this.totalPage = Math.ceil(current_scores.length / PAGE_SIZE);
- console.log(" this.totalPage", this.totalPage);
- if (dataLen) {
- this.showRanks(0);
- }
- },
- fail: res => {
- console.log("wx.getGroupCloudStorage fail", res);
- },
- });
- }
- drawMinRank(keyName, shareTicket) {
- wx.getFriendCloudStorage({
- keyList: [
- keyName,
- ],
- success: res => {
- console.log("wx.getFriendCloudStorage success", res);
- const dataLen = res.data.length;
- friends_scores = dataSorter(res.data, keyName);
- current_scores = friends_scores;
- this.totalPage = Math.ceil(current_scores.length / PAGE_SIZE);
- console.log(" this.totalPage", this.totalPage);
- if (dataLen) this.showMinRanks();
- },
- fail: res => {
- console.log("wx.getFriendCloudStorage fail", res);
- },
- });
- }
- getFriendStorage(keyName) {
- wx.getFriendCloudStorage({
- keyList: [
- keyName,
- ],
- success: res => {
- console.log("wx.getFriendCloudStorage success", res);
- const dataLen = res.data.length;
- friends_scores = dataSorter(res.data, keyName);
- current_scores = friends_scores;
- console.log(" this.totalPage", this.totalPage);
- },
- fail: res => {
- console.log("wx.getFriendCloudStorage fail", res);
- },
- });
- }
- }
- let ranklist = new RankListRenderer();
- ranklist.listen();
|