2024-11-13 16:56:37 +08:00

150 lines
5.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint-disable indent */
import { getFriendRankData, getGroupFriendsRankData, setUserRecord } from './data/index';
import getFriendRankXML from './render/tpls/friendRank';
import getFriendRankStyle from './render/styles/friendRank';
import getTipsXML from './render/tpls/tips';
import getTipsStyle from './render/styles/tips';
import { showLoading } from './loading';
const Layout = requirePlugin('Layout').default;
const RANK_KEY = 'user_rank';
const sharedCanvas = wx.getSharedCanvas();
const sharedContext = sharedCanvas.getContext('2d');
// test
setUserRecord(RANK_KEY, Math.ceil(Math.random() * 1000));
const MessageType = {
WX_RENDER: 'WXRender',
WX_DESTROY: 'WXDestroy',
SHOW_FRIENDS_RANK: 'showFriendsRank',
SHOW_GROUP_FRIENDS_RANK: 'showGroupFriendsRank',
SET_USER_RECORD: 'setUserRecord',
};
/**
* 绑定邀请好友事件
* 温馨提示,这里仅仅是示意,请注意修改 shareMessageToFriend 参数
*/
const initShareEvents = () => {
// 绑定邀请
const shareBtnList = Layout.getElementsByClassName('shareToBtn');
shareBtnList
&& shareBtnList.forEach((item) => {
item.on('click', () => {
if (item.dataset.isSelf === 'false') {
wx.shareMessageToFriend({
openId: item.dataset.id,
title: '最强战力排行榜!谁是第一?',
imageUrl: 'https://mmgame.qpic.cn/image/5f9144af9f0e32d50fb878e5256d669fa1ae6fdec77550849bfee137be995d18/0',
});
}
});
});
};
/**
* 初始化开放域,主要是使得 Layout 能够正确处理跨引擎的事件处理
* 如果游戏里面有移动开放数据域对应的 RawImage也需要抛事件过来执行Layout.updateViewPort
*/
const initOpenDataCanvas = async (data) => {
Layout.updateViewPort({
x: data.x / data.devicePixelRatio,
y: data.y / data.devicePixelRatio,
width: data.width / data.devicePixelRatio,
height: data.height / data.devicePixelRatio,
});
};
// 给定 xml 和 style渲染至 sharedCanvas
function LayoutWithTplAndStyle(xml, style) {
Layout.clear();
Layout.init(xml, style);
Layout.layout(sharedContext);
console.log(Layout);
}
// 仅仅渲染一些提示,比如数据加载中、当前无授权等
function renderTips(tips = '') {
LayoutWithTplAndStyle(getTipsXML({
tips,
}), getTipsStyle({
width: sharedCanvas.width,
height: sharedCanvas.height,
}));
}
// 将好友排行榜数据渲染在 sharedCanvas
async function renderFriendsRank() {
showLoading();
try {
const data = await getFriendRankData(RANK_KEY);
if (!data.length) {
renderTips('暂无好友数据');
return;
}
LayoutWithTplAndStyle(getFriendRankXML({
data,
}), getFriendRankStyle({
width: sharedCanvas.width,
height: sharedCanvas.height,
}));
initShareEvents();
}
catch (e) {
console.error('renderFriendsRank error', e);
renderTips('请进入设置页允许获取微信朋友信息');
}
}
// 渲染群排行榜
async function renderGroupFriendsRank(shareTicket) {
showLoading();
try {
const data = await getGroupFriendsRankData(shareTicket, RANK_KEY);
if (!data.length) {
renderTips('暂无群同玩好友数据');
return;
}
LayoutWithTplAndStyle(getFriendRankXML({
data,
}), getFriendRankStyle({
width: sharedCanvas.width,
height: sharedCanvas.height,
}));
}
catch (e) {
renderTips('群同玩好友数据加载失败');
}
}
function main() {
wx.onMessage((data) => {
console.log('[WX OpenData] onMessage', data);
if (typeof data === 'string') {
try {
// eslint-disable-next-line no-param-reassign
data = JSON.parse(data);
}
catch (e) {
console.error('[WX OpenData] onMessage data is not a object');
return;
}
}
switch (data.type) {
// 来自 WX Unity SDK 的信息
case MessageType.WX_RENDER:
initOpenDataCanvas(data);
break;
// 来自 WX Unity SDK 的信息
case MessageType.WX_DESTROY:
Layout.clearAll();
break;
// 下面为业务自定义消息
case MessageType.SHOW_FRIENDS_RANK:
renderFriendsRank();
break;
case MessageType.SHOW_GROUP_FRIENDS_RANK:
renderGroupFriendsRank(data.shareTicket);
break;
case MessageType.SET_USER_RECORD:
setUserRecord(RANK_KEY, data.score);
break;
default:
console.error(`[WX OpenData] onMessage type 「${data.type}」 is not supported`);
break;
}
});
}
main();