Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a96ea74205 | |||
| f46b37ec39 | |||
| 33d60c77be | |||
| 38ea96f3c2 | |||
| 3bd903bf66 | |||
| f95d0be231 | |||
| 666120de80 | |||
| 2be3daa548 | |||
| 9034584856 | |||
| bb97bf57dd | |||
| 9109cb225e | |||
| fb72706ade | |||
| 79990a2ae8 | |||
| 034832d913 | |||
| 1b33734c39 | |||
| 80057d6957 | |||
| 21e7324b54 | |||
| 861865bc78 | |||
| 6e2c230b52 | |||
| 47e506ce41 | |||
| d0e95f15a3 | |||
| b437ac5cae | |||
| 7954f5ea43 | |||
| 4c32b9f6bd | |||
| dd333d4c59 | |||
| b05312de5f | |||
| 3ab56dca39 | |||
| 35fa919d8a | |||
| 04084da893 | |||
| 87e7307d0d | |||
| 6ea378001e | |||
| 9ad38a43b5 | |||
| 13bde0b065 | |||
| c0b0b26b6a | |||
| 9ce053f24e | |||
| 245629db0f | |||
| 816b16ee90 | |||
| 1e724360fd | |||
| 99ede74d03 | |||
| 037c0e8bdb | |||
| fa4c6036b7 | |||
| 5f2a879c46 | |||
| 45f7a03d48 | |||
| d8f70ea441 | |||
| 87b89c26e5 | |||
| 651d496e7e | |||
| d6eb489f91 | |||
| b7452276c6 | |||
| 3f493a1b03 | |||
| a3af4554f2 | |||
| 166a896c3e | |||
| 510bd4a1b9 |
@ -598,7 +598,7 @@
|
|||||||
"__id__": 30
|
"__id__": 30
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": false,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 36
|
"__id__": 36
|
||||||
@ -1253,7 +1253,7 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 873.017578125,
|
"width": 893.55908203125,
|
||||||
"height": 50.4
|
"height": 50.4
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
@ -1289,7 +1289,7 @@
|
|||||||
"b": 187,
|
"b": 187,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "活动介绍:活动期间参与指定游戏,并将赢分排在前XX名即可获得丰厚大",
|
"_string": "누적 베팅 횟수 XX회 및 누적 베팅 금액 XX를 달성하면 이벤트에 참여할 수 있습니다",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 27,
|
"_actualFontSize": 27,
|
||||||
@ -1302,7 +1302,7 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_isItalic": false,
|
"_isItalic": false,
|
||||||
"_isBold": true,
|
"_isBold": false,
|
||||||
"_isUnderline": false,
|
"_isUnderline": false,
|
||||||
"_underlineHeight": 2,
|
"_underlineHeight": 2,
|
||||||
"_cacheMode": 0,
|
"_cacheMode": 0,
|
||||||
@ -4293,7 +4293,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 174
|
"__id__": 174
|
||||||
},
|
},
|
||||||
"_key": "",
|
"_key": "Player ID",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -4597,7 +4597,7 @@
|
|||||||
"b": 7,
|
"b": 7,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "Winnings",
|
"_string": "bet",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 30,
|
"_actualFontSize": 30,
|
||||||
@ -4655,7 +4655,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 190
|
"__id__": 190
|
||||||
},
|
},
|
||||||
"_key": "Winnings",
|
"_key": "AID_MAIN_SHOW_BET",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -10748,7 +10748,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 451
|
"__id__": 451
|
||||||
},
|
},
|
||||||
"_key": "",
|
"_key": "Player ID",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -11052,7 +11052,7 @@
|
|||||||
"b": 7,
|
"b": 7,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "Winnings",
|
"_string": "bet",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 30,
|
"_actualFontSize": 30,
|
||||||
@ -11110,7 +11110,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 467
|
"__id__": 467
|
||||||
},
|
},
|
||||||
"_key": "Winnings",
|
"_key": "AID_MAIN_SHOW_BET",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -17605,7 +17605,7 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 108,
|
"width": 274.232421875,
|
||||||
"height": 36.76
|
"height": 36.76
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
@ -17641,7 +17641,7 @@
|
|||||||
"b": 255,
|
"b": 255,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "领奖记录",
|
"_string": "Reward claim records",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 26,
|
"_actualFontSize": 26,
|
||||||
@ -22172,7 +22172,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": -369,
|
"x": -320,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -22353,7 +22353,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": -190,
|
"x": -140,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -22534,7 +22534,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 15,
|
"x": 50,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -22715,7 +22715,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 205,
|
"x": 220,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -24034,7 +24034,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": -369,
|
"x": -320,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -24215,7 +24215,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": -190,
|
"x": -140,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -24396,7 +24396,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 15,
|
"x": 50,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
@ -24577,7 +24577,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 205,
|
"x": 220,
|
||||||
"y": 0,
|
"y": 0,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1092,9 +1092,9 @@
|
|||||||
"_dstBlendFactor": 4,
|
"_dstBlendFactor": 4,
|
||||||
"_color": {
|
"_color": {
|
||||||
"__type__": "cc.Color",
|
"__type__": "cc.Color",
|
||||||
"r": 90,
|
"r": 221,
|
||||||
"g": 6,
|
"g": 162,
|
||||||
"b": 7,
|
"b": 154,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "4",
|
"_string": "4",
|
||||||
|
|||||||
@ -80,7 +80,7 @@ export class RankHistoryList extends Component {
|
|||||||
this.historyIndex = 1;
|
this.historyIndex = 1;
|
||||||
|
|
||||||
this.updateHistoryArrows();
|
this.updateHistoryArrows();
|
||||||
|
this.refreshSelfRankingInfo(null);
|
||||||
await this.loadHistoryData(this.currentHistoryType, this.historyIndex);
|
await this.loadHistoryData(this.currentHistoryType, this.historyIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,11 +114,10 @@ export class RankHistoryList extends Component {
|
|||||||
// ==================== 历史记录逻辑 ====================
|
// ==================== 历史记录逻辑 ====================
|
||||||
async loadHistoryData(type: string, index: number) {
|
async loadHistoryData(type: string, index: number) {
|
||||||
this.setRankHistoryRadioBtn(type);
|
this.setRankHistoryRadioBtn(type);
|
||||||
|
this.refreshSelfRankingInfo(null);
|
||||||
if (!this.isTypeAvailable(type)) {
|
if (!this.isTypeAvailable(type)) {
|
||||||
console.log(`${type} 历史榜单活动未开启`);
|
console.log(`${type} 历史榜单活动未开启`);
|
||||||
this.rankHistoryLoadingNode.active = false;
|
this.rankHistoryLoadingNode.active = false;
|
||||||
this.refreshSelfRankingInfo(null);
|
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -163,7 +162,7 @@ export class RankHistoryList extends Component {
|
|||||||
this.selfInfo.getChildByName('Rank').getChildByName('sp_1').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('sp_1').active = false;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('sp_2').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('sp_2').active = false;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('sp_3').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('sp_3').active = false;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').active = true;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = '-';
|
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = '-';
|
||||||
this.selfInfo.getChildByName('Uid').getComponent(Label).string = '-';
|
this.selfInfo.getChildByName('Uid').getComponent(Label).string = '-';
|
||||||
this.selfInfo.getChildByName('Shop').getComponent(Label).string = '-';
|
this.selfInfo.getChildByName('Shop').getComponent(Label).string = '-';
|
||||||
@ -182,7 +181,7 @@ export class RankHistoryList extends Component {
|
|||||||
}
|
}
|
||||||
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
||||||
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Win.toString();
|
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Bet.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
getHistoryDate(type: string, index: number): string {
|
getHistoryDate(type: string, index: number): string {
|
||||||
@ -226,7 +225,7 @@ export class RankHistoryList extends Component {
|
|||||||
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = (idx + 1).toString();
|
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = (idx + 1).toString();
|
||||||
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
||||||
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
node.getChildByName('Win').getComponent(Label).string = itemData.Win.toString();
|
node.getChildByName('Win').getComponent(Label).string = itemData.Bet.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rankingHistoryListVScroll.refreshList(rankInfos.List);
|
this.rankingHistoryListVScroll.refreshList(rankInfos.List);
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { _decorator, Button, Color, Component, Label, Node, Sprite, Tween, tween, UITransform, v3 } from 'cc';
|
import { _decorator, Button, Color, Component, Label, Node, Sprite, Tween, tween, UITransform, v3, Vec2 } from 'cc';
|
||||||
import { VirtualScrollView } from './VScrollView';
|
import { VirtualScrollView } from './VScrollView';
|
||||||
import { Palette } from './Palette';
|
import { Palette } from './Palette';
|
||||||
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
||||||
@ -77,7 +77,7 @@ export class RankList extends Component {
|
|||||||
this.rankList.active = true;
|
this.rankList.active = true;
|
||||||
this.currentRankType = '';
|
this.currentRankType = '';
|
||||||
this.updateRankButtonsAvailability();
|
this.updateRankButtonsAvailability();
|
||||||
|
this.refreshSelfRankingInfo(null);
|
||||||
await this.switchRankTab(defaultType);
|
await this.switchRankTab(defaultType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ export class RankList extends Component {
|
|||||||
this.currentRankType = type;
|
this.currentRankType = type;
|
||||||
|
|
||||||
this.setRankRadioBtn(type);
|
this.setRankRadioBtn(type);
|
||||||
|
this.refreshSelfRankingInfo(null);
|
||||||
if (!this.isTypeAvailable(type)) {
|
if (!this.isTypeAvailable(type)) {
|
||||||
console.log(`${type} 榜单活动未开启`);
|
console.log(`${type} 榜单活动未开启`);
|
||||||
this.rankLoadingNode.active = false;
|
this.rankLoadingNode.active = false;
|
||||||
@ -132,7 +132,6 @@ export class RankList extends Component {
|
|||||||
}
|
}
|
||||||
this.marqueeTexts = [];
|
this.marqueeTexts = [];
|
||||||
this.currentMarqueeIndex = 0;
|
this.currentMarqueeIndex = 0;
|
||||||
this.refreshSelfRankingInfo(null);
|
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
if (this.countdownTimer) {
|
if (this.countdownTimer) {
|
||||||
clearInterval(this.countdownTimer);
|
clearInterval(this.countdownTimer);
|
||||||
@ -183,7 +182,19 @@ export class RankList extends Component {
|
|||||||
console.error('获取排行榜数据失败:', error);
|
console.error('获取排行榜数据失败:', error);
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
Tween.stopAllByTarget(this.rankLoadingNode);
|
Tween.stopAllByTarget(this.rankLoadingNode);
|
||||||
|
if (this.countdownTimer) {
|
||||||
|
clearInterval(this.countdownTimer);
|
||||||
|
this.countdownTimer = null;
|
||||||
|
}
|
||||||
|
this.rankingEndTime.getComponent(Label).string = "--:--:--";
|
||||||
this.rankLoadingNode.active = false;
|
this.rankLoadingNode.active = false;
|
||||||
|
// 停止跑马灯
|
||||||
|
if (this.msg_1 && this.msg_1.isValid) {
|
||||||
|
Tween.stopAllByTarget(this.msg_1);
|
||||||
|
this.msg_1.active = false;
|
||||||
|
}
|
||||||
|
this.marqueeTexts = [];
|
||||||
|
this.currentMarqueeIndex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,11 +249,24 @@ export class RankList extends Component {
|
|||||||
// 再次强制更新以确保宽度准确
|
// 再次强制更新以确保宽度准确
|
||||||
labelComp.updateRenderData(true);
|
labelComp.updateRenderData(true);
|
||||||
let labelLength = labelComp.node.getComponent(UITransform).width;
|
let labelLength = labelComp.node.getComponent(UITransform).width;
|
||||||
|
let maskLength = this.msg_1.parent.getComponent(UITransform).width
|
||||||
|
|
||||||
// 设置初始位置
|
// 设置初始位置
|
||||||
this.msg_1.setPosition(-450, this.msg_1.position.y, this.msg_1.position.z);
|
let endX = 0
|
||||||
let endX = -labelLength;
|
let duration = 0
|
||||||
let duration = Math.max(3, (-450 + labelLength) / 80);
|
|
||||||
|
if (labelLength <= maskLength) {
|
||||||
|
labelComp.node.getComponent(UITransform).setAnchorPoint(new Vec2(0.5, 0.5))
|
||||||
|
this.msg_1.setPosition(0, this.msg_1.position.y, this.msg_1.position.z);
|
||||||
|
endX = - maskLength / 2 - labelLength / 2 - 30
|
||||||
|
duration = Math.max(3, labelLength / 80);
|
||||||
|
} else {
|
||||||
|
labelComp.node.getComponent(UITransform).setAnchorPoint(new Vec2(0, 0.5))
|
||||||
|
this.msg_1.setPosition(- maskLength / 2, this.msg_1.position.y, this.msg_1.position.z);
|
||||||
|
endX = - maskLength / 2 - labelLength - 30
|
||||||
|
duration = Math.max(3, (- maskLength / 2 + labelLength) / 80);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// 启动跑马灯动画
|
// 启动跑马灯动画
|
||||||
Tween.stopAllByTarget(this.msg_1);
|
Tween.stopAllByTarget(this.msg_1);
|
||||||
@ -264,6 +288,9 @@ export class RankList extends Component {
|
|||||||
this.rankingListVScroll.setTotalCount(rankInfos.List.length);
|
this.rankingListVScroll.setTotalCount(rankInfos.List.length);
|
||||||
this.rankingListVScroll.renderItemFn = (node: Node, idx: number) => {
|
this.rankingListVScroll.renderItemFn = (node: Node, idx: number) => {
|
||||||
let itemData = rankInfos.List[idx];
|
let itemData = rankInfos.List[idx];
|
||||||
|
if (!itemData) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
node.getChildByName('bg').active = idx % 2 === 0;
|
node.getChildByName('bg').active = idx % 2 === 0;
|
||||||
node.getChildByName('bg2').active = idx % 2 !== 0;
|
node.getChildByName('bg2').active = idx % 2 !== 0;
|
||||||
node.getChildByName('Rank').getChildByName('sp_1').active = idx === 0;
|
node.getChildByName('Rank').getChildByName('sp_1').active = idx === 0;
|
||||||
@ -273,7 +300,7 @@ export class RankList extends Component {
|
|||||||
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = itemData.Rank.toString();
|
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = itemData.Rank.toString();
|
||||||
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
||||||
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
node.getChildByName('Win').getComponent(Label).string = itemData.Win.toString();
|
node.getChildByName('Win').getComponent(Label).string = itemData.Bet.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rankingListVScroll.refreshList(rankInfos.List);
|
this.rankingListVScroll.refreshList(rankInfos.List);
|
||||||
@ -285,7 +312,7 @@ export class RankList extends Component {
|
|||||||
this.selfInfo.getChildByName('Rank').getChildByName('sp_1').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('sp_1').active = false;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('sp_2').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('sp_2').active = false;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('sp_3').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('sp_3').active = false;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').active = false;
|
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').active = true;
|
||||||
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = '-';
|
this.selfInfo.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = '-';
|
||||||
this.selfInfo.getChildByName('Uid').getComponent(Label).string = '-';
|
this.selfInfo.getChildByName('Uid').getComponent(Label).string = '-';
|
||||||
this.selfInfo.getChildByName('Shop').getComponent(Label).string = '-';
|
this.selfInfo.getChildByName('Shop').getComponent(Label).string = '-';
|
||||||
@ -304,7 +331,7 @@ export class RankList extends Component {
|
|||||||
}
|
}
|
||||||
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
||||||
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Win.toString();
|
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Bet.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 按钮状态管理 ====================
|
// ==================== 按钮状态管理 ====================
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { Palette } from './Palette';
|
|||||||
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
||||||
import { callGameApiForRank } from 'db://assets/Loading/scripts/comm';
|
import { callGameApiForRank } from 'db://assets/Loading/scripts/comm';
|
||||||
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
||||||
|
import { I18nManager } from 'db://assets/Loading/scripts/manager/I18nManager';
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -118,7 +119,7 @@ export class RewardList extends Component {
|
|||||||
|
|
||||||
this.setRewardRadioBtn(type);
|
this.setRewardRadioBtn(type);
|
||||||
|
|
||||||
if (!this.isTypeAvailable(type)) {
|
if (!this.isTypeAvailable(type) || SlotRankingDataManager.instance.getRankListStatusByType(type) !== 0) {
|
||||||
console.log(`${type} 奖励榜单活动未开启`);
|
console.log(`${type} 奖励榜单活动未开启`);
|
||||||
this.rewardLoadingNode.active = false;
|
this.rewardLoadingNode.active = false;
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
@ -208,19 +209,19 @@ export class RewardList extends Component {
|
|||||||
|
|
||||||
if (this.rewardsData.DayRanks && this.rewardsData.DayRanks.length > 0) {
|
if (this.rewardsData.DayRanks && this.rewardsData.DayRanks.length > 0) {
|
||||||
for (let item of this.rewardsData.DayRanks) {
|
for (let item of this.rewardsData.DayRanks) {
|
||||||
this.selfRewardsList.push({ ...item, TypeLabel: '日榜' });
|
this.selfRewardsList.push({ ...item, TypeLabel: I18nManager.instance.t('Daily Ranking') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.rewardsData.WeekRanks && this.rewardsData.WeekRanks.length > 0) {
|
if (this.rewardsData.WeekRanks && this.rewardsData.WeekRanks.length > 0) {
|
||||||
for (let item of this.rewardsData.WeekRanks) {
|
for (let item of this.rewardsData.WeekRanks) {
|
||||||
this.selfRewardsList.push({ ...item, TypeLabel: '周榜' });
|
this.selfRewardsList.push({ ...item, TypeLabel: I18nManager.instance.t('Weekly Ranking') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.rewardsData.MonthRanks && this.rewardsData.MonthRanks.length > 0) {
|
if (this.rewardsData.MonthRanks && this.rewardsData.MonthRanks.length > 0) {
|
||||||
for (let item of this.rewardsData.MonthRanks) {
|
for (let item of this.rewardsData.MonthRanks) {
|
||||||
this.selfRewardsList.push({ ...item, TypeLabel: '月榜' });
|
this.selfRewardsList.push({ ...item, TypeLabel: I18nManager.instance.t('Monthly Ranking') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import { RewardHistoryList } from './RewardHistoryList';
|
|||||||
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
||||||
import { callGameApiForRank, getGameId } from 'db://assets/Loading/scripts/comm';
|
import { callGameApiForRank, getGameId } from 'db://assets/Loading/scripts/comm';
|
||||||
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
||||||
|
import { SlotScene } from '../../scripts/SlotScene';
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ export class SlotRanking extends Component {
|
|||||||
DESIGN_WIDTH: number = 1080;
|
DESIGN_WIDTH: number = 1080;
|
||||||
DESIGN_HEIGHT: number = 1920;
|
DESIGN_HEIGHT: number = 1920;
|
||||||
|
|
||||||
slotScene: any = null; // SlotScene 引用
|
slotScene: SlotScene = null; // SlotScene 引用
|
||||||
isMove: boolean = false; // 是否是拖动状态
|
isMove: boolean = false; // 是否是拖动状态
|
||||||
isClick: boolean = false; // 是否是点击状态
|
isClick: boolean = false; // 是否是点击状态
|
||||||
startPos: Vec3 = v3(432, 650, 0);
|
startPos: Vec3 = v3(432, 650, 0);
|
||||||
@ -67,9 +68,10 @@ export class SlotRanking extends Component {
|
|||||||
this.initComponents();
|
this.initComponents();
|
||||||
|
|
||||||
this.rankingBtn.setPosition(this.startPos);
|
this.rankingBtn.setPosition(this.startPos);
|
||||||
this.rankingBtn.active = SlotRankingDataManager.instance.getRankListStatus() === 0 || SlotRankingDataManager.instance.getRankListStatus() === 1;
|
this.rankingBtn.active = SlotRankingDataManager.instance.getRankListStatus() === 0 || SlotRankingDataManager.instance.getRankListStatus() === 1 || SlotRankingDataManager.instance.getRankMaxCloseTimeIsBiggerThanCurTime();
|
||||||
this.rankingBtn.getChildByName('icon').getComponent(sp.Skeleton).color = SlotRankingDataManager.instance.getRankListStatus() === 0 ? Color.WHITE : Color.GRAY;
|
|
||||||
this.rankingBtn.getComponent(Button).interactable = SlotRankingDataManager.instance.getRankListStatus() === 0;
|
this.rankingBtn.getComponent(Button).interactable = SlotRankingDataManager.instance.getRankListStatus() === 0;
|
||||||
|
this.rankingBtn.getChildByName('icon').getComponent(sp.Skeleton).color = SlotRankingDataManager.instance.getRankListStatus() === 0 ? Color.WHITE : Color.GRAY;
|
||||||
|
|
||||||
this.rankingBtn.on(Node.EventType.TOUCH_START, this.onTouchStart, this);
|
this.rankingBtn.on(Node.EventType.TOUCH_START, this.onTouchStart, this);
|
||||||
this.rankingBtn.on(Node.EventType.TOUCH_MOVE, this.onTouchMove, this);
|
this.rankingBtn.on(Node.EventType.TOUCH_MOVE, this.onTouchMove, this);
|
||||||
@ -117,7 +119,7 @@ export class SlotRanking extends Component {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
setSlotScene(slotScene: any) {
|
setSlotScene(slotScene: SlotScene) {
|
||||||
this.slotScene = slotScene;
|
this.slotScene = slotScene;
|
||||||
// 将 slotScene 引用传递给 RewardList
|
// 将 slotScene 引用传递给 RewardList
|
||||||
if (this.rewardList) {
|
if (this.rewardList) {
|
||||||
@ -127,23 +129,36 @@ export class SlotRanking extends Component {
|
|||||||
|
|
||||||
// 检查是否可以点击排行榜按钮
|
// 检查是否可以点击排行榜按钮
|
||||||
canClickRankingBtn(): boolean {
|
canClickRankingBtn(): boolean {
|
||||||
if (!this.slotScene) return true;
|
console.log('slotScene', this.slotScene)
|
||||||
|
|
||||||
|
if (!this.slotScene) return true;
|
||||||
|
console.log('isAutoSpin', this.slotScene.gameState.isAutoSpin)
|
||||||
|
console.log('isInFreeSpin', this.slotScene.gameState.isInFreeSpin)
|
||||||
|
console.log('isFeatureBuySpin', this.slotScene.gameState.isFeatureBuySpin)
|
||||||
|
console.log('isEliminating', this.slotScene.gameState.isEliminating)
|
||||||
// 如果正在滚动,不可点击
|
// 如果正在滚动,不可点击
|
||||||
if (this.slotScene.slotGame && this.slotScene.slotGame.isScroll()) {
|
if (this.slotScene.slotGame && this.slotScene.slotGame.isScroll()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果正在自动旋转,不可点击
|
// 如果正在自动旋转,不可点击
|
||||||
if (this.slotScene.isAutoSpin) {
|
if (this.slotScene.gameState.isAutoSpin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.slotScene.isFreeSpin) {
|
if (this.slotScene.gameState.isInFreeSpin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.slotScene.isFeatureBuySpin) {
|
if (this.slotScene.gameState.isFeatureBuySpin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.slotScene.gameState.isEliminating) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.rankingBtn.getComponent(Button).interactable) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +225,7 @@ export class SlotRanking extends Component {
|
|||||||
this.isClick = false;
|
this.isClick = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
console.log('isClick', this.isClick)
|
||||||
if (this.isClick) {
|
if (this.isClick) {
|
||||||
// 检查是否可以点击
|
// 检查是否可以点击
|
||||||
if (!this.canClickRankingBtn()) {
|
if (!this.canClickRankingBtn()) {
|
||||||
|
|||||||
@ -13,6 +13,85 @@ export class SlotRankingDataManager {
|
|||||||
set rankList(list: any) { this._rankList = list; }
|
set rankList(list: any) { this._rankList = list; }
|
||||||
get rankList(): any { return this._rankList; }
|
get rankList(): any { return this._rankList; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
"List": [
|
||||||
|
{
|
||||||
|
"Id": "20251225_day_faketrans-VND",
|
||||||
|
"Name": "",
|
||||||
|
"Type": "day",
|
||||||
|
"StartTime": 1766592000,
|
||||||
|
"EndTime": 1766689200,
|
||||||
|
"CloseTime": 1766775600,
|
||||||
|
"Status": 0,
|
||||||
|
"Rewards": [
|
||||||
|
10,
|
||||||
|
8,
|
||||||
|
5,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"SpinLimit": 10,
|
||||||
|
"BetLimit": 1000000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": "20251222_week_faketrans-VND",
|
||||||
|
"Name": "",
|
||||||
|
"Type": "week",
|
||||||
|
"StartTime": 1766592000,
|
||||||
|
"EndTime": 1766678400,
|
||||||
|
"CloseTime": 1766764800,
|
||||||
|
"Status": 0,
|
||||||
|
"Rewards": [
|
||||||
|
10,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"SpinLimit": 10,
|
||||||
|
"BetLimit": 5000000
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
getRankMaxCloseTimeIsBiggerThanCurTime(): boolean {
|
||||||
|
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
||||||
|
// 代表当前没有活动开启,则说明关闭入口按钮
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let maxCloseTime = 0;
|
||||||
|
for (let item of this._rankList.List) {
|
||||||
|
if (item.CloseTime > maxCloseTime) {
|
||||||
|
maxCloseTime = item.CloseTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Date.now() <= (maxCloseTime * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
getRankListStatusByType(type: string): number {
|
||||||
|
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
let item = this._rankList.List.find((item: any) => item.Type === type);
|
||||||
|
return item ? item.Status : 2;
|
||||||
|
}
|
||||||
|
|
||||||
getRankListStatus(): number {
|
getRankListStatus(): number {
|
||||||
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
@ -2171,24 +2171,24 @@
|
|||||||
"way(s)": "Way(s)"
|
"way(s)": "Way(s)"
|
||||||
},
|
},
|
||||||
"th": {
|
"th": {
|
||||||
"All record(s) displayed": "ฟรีสปิน:",
|
"All record(s) displayed": "แสดงทั้งหมดแล้ว",
|
||||||
"B/BxS": "Indsats / Basisindsats x Symboludbetalingsværdier",
|
"B/BxS": "เดิมพัน / เดิมพันพื้นฐาน x ค่าตัวคูณสัญลักษณ์",
|
||||||
"B/BxSxW": "Indsats / Basisindsats x Symboludbetalingsværdier x Way(s)",
|
"B/BxSxW": "เดิมพัน / เดิมพันพื้นฐาน x ค่าตัวคูณสัญลักษณ์ x Way",
|
||||||
"B/BxSxWxM": "Indsats / Basisindsats x Symboludbetalingsværdier x Way(s) x Multiplikator",
|
"B/BxSxWxM": "เดิมพัน / เดิมพันพื้นฐาน x ค่าตัวคูณสัญลักษณ์ x Way x ตัวคูณ",
|
||||||
"Balance": "ไม่มี คอมโบ ชนะ",
|
"Balance": "ยอดคงเหลือ",
|
||||||
"Bet": "แสดง ทั้งหมด แล้ว",
|
"Bet": "เดิมพัน",
|
||||||
"Close": "การ จ่าย เงิน",
|
"Close": "ปิด",
|
||||||
"Custom": "เดิมพัน",
|
"Custom": "กำหนดเอง",
|
||||||
"Feature Buy": "ชนิด เดียวกัน",
|
"Feature Buy": "ซื้อฟีเจอร์",
|
||||||
"Free Spins": "Way",
|
"Free Spins": "ฟรีสปิน",
|
||||||
"Free Spin:": "รอบ:",
|
"Free Spin:": "ฟรีสปิน:",
|
||||||
"Game History": "7 วันที่ ผ่านมา",
|
"Game History": "ประวัติการเล่น",
|
||||||
"Last 7 days": "รายการ",
|
"Last 7 days": "7 วันที่ผ่านมา",
|
||||||
"Loading More...": "ปิด",
|
"Loading More...": "กำลังโหลดเพิ่ม...",
|
||||||
"No Game History": "สปิน ปกติ",
|
"No Game History": "ไม่มีประวัติการเล่น",
|
||||||
"No Winning Combination": "ตัวคูณ รางวัล",
|
"No Winning Combination": "ไม่มีคอมโบชนะ",
|
||||||
"Normal Spin": "ยอด คงเหลือ",
|
"Normal Spin": "สปินปกติ",
|
||||||
"Payout": "ฟรี สปิน",
|
"Payout": "การจ่ายเงิน",
|
||||||
"Paytable": "ตารางการจ่ายเงิน",
|
"Paytable": "ตารางการจ่ายเงิน",
|
||||||
"Paytable_1": "มูลค่าการจ่ายเงินของสัญลักษณ์",
|
"Paytable_1": "มูลค่าการจ่ายเงินของสัญลักษณ์",
|
||||||
"Paytable_1_1": "ป่า",
|
"Paytable_1_1": "ป่า",
|
||||||
@ -2224,8 +2224,8 @@
|
|||||||
"Paytable_6_6": "หลังจาก การ จ่าย เงิน ใน แต่ละ รอบ เสร็จสิ้น แล้ว สัญลักษณ์ ที่ ชนะ ทั้งหมด จะ ระเบิด ทำให้ สัญลักษณ์ ที่ อยู่ เหนือ สัญลักษณ์ เหล่านั้น จะ ตกลงมา เพื่อ เล่น รอบ ใหม่",
|
"Paytable_6_6": "หลังจาก การ จ่าย เงิน ใน แต่ละ รอบ เสร็จสิ้น แล้ว สัญลักษณ์ ที่ ชนะ ทั้งหมด จะ ระเบิด ทำให้ สัญลักษณ์ ที่ อยู่ เหนือ สัญลักษณ์ เหล่านั้น จะ ตกลงมา เพื่อ เล่น รอบ ใหม่",
|
||||||
"Paytable_6_7": "ระบบ จะ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ใน ทุก ๆ รอบ จนกว่า จะ ไม่ สามารถ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ได้ อีก",
|
"Paytable_6_7": "ระบบ จะ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ใน ทุก ๆ รอบ จนกว่า จะ ไม่ สามารถ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ได้ อีก",
|
||||||
"Paytable_6_8": "แสดงชัยชนะทั้งหมดเป็นเงินสด",
|
"Paytable_6_8": "แสดงชัยชนะทั้งหมดเป็นเงินสด",
|
||||||
"Profit": "กำลัง โหลด เพิ่ม...",
|
"Profit": "กำไร",
|
||||||
"Round:": "ซื้อ ฟีเจอร์",
|
"Round:": "รอบ:",
|
||||||
"Rules": "กฎของเกม",
|
"Rules": "กฎของเกม",
|
||||||
"Rules_1": "หม้อไฟคาร์นิวัล",
|
"Rules_1": "หม้อไฟคาร์นิวัล",
|
||||||
"Rules_1_1": "Hot pot Carnival เป็น วิดีโอ สล็อต 6 รีล 5 แถว (พร้อม รีล เพิ่มเติม ที่ ด้านล่าง ของ รีล 2, 3, 4 และ 5) โดย มี สัญลักษณ์ Wilds-on-the-Way และ ตัวคูณ ที่ ด้านล่าง ของ รีล",
|
"Rules_1_1": "Hot pot Carnival เป็น วิดีโอ สล็อต 6 รีล 5 แถว (พร้อม รีล เพิ่มเติม ที่ ด้านล่าง ของ รีล 2, 3, 4 และ 5) โดย มี สัญลักษณ์ Wilds-on-the-Way และ ตัวคูณ ที่ ด้านล่าง ของ รีล",
|
||||||
@ -2300,13 +2300,13 @@
|
|||||||
"Rules_7": "ข้อมูลเพิ่มเติม",
|
"Rules_7": "ข้อมูลเพิ่มเติม",
|
||||||
"Rules_7_1": "การ ทำงาน ผิดพลาด จะ ทำให้ การ จ่าย เงิน และ การ เล่น ทั้งหมด เป็น โมฆะ",
|
"Rules_7_1": "การ ทำงาน ผิดพลาด จะ ทำให้ การ จ่าย เงิน และ การ เล่น ทั้งหมด เป็น โมฆะ",
|
||||||
"Rules_7_2": "ใน กรณี ที่ มี ข้อ พิพาท เกี่ยวกับ ผล เกม ผล เกม ทั้งหมด ที่ แสดง ใน หน้า ประวัติ ถือเป็น ที่ สิ้นสุด และ ไม่ มี เปลี่ยนแปลง",
|
"Rules_7_2": "ใน กรณี ที่ มี ข้อ พิพาท เกี่ยวกับ ผล เกม ผล เกม ทั้งหมด ที่ แสดง ใน หน้า ประวัติ ถือเป็น ที่ สิ้นสุด และ ไม่ มี เปลี่ยนแปลง",
|
||||||
"Select Date Range": "กำหนด เอง",
|
"Select Date Range": "เลือกช่วงวันที่",
|
||||||
"Time": "กำไร",
|
"Time": "เวลา",
|
||||||
"Today": "เวลา",
|
"Today": "วันนี้",
|
||||||
"Transaction": "ไม่มี ประวัติ การ เล่น",
|
"Transaction": "รายการ",
|
||||||
"Win Multiplier": "เดิมพัน / เดิมพัน พื้นฐาน x ค่า ตัวคูณ สัญลักษณ์",
|
"Win Multiplier": "ตัวคูณรางวัล",
|
||||||
"of a Kind": "เดิมพัน / เดิมพัน พื้นฐาน x ค่า ตัวคูณ สัญลักษณ์ x Way",
|
"of a Kind": "ชนิดเดียวกัน",
|
||||||
"way(s)": "เดิมพัน / เดิมพัน พื้นฐาน x ค่า ตัวคูณ สัญลักษณ์ x Way x ตัวคูณ"
|
"way(s)": "Way"
|
||||||
},
|
},
|
||||||
"tr": {
|
"tr": {
|
||||||
"All record(s) displayed": "Tüm Kayıtlar Görüntülendi",
|
"All record(s) displayed": "Tüm Kayıtlar Görüntülendi",
|
||||||
|
|||||||
@ -1419,7 +1419,7 @@
|
|||||||
"b": 255,
|
"b": 255,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "65.2222222",
|
"_string": "65.2",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 26,
|
"_actualFontSize": 26,
|
||||||
@ -1427,7 +1427,7 @@
|
|||||||
"_fontFamily": "Arial",
|
"_fontFamily": "Arial",
|
||||||
"_lineHeight": 200,
|
"_lineHeight": 200,
|
||||||
"_overflow": 2,
|
"_overflow": 2,
|
||||||
"_enableWrapText": true,
|
"_enableWrapText": false,
|
||||||
"_font": {
|
"_font": {
|
||||||
"__uuid__": "277ce92c-75d5-4d3f-9b31-5ba7c7e8a8fa",
|
"__uuid__": "277ce92c-75d5-4d3f-9b31-5ba7c7e8a8fa",
|
||||||
"__expectedType__": "cc.BitmapFont"
|
"__expectedType__": "cc.BitmapFont"
|
||||||
|
|||||||
BIN
assets/Game/prefabs/BigWinAni/mega_di.png
Normal file
|
After Width: | Height: | Size: 704 KiB |
@ -2,7 +2,7 @@
|
|||||||
"ver": "1.0.27",
|
"ver": "1.0.27",
|
||||||
"importer": "image",
|
"importer": "image",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "e9a11129-6b1c-4fb1-9583-7e9be340d000",
|
"uuid": "27ac0e99-7e44-4577-95a4-7cfee3bc9844",
|
||||||
"files": [
|
"files": [
|
||||||
".json",
|
".json",
|
||||||
".png"
|
".png"
|
||||||
@ -10,14 +10,14 @@
|
|||||||
"subMetas": {
|
"subMetas": {
|
||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "e9a11129-6b1c-4fb1-9583-7e9be340d000@6c48a",
|
"uuid": "27ac0e99-7e44-4577-95a4-7cfee3bc9844@6c48a",
|
||||||
"displayName": "win_d",
|
"displayName": "mega_di",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
"wrapModeS": "clamp-to-edge",
|
"wrapModeS": "clamp-to-edge",
|
||||||
"wrapModeT": "clamp-to-edge",
|
"wrapModeT": "clamp-to-edge",
|
||||||
"imageUuidOrDatabaseUri": "e9a11129-6b1c-4fb1-9583-7e9be340d000",
|
"imageUuidOrDatabaseUri": "27ac0e99-7e44-4577-95a4-7cfee3bc9844",
|
||||||
"isUuid": true,
|
"isUuid": true,
|
||||||
"visible": false,
|
"visible": false,
|
||||||
"minfilter": "linear",
|
"minfilter": "linear",
|
||||||
@ -34,8 +34,8 @@
|
|||||||
},
|
},
|
||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "e9a11129-6b1c-4fb1-9583-7e9be340d000@f9941",
|
"uuid": "27ac0e99-7e44-4577-95a4-7cfee3bc9844@f9941",
|
||||||
"displayName": "win_d",
|
"displayName": "mega_di",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -114,7 +114,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"isUuid": true,
|
"isUuid": true,
|
||||||
"imageUuidOrDatabaseUri": "e9a11129-6b1c-4fb1-9583-7e9be340d000@6c48a",
|
"imageUuidOrDatabaseUri": "27ac0e99-7e44-4577-95a4-7cfee3bc9844@6c48a",
|
||||||
"atlasUuid": ""
|
"atlasUuid": ""
|
||||||
},
|
},
|
||||||
"ver": "1.0.12",
|
"ver": "1.0.12",
|
||||||
@ -129,6 +129,6 @@
|
|||||||
"type": "sprite-frame",
|
"type": "sprite-frame",
|
||||||
"hasAlpha": true,
|
"hasAlpha": true,
|
||||||
"fixAlphaTransparencyArtifacts": false,
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
"redirect": "e9a11129-6b1c-4fb1-9583-7e9be340d000@6c48a"
|
"redirect": "27ac0e99-7e44-4577-95a4-7cfee3bc9844@6c48a"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 512 KiB |
BIN
assets/Game/prefabs/BigWinAni/super_di.png
Normal file
|
After Width: | Height: | Size: 778 KiB |
@ -2,7 +2,7 @@
|
|||||||
"ver": "1.0.27",
|
"ver": "1.0.27",
|
||||||
"importer": "image",
|
"importer": "image",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "c334dbd8-bbe8-4d7e-94b6-7948029c69e9",
|
"uuid": "8d64fa97-023d-4e79-8850-5c3a0a48e4a2",
|
||||||
"files": [
|
"files": [
|
||||||
".json",
|
".json",
|
||||||
".png"
|
".png"
|
||||||
@ -10,14 +10,14 @@
|
|||||||
"subMetas": {
|
"subMetas": {
|
||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "c334dbd8-bbe8-4d7e-94b6-7948029c69e9@6c48a",
|
"uuid": "8d64fa97-023d-4e79-8850-5c3a0a48e4a2@6c48a",
|
||||||
"displayName": "megawin_d",
|
"displayName": "super_di",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
"wrapModeS": "clamp-to-edge",
|
"wrapModeS": "clamp-to-edge",
|
||||||
"wrapModeT": "clamp-to-edge",
|
"wrapModeT": "clamp-to-edge",
|
||||||
"imageUuidOrDatabaseUri": "c334dbd8-bbe8-4d7e-94b6-7948029c69e9",
|
"imageUuidOrDatabaseUri": "8d64fa97-023d-4e79-8850-5c3a0a48e4a2",
|
||||||
"isUuid": true,
|
"isUuid": true,
|
||||||
"visible": false,
|
"visible": false,
|
||||||
"minfilter": "linear",
|
"minfilter": "linear",
|
||||||
@ -34,8 +34,8 @@
|
|||||||
},
|
},
|
||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "c334dbd8-bbe8-4d7e-94b6-7948029c69e9@f9941",
|
"uuid": "8d64fa97-023d-4e79-8850-5c3a0a48e4a2@f9941",
|
||||||
"displayName": "megawin_d",
|
"displayName": "super_di",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -114,7 +114,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"isUuid": true,
|
"isUuid": true,
|
||||||
"imageUuidOrDatabaseUri": "c334dbd8-bbe8-4d7e-94b6-7948029c69e9@6c48a",
|
"imageUuidOrDatabaseUri": "8d64fa97-023d-4e79-8850-5c3a0a48e4a2@6c48a",
|
||||||
"atlasUuid": ""
|
"atlasUuid": ""
|
||||||
},
|
},
|
||||||
"ver": "1.0.12",
|
"ver": "1.0.12",
|
||||||
@ -129,6 +129,6 @@
|
|||||||
"type": "sprite-frame",
|
"type": "sprite-frame",
|
||||||
"hasAlpha": true,
|
"hasAlpha": true,
|
||||||
"fixAlphaTransparencyArtifacts": false,
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
"redirect": "c334dbd8-bbe8-4d7e-94b6-7948029c69e9@6c48a"
|
"redirect": "8d64fa97-023d-4e79-8850-5c3a0a48e4a2@6c48a"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 529 KiB |
|
Before Width: | Height: | Size: 432 KiB |
@ -191,7 +191,7 @@
|
|||||||
"node": {
|
"node": {
|
||||||
"__id__": 2
|
"__id__": 2
|
||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": false,
|
||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 8
|
"__id__": 8
|
||||||
},
|
},
|
||||||
|
|||||||
@ -5592,6 +5592,24 @@
|
|||||||
"rightNode": {
|
"rightNode": {
|
||||||
"__id__": 114
|
"__id__": 114
|
||||||
},
|
},
|
||||||
|
"zxkFrames": [
|
||||||
|
{
|
||||||
|
"__uuid__": "fb975d49-84bd-44ce-93f5-35b625140fd6@f9941",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "479c23d5-6080-4e69-8324-3fc6ed99a421@f9941",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "22c56a64-39c1-4d5b-853a-ed171747f682@f9941",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__uuid__": "c38543d4-1cff-4464-9c3b-d5db88832ca3@f9941",
|
||||||
|
"__expectedType__": "cc.SpriteFrame"
|
||||||
|
}
|
||||||
|
],
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -13487,7 +13487,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 157.016,
|
"y": 303.558,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@ -13528,7 +13528,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 1080,
|
"width": 1080,
|
||||||
"height": 1300
|
"height": 1000
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
|
|||||||
@ -500,7 +500,7 @@
|
|||||||
"__expectedType__": "sp.SkeletonData"
|
"__expectedType__": "sp.SkeletonData"
|
||||||
},
|
},
|
||||||
"defaultSkin": "default",
|
"defaultSkin": "default",
|
||||||
"defaultAnimation": "",
|
"defaultAnimation": "1_1",
|
||||||
"_premultipliedAlpha": false,
|
"_premultipliedAlpha": false,
|
||||||
"_timeScale": 1,
|
"_timeScale": 1,
|
||||||
"_preCacheMode": 0,
|
"_preCacheMode": 0,
|
||||||
|
|||||||
@ -500,7 +500,7 @@
|
|||||||
"__expectedType__": "sp.SkeletonData"
|
"__expectedType__": "sp.SkeletonData"
|
||||||
},
|
},
|
||||||
"defaultSkin": "default",
|
"defaultSkin": "default",
|
||||||
"defaultAnimation": "<None>",
|
"defaultAnimation": "1_1",
|
||||||
"_premultipliedAlpha": false,
|
"_premultipliedAlpha": false,
|
||||||
"_timeScale": 1,
|
"_timeScale": 1,
|
||||||
"_preCacheMode": 0,
|
"_preCacheMode": 0,
|
||||||
|
|||||||
@ -10692,8 +10692,8 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 806,
|
"width": 898,
|
||||||
"height": 783
|
"height": 714
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@ -10734,7 +10734,7 @@
|
|||||||
},
|
},
|
||||||
"_type": 0,
|
"_type": 0,
|
||||||
"_fillType": 0,
|
"_fillType": 0,
|
||||||
"_sizeMode": 0,
|
"_sizeMode": 1,
|
||||||
"_fillCenter": {
|
"_fillCenter": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
|
|||||||
@ -1,146 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"__type__": "cc.Prefab",
|
|
||||||
"_name": "readyHand",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"_native": "",
|
|
||||||
"data": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"optimizationPolicy": 0,
|
|
||||||
"persistent": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "readyHand",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"_parent": null,
|
|
||||||
"_children": [],
|
|
||||||
"_active": true,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": {
|
|
||||||
"__id__": 6
|
|
||||||
},
|
|
||||||
"_lpos": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_lrot": {
|
|
||||||
"__type__": "cc.Quat",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0,
|
|
||||||
"w": 1
|
|
||||||
},
|
|
||||||
"_lscale": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 1,
|
|
||||||
"y": 1,
|
|
||||||
"z": 1
|
|
||||||
},
|
|
||||||
"_mobility": 0,
|
|
||||||
"_layer": 33554432,
|
|
||||||
"_euler": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.UITransform",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"__prefab": {
|
|
||||||
"__id__": 3
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 149.36000061035156,
|
|
||||||
"height": 721.510009765625
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.49377343129770096,
|
|
||||||
"y": 0.49974359668460616
|
|
||||||
},
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.CompPrefabInfo",
|
|
||||||
"fileId": "b1mehXP45KqZ5ylDhnzjMj"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "sp.Skeleton",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"__editorExtras__": {},
|
|
||||||
"node": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"__prefab": {
|
|
||||||
"__id__": 5
|
|
||||||
},
|
|
||||||
"_customMaterial": null,
|
|
||||||
"_srcBlendFactor": 2,
|
|
||||||
"_dstBlendFactor": 4,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 255,
|
|
||||||
"b": 255,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_skeletonData": {
|
|
||||||
"__uuid__": "c540ca75-7466-4e9a-aa3f-f1d031999a27",
|
|
||||||
"__expectedType__": "sp.SkeletonData"
|
|
||||||
},
|
|
||||||
"defaultSkin": "default",
|
|
||||||
"defaultAnimation": "readyHand_01",
|
|
||||||
"_premultipliedAlpha": true,
|
|
||||||
"_timeScale": 1,
|
|
||||||
"_preCacheMode": 0,
|
|
||||||
"_cacheMode": 0,
|
|
||||||
"_sockets": [],
|
|
||||||
"_useTint": false,
|
|
||||||
"_debugMesh": false,
|
|
||||||
"_debugBones": false,
|
|
||||||
"_debugSlots": false,
|
|
||||||
"_enableBatch": false,
|
|
||||||
"loop": true,
|
|
||||||
"_id": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.CompPrefabInfo",
|
|
||||||
"fileId": "092Em93rtLuav6edDSYQF4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.PrefabInfo",
|
|
||||||
"root": {
|
|
||||||
"__id__": 1
|
|
||||||
},
|
|
||||||
"asset": {
|
|
||||||
"__id__": 0
|
|
||||||
},
|
|
||||||
"fileId": "e8VoLh3KlENrVZJLIIITZJ",
|
|
||||||
"targetOverrides": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"ver": "1.1.50",
|
|
||||||
"importer": "prefab",
|
|
||||||
"imported": true,
|
|
||||||
"uuid": "f6c8dc7d-3478-495c-a358-5abb883f7aab",
|
|
||||||
"files": [
|
|
||||||
".json"
|
|
||||||
],
|
|
||||||
"subMetas": {},
|
|
||||||
"userData": {
|
|
||||||
"syncNodeName": "readyHand"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"ver": "1.2.0",
|
"ver": "1.2.0",
|
||||||
"importer": "directory",
|
"importer": "directory",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "6433b29b-f544-440f-8be6-477a5c024f7c",
|
"uuid": "3da1f9de-d18f-40f5-a7f8-94737743b012",
|
||||||
"files": [],
|
"files": [],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {}
|
"userData": {}
|
||||||
@ -0,0 +1,440 @@
|
|||||||
|
|
||||||
|
Entering Scatter.png
|
||||||
|
size: 2033,1250
|
||||||
|
format: RGBA8888
|
||||||
|
filter: Linear,Linear
|
||||||
|
repeat: none
|
||||||
|
a/lizi_00
|
||||||
|
rotate: false
|
||||||
|
xy: 1441, 2
|
||||||
|
size: 86, 122
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 107, 178
|
||||||
|
index: -1
|
||||||
|
a/lizi_01
|
||||||
|
rotate: false
|
||||||
|
xy: 380, 2
|
||||||
|
size: 89, 126
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 106, 174
|
||||||
|
index: -1
|
||||||
|
a/lizi_02
|
||||||
|
rotate: false
|
||||||
|
xy: 1694, 5
|
||||||
|
size: 92, 130
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 104, 170
|
||||||
|
index: -1
|
||||||
|
a/lizi_03
|
||||||
|
rotate: true
|
||||||
|
xy: 1260, 18
|
||||||
|
size: 96, 135
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 102, 165
|
||||||
|
index: -1
|
||||||
|
a/lizi_04
|
||||||
|
rotate: true
|
||||||
|
xy: 1075, 6
|
||||||
|
size: 99, 139
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 101, 161
|
||||||
|
index: -1
|
||||||
|
a/lizi_05
|
||||||
|
rotate: true
|
||||||
|
xy: 471, 2
|
||||||
|
size: 103, 143
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 99, 157
|
||||||
|
index: -1
|
||||||
|
a/lizi_06
|
||||||
|
rotate: true
|
||||||
|
xy: 926, 26
|
||||||
|
size: 107, 147
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 97, 153
|
||||||
|
index: -1
|
||||||
|
a/lizi_07
|
||||||
|
rotate: true
|
||||||
|
xy: 1620, 335
|
||||||
|
size: 110, 151
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 96, 149
|
||||||
|
index: -1
|
||||||
|
a/lizi_08
|
||||||
|
rotate: false
|
||||||
|
xy: 810, 25
|
||||||
|
size: 114, 155
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 94, 145
|
||||||
|
index: -1
|
||||||
|
a/lizi_09
|
||||||
|
rotate: true
|
||||||
|
xy: 1788, 3
|
||||||
|
size: 117, 159
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 93, 141
|
||||||
|
index: -1
|
||||||
|
a/lizi_10
|
||||||
|
rotate: true
|
||||||
|
xy: 1529, 3
|
||||||
|
size: 121, 163
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 91, 137
|
||||||
|
index: -1
|
||||||
|
a/lizi_11
|
||||||
|
rotate: false
|
||||||
|
xy: 810, 182
|
||||||
|
size: 124, 168
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 90, 132
|
||||||
|
index: -1
|
||||||
|
a/lizi_12
|
||||||
|
rotate: true
|
||||||
|
xy: 616, 8
|
||||||
|
size: 128, 172
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 88, 128
|
||||||
|
index: -1
|
||||||
|
a/lizi_13
|
||||||
|
rotate: true
|
||||||
|
xy: 1422, 740
|
||||||
|
size: 132, 176
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 87, 124
|
||||||
|
index: -1
|
||||||
|
a/lizi_14
|
||||||
|
rotate: true
|
||||||
|
xy: 1241, 736
|
||||||
|
size: 136, 179
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 85, 121
|
||||||
|
index: -1
|
||||||
|
a/lizi_15
|
||||||
|
rotate: false
|
||||||
|
xy: 951, 537
|
||||||
|
size: 140, 183
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 84, 117
|
||||||
|
index: -1
|
||||||
|
a/lizi_16
|
||||||
|
rotate: true
|
||||||
|
xy: 1813, 122
|
||||||
|
size: 144, 187
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 82, 113
|
||||||
|
index: -1
|
||||||
|
a/lizi_17
|
||||||
|
rotate: false
|
||||||
|
xy: 1093, 537
|
||||||
|
size: 147, 191
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 81, 109
|
||||||
|
index: -1
|
||||||
|
a/lizi_18
|
||||||
|
rotate: false
|
||||||
|
xy: 936, 135
|
||||||
|
size: 151, 195
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 79, 105
|
||||||
|
index: -1
|
||||||
|
a/lizi_19
|
||||||
|
rotate: true
|
||||||
|
xy: 566, 821
|
||||||
|
size: 154, 199
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 78, 101
|
||||||
|
index: -1
|
||||||
|
a/lizi_20
|
||||||
|
rotate: false
|
||||||
|
xy: 937, 332
|
||||||
|
size: 158, 203
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 76, 97
|
||||||
|
index: -1
|
||||||
|
a/lizi_21
|
||||||
|
rotate: false
|
||||||
|
xy: 1097, 326
|
||||||
|
size: 161, 209
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 75, 91
|
||||||
|
index: -1
|
||||||
|
a/lizi_22
|
||||||
|
rotate: false
|
||||||
|
xy: 1260, 329
|
||||||
|
size: 165, 212
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 73, 85
|
||||||
|
index: -1
|
||||||
|
a/lizi_23
|
||||||
|
rotate: false
|
||||||
|
xy: 1089, 107
|
||||||
|
size: 169, 217
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 72, 79
|
||||||
|
index: -1
|
||||||
|
a/lizi_24
|
||||||
|
rotate: true
|
||||||
|
xy: 1017, 730
|
||||||
|
size: 173, 222
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 70, 74
|
||||||
|
index: -1
|
||||||
|
a/lizi_25
|
||||||
|
rotate: true
|
||||||
|
xy: 1097, 905
|
||||||
|
size: 176, 227
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 69, 68
|
||||||
|
index: -1
|
||||||
|
a/lizi_26
|
||||||
|
rotate: true
|
||||||
|
xy: 1326, 874
|
||||||
|
size: 179, 232
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 68, 62
|
||||||
|
index: -1
|
||||||
|
a/lizi_27
|
||||||
|
rotate: true
|
||||||
|
xy: 705, 537
|
||||||
|
size: 183, 244
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 66, 56
|
||||||
|
index: -1
|
||||||
|
a/lizi_28
|
||||||
|
rotate: false
|
||||||
|
xy: 510, 359
|
||||||
|
size: 187, 249
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 65, 51
|
||||||
|
index: -1
|
||||||
|
a/lizi_29
|
||||||
|
rotate: true
|
||||||
|
xy: 1588, 1058
|
||||||
|
size: 190, 255
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 64, 45
|
||||||
|
index: -1
|
||||||
|
a/lizi_30
|
||||||
|
rotate: true
|
||||||
|
xy: 1326, 1055
|
||||||
|
size: 193, 260
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 63, 40
|
||||||
|
index: -1
|
||||||
|
a/lizi_31
|
||||||
|
rotate: false
|
||||||
|
xy: 276, 606
|
||||||
|
size: 195, 266
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 63, 34
|
||||||
|
index: -1
|
||||||
|
a/lizi_32
|
||||||
|
rotate: false
|
||||||
|
xy: 566, 977
|
||||||
|
size: 199, 271
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 61, 29
|
||||||
|
index: -1
|
||||||
|
a/lizi_33
|
||||||
|
rotate: false
|
||||||
|
xy: 1600, 856
|
||||||
|
size: 203, 200
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 59, 100
|
||||||
|
index: -1
|
||||||
|
a/lizi_34
|
||||||
|
rotate: true
|
||||||
|
xy: 1441, 126
|
||||||
|
size: 207, 206
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 57, 94
|
||||||
|
index: -1
|
||||||
|
a/lizi_35
|
||||||
|
rotate: false
|
||||||
|
xy: 597, 138
|
||||||
|
size: 211, 212
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 55, 88
|
||||||
|
index: -1
|
||||||
|
a/lizi_36
|
||||||
|
rotate: false
|
||||||
|
xy: 380, 130
|
||||||
|
size: 215, 218
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 53, 82
|
||||||
|
index: -1
|
||||||
|
a/lizi_37
|
||||||
|
rotate: false
|
||||||
|
xy: 174, 82
|
||||||
|
size: 204, 224
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 52, 76
|
||||||
|
index: -1
|
||||||
|
a/lizi_38
|
||||||
|
rotate: true
|
||||||
|
xy: 473, 610
|
||||||
|
size: 209, 230
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 50, 70
|
||||||
|
index: -1
|
||||||
|
a/lizi_39
|
||||||
|
rotate: true
|
||||||
|
xy: 699, 352
|
||||||
|
size: 183, 236
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 78, 64
|
||||||
|
index: -1
|
||||||
|
a/lizi_40
|
||||||
|
rotate: false
|
||||||
|
xy: 1845, 1006
|
||||||
|
size: 186, 242
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 77, 58
|
||||||
|
index: -1
|
||||||
|
a/lizi_41
|
||||||
|
rotate: true
|
||||||
|
xy: 767, 722
|
||||||
|
size: 188, 248
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 77, 52
|
||||||
|
index: -1
|
||||||
|
a/lizi_42
|
||||||
|
rotate: false
|
||||||
|
xy: 341, 350
|
||||||
|
size: 167, 254
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 76, 46
|
||||||
|
index: -1
|
||||||
|
a/lizi_43
|
||||||
|
rotate: false
|
||||||
|
xy: 185, 337
|
||||||
|
size: 154, 260
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 91, 40
|
||||||
|
index: -1
|
||||||
|
a/lizi_44
|
||||||
|
rotate: true
|
||||||
|
xy: 767, 912
|
||||||
|
size: 159, 266
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 89, 34
|
||||||
|
index: -1
|
||||||
|
a/lizi_45
|
||||||
|
rotate: true
|
||||||
|
xy: 1052, 1083
|
||||||
|
size: 165, 272
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 86, 28
|
||||||
|
index: -1
|
||||||
|
a/lizi_46
|
||||||
|
rotate: false
|
||||||
|
xy: 2, 28
|
||||||
|
size: 170, 278
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 84, 22
|
||||||
|
index: -1
|
||||||
|
a/lizi_47
|
||||||
|
rotate: true
|
||||||
|
xy: 767, 1073
|
||||||
|
size: 175, 283
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 82, 17
|
||||||
|
index: -1
|
||||||
|
a/lizi_48
|
||||||
|
rotate: false
|
||||||
|
xy: 2, 308
|
||||||
|
size: 181, 289
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 79, 11
|
||||||
|
index: -1
|
||||||
|
a/lizi_49
|
||||||
|
rotate: true
|
||||||
|
xy: 1813, 268
|
||||||
|
size: 185, 172
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 77, 128
|
||||||
|
index: -1
|
||||||
|
a/lizi_50
|
||||||
|
rotate: true
|
||||||
|
xy: 1426, 547
|
||||||
|
size: 191, 175
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 74, 125
|
||||||
|
index: -1
|
||||||
|
a/lizi_51
|
||||||
|
rotate: true
|
||||||
|
xy: 1649, 137
|
||||||
|
size: 196, 162
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 72, 138
|
||||||
|
index: -1
|
||||||
|
a/lizi_52
|
||||||
|
rotate: true
|
||||||
|
xy: 1620, 447
|
||||||
|
size: 201, 167
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 70, 133
|
||||||
|
index: -1
|
||||||
|
a/lizi_53
|
||||||
|
rotate: false
|
||||||
|
xy: 1805, 831
|
||||||
|
size: 206, 173
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 67, 127
|
||||||
|
index: -1
|
||||||
|
a/lizi_54
|
||||||
|
rotate: true
|
||||||
|
xy: 1260, 116
|
||||||
|
size: 211, 179
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 65, 121
|
||||||
|
index: -1
|
||||||
|
a/lizi_55
|
||||||
|
rotate: false
|
||||||
|
xy: 1789, 455
|
||||||
|
size: 177, 185
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 63, 115
|
||||||
|
index: -1
|
||||||
|
a/lizi_56
|
||||||
|
rotate: false
|
||||||
|
xy: 1242, 543
|
||||||
|
size: 182, 191
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 60, 109
|
||||||
|
index: -1
|
||||||
|
a/lizi_57
|
||||||
|
rotate: true
|
||||||
|
xy: 1792, 642
|
||||||
|
size: 187, 198
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 58, 102
|
||||||
|
index: -1
|
||||||
|
a/lizi_58
|
||||||
|
rotate: false
|
||||||
|
xy: 1603, 650
|
||||||
|
size: 187, 204
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 56, 96
|
||||||
|
index: -1
|
||||||
|
a/lizi_59
|
||||||
|
rotate: false
|
||||||
|
xy: 1427, 335
|
||||||
|
size: 191, 210
|
||||||
|
orig: 300, 300
|
||||||
|
offset: 54, 90
|
||||||
|
index: -1
|
||||||
|
g40
|
||||||
|
rotate: false
|
||||||
|
xy: 2, 599
|
||||||
|
size: 272, 273
|
||||||
|
orig: 283, 289
|
||||||
|
offset: 6, 10
|
||||||
|
index: -1
|
||||||
|
sg
|
||||||
|
rotate: false
|
||||||
|
xy: 2, 874
|
||||||
|
size: 562, 374
|
||||||
|
orig: 562, 374
|
||||||
|
offset: 0, 0
|
||||||
|
index: -1
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.0",
|
||||||
|
"importer": "*",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "94e1d9e0-4e68-4331-8532-513a89d5ce87",
|
||||||
|
"files": [
|
||||||
|
".atlas",
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"importer": "spine-data",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "bcdec64d-b16f-460d-99ed-d115f9226426",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
BIN
assets/Game/rp_11001/spin/Entering Scatter/Entering Scatter.png
Normal file
|
After Width: | Height: | Size: 937 KiB |
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.27",
|
||||||
|
"importer": "image",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "f07b133b-d924-4fa6-a0c9-52c48c852b5f",
|
||||||
|
"files": [
|
||||||
|
".json",
|
||||||
|
".png"
|
||||||
|
],
|
||||||
|
"subMetas": {
|
||||||
|
"6c48a": {
|
||||||
|
"importer": "texture",
|
||||||
|
"uuid": "f07b133b-d924-4fa6-a0c9-52c48c852b5f@6c48a",
|
||||||
|
"displayName": "Entering Scatter",
|
||||||
|
"id": "6c48a",
|
||||||
|
"name": "texture",
|
||||||
|
"userData": {
|
||||||
|
"wrapModeS": "clamp-to-edge",
|
||||||
|
"wrapModeT": "clamp-to-edge",
|
||||||
|
"imageUuidOrDatabaseUri": "f07b133b-d924-4fa6-a0c9-52c48c852b5f",
|
||||||
|
"isUuid": true,
|
||||||
|
"visible": false,
|
||||||
|
"minfilter": "linear",
|
||||||
|
"magfilter": "linear",
|
||||||
|
"mipfilter": "none",
|
||||||
|
"anisotropy": 0
|
||||||
|
},
|
||||||
|
"ver": "1.0.22",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
},
|
||||||
|
"f9941": {
|
||||||
|
"importer": "sprite-frame",
|
||||||
|
"uuid": "f07b133b-d924-4fa6-a0c9-52c48c852b5f@f9941",
|
||||||
|
"displayName": "Entering Scatter",
|
||||||
|
"id": "f9941",
|
||||||
|
"name": "spriteFrame",
|
||||||
|
"userData": {
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0,
|
||||||
|
"offsetY": 0,
|
||||||
|
"trimX": 2,
|
||||||
|
"trimY": 2,
|
||||||
|
"width": 2029,
|
||||||
|
"height": 1246,
|
||||||
|
"rawWidth": 2033,
|
||||||
|
"rawHeight": 1250,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"packable": true,
|
||||||
|
"pixelsToUnit": 100,
|
||||||
|
"pivotX": 0.5,
|
||||||
|
"pivotY": 0.5,
|
||||||
|
"meshType": 0,
|
||||||
|
"vertices": {
|
||||||
|
"rawPosition": [
|
||||||
|
-1014.5,
|
||||||
|
-623,
|
||||||
|
0,
|
||||||
|
1014.5,
|
||||||
|
-623,
|
||||||
|
0,
|
||||||
|
-1014.5,
|
||||||
|
623,
|
||||||
|
0,
|
||||||
|
1014.5,
|
||||||
|
623,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"indexes": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"uv": [
|
||||||
|
2,
|
||||||
|
1248,
|
||||||
|
2031,
|
||||||
|
1248,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2031,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"nuv": [
|
||||||
|
0.000983767830791933,
|
||||||
|
0.0016,
|
||||||
|
0.9990162321692081,
|
||||||
|
0.0016,
|
||||||
|
0.000983767830791933,
|
||||||
|
0.9984,
|
||||||
|
0.9990162321692081,
|
||||||
|
0.9984
|
||||||
|
],
|
||||||
|
"minPos": [
|
||||||
|
-1014.5,
|
||||||
|
-623,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"maxPos": [
|
||||||
|
1014.5,
|
||||||
|
623,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"isUuid": true,
|
||||||
|
"imageUuidOrDatabaseUri": "f07b133b-d924-4fa6-a0c9-52c48c852b5f@6c48a",
|
||||||
|
"atlasUuid": ""
|
||||||
|
},
|
||||||
|
"ver": "1.0.12",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"userData": {
|
||||||
|
"type": "sprite-frame",
|
||||||
|
"hasAlpha": true,
|
||||||
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
|
"redirect": "f07b133b-d924-4fa6-a0c9-52c48c852b5f@6c48a"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1 +1 @@
|
|||||||
{"skeleton":{"hash":"7jEqPjAFRr0R/GYVKeDUFbV7zlw","spine":"3.8.99","x":-175.32,"y":-181.82,"width":352,"height":365,"images":"./i/","audio":"E:/项目/Slot/火锅狂欢/源文件/主页/FS_shuzi/i"},"bones":[{"name":"root"},{"name":"骨骼","parent":"root"}],"slots":[{"name":"图层 3528","bone":"骨骼","attachment":"图层 3528"},{"name":"图层 3530","bone":"骨骼","attachment":"图层 3528","blend":"additive"},{"name":"图层 3529 拷贝 2","bone":"root","attachment":"图层 3529 拷贝 2"},{"name":"图层 3529 拷贝","bone":"root","attachment":"图层 3529 拷贝"},{"name":"图层 3529","bone":"root","attachment":"图层 3529"},{"name":"图层 3529 拷贝 3","bone":"root","attachment":"图层 3529 拷贝 3"}],"skins":[{"name":"default","attachments":{"图层 3528":{"图层 3528":{"y":0.5,"width":248,"height":249}},"图层 3529":{"图层 3529":{"x":3,"y":-0.5,"width":294,"height":303}},"图层 3529 拷贝":{"图层 3529 拷贝":{"x":3,"y":-0.5,"width":330,"height":341}},"图层 3529 拷贝 2":{"图层 3529 拷贝 2":{"x":0.68,"y":0.68,"width":352,"height":365}},"图层 3529 拷贝 3":{"图层 3529 拷贝 3":{"width":224,"height":229}},"图层 3530":{"图层 3528":{"y":0.5,"width":248,"height":249}}}}],"animations":{"animation":{"slots":{"图层 3529":{"color":[{"color":"ffffffee","curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1.1667,"color":"ffffff56","curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"color":"ffffffee"}]},"图层 3529 拷贝 2":{"color":[{"color":"ffffffee","curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1.1667,"color":"ffffff56","curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"color":"ffffffee"}]},"图层 3530":{"color":[{"color":"ffffffff","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff00","curve":0.25,"c3":0.75},{"time":2,"color":"ffffffff"}]}},"bones":{"骨骼":{"rotate":[{},{"time":1,"angle":45},{"time":2,"angle":90}]}}}}}
|
{"skeleton":{"hash":"oiO6uxFqvn5KHU3C8xPMWWH0Ilg","spine":"3.8.99","x":-636.17,"y":-285.79,"width":1082,"height":2362,"images":"./i/","audio":"E:/项目/Slot/火锅狂欢/源文件/主页/FS_shuzi/i"},"bones":[{"name":"root"},{"name":"骨骼","parent":"root"}],"slots":[{"name":"主页_免费游戏v3","bone":"root"},{"name":"图层 3528","bone":"骨骼","attachment":"图层 3528"},{"name":"图层 3530","bone":"骨骼","attachment":"图层 3528","blend":"additive"},{"name":"图层 3529 拷贝 2","bone":"root","attachment":"图层 3529 拷贝 2"},{"name":"图层 3529 拷贝","bone":"root","attachment":"图层 3529 拷贝"},{"name":"图层 3529","bone":"root","attachment":"图层 3529"},{"name":"图层 3529 拷贝 3","bone":"root","attachment":"图层 3529 拷贝 3","blend":"additive"}],"skins":[{"name":"default","attachments":{"图层 3528":{"图层 3528":{"y":0.5,"width":248,"height":249}},"图层 3529":{"图层 3529":{"x":3,"y":-0.5,"width":294,"height":303}},"图层 3529 拷贝":{"图层 3529 拷贝":{"x":3,"y":-0.5,"width":330,"height":341}},"图层 3529 拷贝 2":{"图层 3529 拷贝 2":{"x":0.68,"y":0.68,"width":352,"height":365}},"图层 3529 拷贝 3":{"图层 3529 拷贝 3":{"width":224,"height":229}},"图层 3530":{"图层 3528":{"y":0.5,"width":248,"height":249}}}}],"animations":{"animation":{"slots":{"图层 3528":{"color":[{"color":"ff6a007e","curve":0.25,"c3":0.75},{"time":1,"color":"ff900045","curve":0.25,"c3":0.75},{"time":2,"color":"ff6a007e"}]},"图层 3529":{"color":[{"color":"ffffff6a","curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"color":"ffffff6c","curve":0.25,"c3":0.75},{"time":1.1667,"color":"ffffff56","curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"color":"ffffff6a"}]},"图层 3529 拷贝":{"color":[{"color":"ffffff4d"}]},"图层 3529 拷贝 2":{"color":[{"color":"ffffff63","curve":0.371,"c2":0.62,"c3":0.71},{"time":0.1667,"color":"ffffff64","curve":0.25,"c3":0.75},{"time":1.1667,"color":"ffffff56","curve":0.243,"c3":0.689,"c4":0.75},{"time":2,"color":"ffffff63"}]},"图层 3529 拷贝 3":{"color":[{"color":"ffe71c29"}]},"图层 3530":{"color":[{"color":"ffffff7e","curve":0.25,"c3":0.75},{"time":1,"color":"ffffff45","curve":0.25,"c3":0.75},{"time":2,"color":"ffffff7e"}]}},"bones":{"骨骼":{"rotate":[{},{"time":1,"angle":45},{"time":2,"angle":90}]}}}}}
|
||||||
BIN
assets/Game/rp_11001/主页/咨询框/zxk_02.png
Executable file
|
After Width: | Height: | Size: 137 KiB |
@ -2,7 +2,7 @@
|
|||||||
"ver": "1.0.27",
|
"ver": "1.0.27",
|
||||||
"importer": "image",
|
"importer": "image",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "b2e1cd23-713d-49a8-ac10-838e9df75167",
|
"uuid": "479c23d5-6080-4e69-8324-3fc6ed99a421",
|
||||||
"files": [
|
"files": [
|
||||||
".json",
|
".json",
|
||||||
".png"
|
".png"
|
||||||
@ -10,14 +10,14 @@
|
|||||||
"subMetas": {
|
"subMetas": {
|
||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "b2e1cd23-713d-49a8-ac10-838e9df75167@6c48a",
|
"uuid": "479c23d5-6080-4e69-8324-3fc6ed99a421@6c48a",
|
||||||
"displayName": "supermegawin_d",
|
"displayName": "zxk_02",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
"wrapModeS": "clamp-to-edge",
|
"wrapModeS": "clamp-to-edge",
|
||||||
"wrapModeT": "clamp-to-edge",
|
"wrapModeT": "clamp-to-edge",
|
||||||
"imageUuidOrDatabaseUri": "b2e1cd23-713d-49a8-ac10-838e9df75167",
|
"imageUuidOrDatabaseUri": "479c23d5-6080-4e69-8324-3fc6ed99a421",
|
||||||
"isUuid": true,
|
"isUuid": true,
|
||||||
"visible": false,
|
"visible": false,
|
||||||
"minfilter": "linear",
|
"minfilter": "linear",
|
||||||
@ -34,8 +34,8 @@
|
|||||||
},
|
},
|
||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "b2e1cd23-713d-49a8-ac10-838e9df75167@f9941",
|
"uuid": "479c23d5-6080-4e69-8324-3fc6ed99a421@f9941",
|
||||||
"displayName": "supermegawin_d",
|
"displayName": "zxk_02",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -46,10 +46,10 @@
|
|||||||
"offsetY": 0,
|
"offsetY": 0,
|
||||||
"trimX": 0,
|
"trimX": 0,
|
||||||
"trimY": 0,
|
"trimY": 0,
|
||||||
"width": 1080,
|
"width": 568,
|
||||||
"height": 2360,
|
"height": 403,
|
||||||
"rawWidth": 1080,
|
"rawWidth": 568,
|
||||||
"rawHeight": 2360,
|
"rawHeight": 403,
|
||||||
"borderTop": 0,
|
"borderTop": 0,
|
||||||
"borderBottom": 0,
|
"borderBottom": 0,
|
||||||
"borderLeft": 0,
|
"borderLeft": 0,
|
||||||
@ -61,17 +61,17 @@
|
|||||||
"meshType": 0,
|
"meshType": 0,
|
||||||
"vertices": {
|
"vertices": {
|
||||||
"rawPosition": [
|
"rawPosition": [
|
||||||
-540,
|
-284,
|
||||||
-1180,
|
-201.5,
|
||||||
0,
|
0,
|
||||||
540,
|
284,
|
||||||
-1180,
|
-201.5,
|
||||||
0,
|
0,
|
||||||
-540,
|
-284,
|
||||||
1180,
|
201.5,
|
||||||
0,
|
0,
|
||||||
540,
|
284,
|
||||||
1180,
|
201.5,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"indexes": [
|
"indexes": [
|
||||||
@ -84,12 +84,12 @@
|
|||||||
],
|
],
|
||||||
"uv": [
|
"uv": [
|
||||||
0,
|
0,
|
||||||
2360,
|
403,
|
||||||
1080,
|
568,
|
||||||
2360,
|
403,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
1080,
|
568,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"nuv": [
|
"nuv": [
|
||||||
@ -103,18 +103,18 @@
|
|||||||
1
|
1
|
||||||
],
|
],
|
||||||
"minPos": [
|
"minPos": [
|
||||||
-540,
|
-284,
|
||||||
-1180,
|
-201.5,
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"maxPos": [
|
"maxPos": [
|
||||||
540,
|
284,
|
||||||
1180,
|
201.5,
|
||||||
0
|
0
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"isUuid": true,
|
"isUuid": true,
|
||||||
"imageUuidOrDatabaseUri": "b2e1cd23-713d-49a8-ac10-838e9df75167@6c48a",
|
"imageUuidOrDatabaseUri": "479c23d5-6080-4e69-8324-3fc6ed99a421@6c48a",
|
||||||
"atlasUuid": ""
|
"atlasUuid": ""
|
||||||
},
|
},
|
||||||
"ver": "1.0.12",
|
"ver": "1.0.12",
|
||||||
@ -129,6 +129,6 @@
|
|||||||
"type": "sprite-frame",
|
"type": "sprite-frame",
|
||||||
"hasAlpha": true,
|
"hasAlpha": true,
|
||||||
"fixAlphaTransparencyArtifacts": false,
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
"redirect": "b2e1cd23-713d-49a8-ac10-838e9df75167@6c48a"
|
"redirect": "479c23d5-6080-4e69-8324-3fc6ed99a421@6c48a"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BIN
assets/Game/rp_11001/主页/咨询框/zxk_03.png
Executable file
|
After Width: | Height: | Size: 192 KiB |
134
assets/Game/rp_11001/主页/咨询框/zxk_03.png.meta
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.27",
|
||||||
|
"importer": "image",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "22c56a64-39c1-4d5b-853a-ed171747f682",
|
||||||
|
"files": [
|
||||||
|
".json",
|
||||||
|
".png"
|
||||||
|
],
|
||||||
|
"subMetas": {
|
||||||
|
"6c48a": {
|
||||||
|
"importer": "texture",
|
||||||
|
"uuid": "22c56a64-39c1-4d5b-853a-ed171747f682@6c48a",
|
||||||
|
"displayName": "zxk_03",
|
||||||
|
"id": "6c48a",
|
||||||
|
"name": "texture",
|
||||||
|
"userData": {
|
||||||
|
"wrapModeS": "clamp-to-edge",
|
||||||
|
"wrapModeT": "clamp-to-edge",
|
||||||
|
"imageUuidOrDatabaseUri": "22c56a64-39c1-4d5b-853a-ed171747f682",
|
||||||
|
"isUuid": true,
|
||||||
|
"visible": false,
|
||||||
|
"minfilter": "linear",
|
||||||
|
"magfilter": "linear",
|
||||||
|
"mipfilter": "none",
|
||||||
|
"anisotropy": 0
|
||||||
|
},
|
||||||
|
"ver": "1.0.22",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
},
|
||||||
|
"f9941": {
|
||||||
|
"importer": "sprite-frame",
|
||||||
|
"uuid": "22c56a64-39c1-4d5b-853a-ed171747f682@f9941",
|
||||||
|
"displayName": "zxk_03",
|
||||||
|
"id": "f9941",
|
||||||
|
"name": "spriteFrame",
|
||||||
|
"userData": {
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0,
|
||||||
|
"offsetY": 0,
|
||||||
|
"trimX": 0,
|
||||||
|
"trimY": 0,
|
||||||
|
"width": 568,
|
||||||
|
"height": 565,
|
||||||
|
"rawWidth": 568,
|
||||||
|
"rawHeight": 565,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"packable": true,
|
||||||
|
"pixelsToUnit": 100,
|
||||||
|
"pivotX": 0.5,
|
||||||
|
"pivotY": 0.5,
|
||||||
|
"meshType": 0,
|
||||||
|
"vertices": {
|
||||||
|
"rawPosition": [
|
||||||
|
-284,
|
||||||
|
-282.5,
|
||||||
|
0,
|
||||||
|
284,
|
||||||
|
-282.5,
|
||||||
|
0,
|
||||||
|
-284,
|
||||||
|
282.5,
|
||||||
|
0,
|
||||||
|
284,
|
||||||
|
282.5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"indexes": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"uv": [
|
||||||
|
0,
|
||||||
|
565,
|
||||||
|
568,
|
||||||
|
565,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
568,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"nuv": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"minPos": [
|
||||||
|
-284,
|
||||||
|
-282.5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"maxPos": [
|
||||||
|
284,
|
||||||
|
282.5,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"isUuid": true,
|
||||||
|
"imageUuidOrDatabaseUri": "22c56a64-39c1-4d5b-853a-ed171747f682@6c48a",
|
||||||
|
"atlasUuid": ""
|
||||||
|
},
|
||||||
|
"ver": "1.0.12",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"userData": {
|
||||||
|
"type": "sprite-frame",
|
||||||
|
"hasAlpha": true,
|
||||||
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
|
"redirect": "22c56a64-39c1-4d5b-853a-ed171747f682@6c48a"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
assets/Game/rp_11001/主页/咨询框/zxk_04.png
Executable file
|
After Width: | Height: | Size: 257 KiB |
134
assets/Game/rp_11001/主页/咨询框/zxk_04.png.meta
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.27",
|
||||||
|
"importer": "image",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "c38543d4-1cff-4464-9c3b-d5db88832ca3",
|
||||||
|
"files": [
|
||||||
|
".json",
|
||||||
|
".png"
|
||||||
|
],
|
||||||
|
"subMetas": {
|
||||||
|
"6c48a": {
|
||||||
|
"importer": "texture",
|
||||||
|
"uuid": "c38543d4-1cff-4464-9c3b-d5db88832ca3@6c48a",
|
||||||
|
"displayName": "zxk_04",
|
||||||
|
"id": "6c48a",
|
||||||
|
"name": "texture",
|
||||||
|
"userData": {
|
||||||
|
"wrapModeS": "clamp-to-edge",
|
||||||
|
"wrapModeT": "clamp-to-edge",
|
||||||
|
"imageUuidOrDatabaseUri": "c38543d4-1cff-4464-9c3b-d5db88832ca3",
|
||||||
|
"isUuid": true,
|
||||||
|
"visible": false,
|
||||||
|
"minfilter": "linear",
|
||||||
|
"magfilter": "linear",
|
||||||
|
"mipfilter": "none",
|
||||||
|
"anisotropy": 0
|
||||||
|
},
|
||||||
|
"ver": "1.0.22",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
},
|
||||||
|
"f9941": {
|
||||||
|
"importer": "sprite-frame",
|
||||||
|
"uuid": "c38543d4-1cff-4464-9c3b-d5db88832ca3@f9941",
|
||||||
|
"displayName": "zxk_04",
|
||||||
|
"id": "f9941",
|
||||||
|
"name": "spriteFrame",
|
||||||
|
"userData": {
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0,
|
||||||
|
"offsetY": 0,
|
||||||
|
"trimX": 0,
|
||||||
|
"trimY": 0,
|
||||||
|
"width": 568,
|
||||||
|
"height": 749,
|
||||||
|
"rawWidth": 568,
|
||||||
|
"rawHeight": 749,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"packable": true,
|
||||||
|
"pixelsToUnit": 100,
|
||||||
|
"pivotX": 0.5,
|
||||||
|
"pivotY": 0.5,
|
||||||
|
"meshType": 0,
|
||||||
|
"vertices": {
|
||||||
|
"rawPosition": [
|
||||||
|
-284,
|
||||||
|
-374.5,
|
||||||
|
0,
|
||||||
|
284,
|
||||||
|
-374.5,
|
||||||
|
0,
|
||||||
|
-284,
|
||||||
|
374.5,
|
||||||
|
0,
|
||||||
|
284,
|
||||||
|
374.5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"indexes": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"uv": [
|
||||||
|
0,
|
||||||
|
749,
|
||||||
|
568,
|
||||||
|
749,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
568,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"nuv": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"minPos": [
|
||||||
|
-284,
|
||||||
|
-374.5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"maxPos": [
|
||||||
|
284,
|
||||||
|
374.5,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"isUuid": true,
|
||||||
|
"imageUuidOrDatabaseUri": "c38543d4-1cff-4464-9c3b-d5db88832ca3@6c48a",
|
||||||
|
"atlasUuid": ""
|
||||||
|
},
|
||||||
|
"ver": "1.0.12",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"userData": {
|
||||||
|
"type": "sprite-frame",
|
||||||
|
"hasAlpha": true,
|
||||||
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
|
"redirect": "c38543d4-1cff-4464-9c3b-d5db88832ca3@6c48a"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
assets/Game/rp_11001/主页/跑马灯/pmd_1_1.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
134
assets/Game/rp_11001/主页/跑马灯/pmd_1_1.png.meta
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.27",
|
||||||
|
"importer": "image",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "a2ccac87-a874-41b0-aee5-486850a2a3c8",
|
||||||
|
"files": [
|
||||||
|
".json",
|
||||||
|
".png"
|
||||||
|
],
|
||||||
|
"subMetas": {
|
||||||
|
"6c48a": {
|
||||||
|
"importer": "texture",
|
||||||
|
"uuid": "a2ccac87-a874-41b0-aee5-486850a2a3c8@6c48a",
|
||||||
|
"displayName": "pmd_1_1",
|
||||||
|
"id": "6c48a",
|
||||||
|
"name": "texture",
|
||||||
|
"userData": {
|
||||||
|
"wrapModeS": "clamp-to-edge",
|
||||||
|
"wrapModeT": "clamp-to-edge",
|
||||||
|
"imageUuidOrDatabaseUri": "a2ccac87-a874-41b0-aee5-486850a2a3c8",
|
||||||
|
"isUuid": true,
|
||||||
|
"visible": false,
|
||||||
|
"minfilter": "linear",
|
||||||
|
"magfilter": "linear",
|
||||||
|
"mipfilter": "none",
|
||||||
|
"anisotropy": 0
|
||||||
|
},
|
||||||
|
"ver": "1.0.22",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
},
|
||||||
|
"f9941": {
|
||||||
|
"importer": "sprite-frame",
|
||||||
|
"uuid": "a2ccac87-a874-41b0-aee5-486850a2a3c8@f9941",
|
||||||
|
"displayName": "pmd_1_1",
|
||||||
|
"id": "f9941",
|
||||||
|
"name": "spriteFrame",
|
||||||
|
"userData": {
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0.5,
|
||||||
|
"offsetY": -0.5,
|
||||||
|
"trimX": 20,
|
||||||
|
"trimY": 10,
|
||||||
|
"width": 1047,
|
||||||
|
"height": 102,
|
||||||
|
"rawWidth": 1086,
|
||||||
|
"rawHeight": 121,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"packable": true,
|
||||||
|
"pixelsToUnit": 100,
|
||||||
|
"pivotX": 0.5,
|
||||||
|
"pivotY": 0.5,
|
||||||
|
"meshType": 0,
|
||||||
|
"vertices": {
|
||||||
|
"rawPosition": [
|
||||||
|
-523.5,
|
||||||
|
-51,
|
||||||
|
0,
|
||||||
|
523.5,
|
||||||
|
-51,
|
||||||
|
0,
|
||||||
|
-523.5,
|
||||||
|
51,
|
||||||
|
0,
|
||||||
|
523.5,
|
||||||
|
51,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"indexes": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"uv": [
|
||||||
|
20,
|
||||||
|
111,
|
||||||
|
1067,
|
||||||
|
111,
|
||||||
|
20,
|
||||||
|
9,
|
||||||
|
1067,
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"nuv": [
|
||||||
|
0.01841620626151013,
|
||||||
|
0.0743801652892562,
|
||||||
|
0.9825046040515654,
|
||||||
|
0.0743801652892562,
|
||||||
|
0.01841620626151013,
|
||||||
|
0.9173553719008265,
|
||||||
|
0.9825046040515654,
|
||||||
|
0.9173553719008265
|
||||||
|
],
|
||||||
|
"minPos": [
|
||||||
|
-523.5,
|
||||||
|
-51,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"maxPos": [
|
||||||
|
523.5,
|
||||||
|
51,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"isUuid": true,
|
||||||
|
"imageUuidOrDatabaseUri": "a2ccac87-a874-41b0-aee5-486850a2a3c8@6c48a",
|
||||||
|
"atlasUuid": ""
|
||||||
|
},
|
||||||
|
"ver": "1.0.12",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"userData": {
|
||||||
|
"type": "sprite-frame",
|
||||||
|
"hasAlpha": true,
|
||||||
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
|
"redirect": "a2ccac87-a874-41b0-aee5-486850a2a3c8@6c48a"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
assets/Game/rp_11001/主页/跑马灯/pmd_1_2.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
134
assets/Game/rp_11001/主页/跑马灯/pmd_1_2.png.meta
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.27",
|
||||||
|
"importer": "image",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "f6a08786-4dc9-4d3b-be1b-4bfeea730b8e",
|
||||||
|
"files": [
|
||||||
|
".json",
|
||||||
|
".png"
|
||||||
|
],
|
||||||
|
"subMetas": {
|
||||||
|
"6c48a": {
|
||||||
|
"importer": "texture",
|
||||||
|
"uuid": "f6a08786-4dc9-4d3b-be1b-4bfeea730b8e@6c48a",
|
||||||
|
"displayName": "pmd_1_2",
|
||||||
|
"id": "6c48a",
|
||||||
|
"name": "texture",
|
||||||
|
"userData": {
|
||||||
|
"wrapModeS": "clamp-to-edge",
|
||||||
|
"wrapModeT": "clamp-to-edge",
|
||||||
|
"imageUuidOrDatabaseUri": "f6a08786-4dc9-4d3b-be1b-4bfeea730b8e",
|
||||||
|
"isUuid": true,
|
||||||
|
"visible": false,
|
||||||
|
"minfilter": "linear",
|
||||||
|
"magfilter": "linear",
|
||||||
|
"mipfilter": "none",
|
||||||
|
"anisotropy": 0
|
||||||
|
},
|
||||||
|
"ver": "1.0.22",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
},
|
||||||
|
"f9941": {
|
||||||
|
"importer": "sprite-frame",
|
||||||
|
"uuid": "f6a08786-4dc9-4d3b-be1b-4bfeea730b8e@f9941",
|
||||||
|
"displayName": "pmd_1_2",
|
||||||
|
"id": "f9941",
|
||||||
|
"name": "spriteFrame",
|
||||||
|
"userData": {
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0,
|
||||||
|
"offsetY": 0,
|
||||||
|
"trimX": 0,
|
||||||
|
"trimY": 0,
|
||||||
|
"width": 1086,
|
||||||
|
"height": 121,
|
||||||
|
"rawWidth": 1086,
|
||||||
|
"rawHeight": 121,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"packable": true,
|
||||||
|
"pixelsToUnit": 100,
|
||||||
|
"pivotX": 0.5,
|
||||||
|
"pivotY": 0.5,
|
||||||
|
"meshType": 0,
|
||||||
|
"vertices": {
|
||||||
|
"rawPosition": [
|
||||||
|
-543,
|
||||||
|
-60.5,
|
||||||
|
0,
|
||||||
|
543,
|
||||||
|
-60.5,
|
||||||
|
0,
|
||||||
|
-543,
|
||||||
|
60.5,
|
||||||
|
0,
|
||||||
|
543,
|
||||||
|
60.5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"indexes": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"uv": [
|
||||||
|
0,
|
||||||
|
121,
|
||||||
|
1086,
|
||||||
|
121,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1086,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"nuv": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"minPos": [
|
||||||
|
-543,
|
||||||
|
-60.5,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"maxPos": [
|
||||||
|
543,
|
||||||
|
60.5,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"isUuid": true,
|
||||||
|
"imageUuidOrDatabaseUri": "f6a08786-4dc9-4d3b-be1b-4bfeea730b8e@6c48a",
|
||||||
|
"atlasUuid": ""
|
||||||
|
},
|
||||||
|
"ver": "1.0.12",
|
||||||
|
"imported": true,
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"userData": {
|
||||||
|
"type": "sprite-frame",
|
||||||
|
"hasAlpha": true,
|
||||||
|
"fixAlphaTransparencyArtifacts": false,
|
||||||
|
"redirect": "f6a08786-4dc9-4d3b-be1b-4bfeea730b8e@6c48a"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,6 +28,7 @@ import { AutoSpinPanel } from "./game/AutoSpinPanel";
|
|||||||
import { NodePoolManager } from "../../Loading/scripts/manager/NodePoolManager";
|
import { NodePoolManager } from "../../Loading/scripts/manager/NodePoolManager";
|
||||||
import { webView } from "./game/WebView";
|
import { webView } from "./game/WebView";
|
||||||
import {
|
import {
|
||||||
|
cash2gold,
|
||||||
getHistoryUrl,
|
getHistoryUrl,
|
||||||
getOddsUrl,
|
getOddsUrl,
|
||||||
getSupportUrl,
|
getSupportUrl,
|
||||||
@ -40,6 +41,7 @@ import { AudioManager } from "../../Loading/scripts/manager/AudioManager";
|
|||||||
|
|
||||||
import { showFromBottom, hideToBottom } from "./game/Tools";
|
import { showFromBottom, hideToBottom } from "./game/Tools";
|
||||||
import { SpinAni } from "./game/SpinAni";
|
import { SpinAni } from "./game/SpinAni";
|
||||||
|
import { SlotGame } from "./SlotGame";
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -51,6 +53,8 @@ export class SlotBar extends Component {
|
|||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
private tipSmall: Node = null;
|
private tipSmall: Node = null;
|
||||||
|
@property(SlotGame)
|
||||||
|
private slotGame: SlotGame = null;
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
pfb_history: Prefab = null;
|
pfb_history: Prefab = null;
|
||||||
@ -89,7 +93,6 @@ export class SlotBar extends Component {
|
|||||||
private turboBtnAni: Animation = null;
|
private turboBtnAni: Animation = null;
|
||||||
|
|
||||||
private freeSpinBg: Node = null;
|
private freeSpinBg: Node = null;
|
||||||
private spin_lihua: sp.Skeleton = null
|
|
||||||
private left_1: Node = null;
|
private left_1: Node = null;
|
||||||
private leftCount: Label = null;
|
private leftCount: Label = null;
|
||||||
private left_2: Node = null;
|
private left_2: Node = null;
|
||||||
@ -140,7 +143,6 @@ export class SlotBar extends Component {
|
|||||||
this.menuBtn = this.btns1.getChildByName("ic_menu").getComponent(Button);
|
this.menuBtn = this.btns1.getChildByName("ic_menu").getComponent(Button);
|
||||||
|
|
||||||
this.freeSpinBg = this.node.getChildByName("FreeSpinBg");
|
this.freeSpinBg = this.node.getChildByName("FreeSpinBg");
|
||||||
this.spin_lihua = this.freeSpinBg.getChildByName("spin_lihua").getComponent(sp.Skeleton);
|
|
||||||
this.left_1 = this.freeSpinBg.getChildByName("left_1");
|
this.left_1 = this.freeSpinBg.getChildByName("left_1");
|
||||||
this.left_2 = this.freeSpinBg.getChildByName("left_2");
|
this.left_2 = this.freeSpinBg.getChildByName("left_2");
|
||||||
this.leftCount = this.left_1
|
this.leftCount = this.left_1
|
||||||
@ -180,6 +182,7 @@ export class SlotBar extends Component {
|
|||||||
this.betIndex = 0;
|
this.betIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this.setBtnEnable(this.subBtn, this.betIndex > 0);
|
||||||
this.setBalance(this.curBalance);
|
this.setBalance(this.curBalance);
|
||||||
this.setBet(this.curBet);
|
this.setBet(this.curBet);
|
||||||
this.setWin(this.curWin);
|
this.setWin(this.curWin);
|
||||||
@ -263,12 +266,19 @@ export class SlotBar extends Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allowClickManualStop(bl: boolean) {
|
||||||
|
this.hasClickSpin = bl;
|
||||||
|
this.manualStopNode.active = bl
|
||||||
|
}
|
||||||
|
|
||||||
|
notAllowClickManualStop(bl: boolean) {
|
||||||
|
this.hasClickManualStop = bl;
|
||||||
|
}
|
||||||
|
|
||||||
onBtnSpin() {
|
onBtnSpin() {
|
||||||
// 第一次点击 旋转
|
// 第一次点击 旋转
|
||||||
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
AudioManager.instance.playSFX("Spin_Button_Click");
|
AudioManager.instance.playSFX("Spin_Button_Click");
|
||||||
this.hasClickSpin = true;
|
|
||||||
this.manualStopNode.active = true
|
|
||||||
this.node.emit(SLOT_BAR_EVENT.ON_SPIN_CLICK);
|
this.node.emit(SLOT_BAR_EVENT.ON_SPIN_CLICK);
|
||||||
this.spinAni.startSpin();
|
this.spinAni.startSpin();
|
||||||
|
|
||||||
@ -287,13 +297,14 @@ export class SlotBar extends Component {
|
|||||||
// 第一次点击 旋转
|
// 第一次点击 旋转
|
||||||
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
// AudioManager.instance.playSFX('Spin_Button_Click');
|
// AudioManager.instance.playSFX('Spin_Button_Click');
|
||||||
this.hasClickSpin = true;
|
|
||||||
this.manualStopNode.active = true
|
|
||||||
|
|
||||||
this.setBtnEnable(this.subBtn, false);
|
this.setBtnEnable(this.subBtn, false);
|
||||||
this.setBtnEnable(this.addBtn, false);
|
this.setBtnEnable(this.addBtn, false);
|
||||||
this.setBtnEnable(this.autoBtn, false);
|
this.setBtnEnable(this.autoBtn, false);
|
||||||
this.setBtnEnable(this.menuBtn, false);
|
this.setBtnEnable(this.menuBtn, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
// 第二次点击 手动停止
|
// 第二次点击 手动停止
|
||||||
else if (this.hasClickSpin && !this.hasClickManualStop) {
|
else if (this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
@ -304,7 +315,7 @@ export class SlotBar extends Component {
|
|||||||
onBtnTestSpin(event, args) {
|
onBtnTestSpin(event, args) {
|
||||||
// 第一次点击 旋转
|
// 第一次点击 旋转
|
||||||
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
this.hasClickSpin = true;
|
// this.hasClickSpin = true;
|
||||||
this.node.emit(SLOT_BAR_EVENT.ON_TEST_SPIN_CLICK, args);
|
this.node.emit(SLOT_BAR_EVENT.ON_TEST_SPIN_CLICK, args);
|
||||||
|
|
||||||
this.setBtnEnable(this.subBtn, false);
|
this.setBtnEnable(this.subBtn, false);
|
||||||
@ -325,7 +336,7 @@ export class SlotBar extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
manualStop() {
|
manualStop() {
|
||||||
this.hasClickManualStop = true;
|
this.notAllowClickManualStop(true)
|
||||||
this.spinAni.stopSpin();
|
this.spinAni.stopSpin();
|
||||||
this.setBtnEnable(this.spinBtn, false);
|
this.setBtnEnable(this.spinBtn, false);
|
||||||
}
|
}
|
||||||
@ -496,6 +507,7 @@ export class SlotBar extends Component {
|
|||||||
} else {
|
} else {
|
||||||
this.betIndex = this.betGrade.indexOf(bet);
|
this.betIndex = this.betGrade.indexOf(bet);
|
||||||
}
|
}
|
||||||
|
// this.setBtnEnable(this.subBtn, this.betIndex > 0);
|
||||||
|
|
||||||
// 停止当前的 tween 动画
|
// 停止当前的 tween 动画
|
||||||
Tween.stopAllByTarget(this.betLabel.node);
|
Tween.stopAllByTarget(this.betLabel.node);
|
||||||
@ -571,6 +583,8 @@ export class SlotBar extends Component {
|
|||||||
this.setBtnEnable(this.menuBtn, false);
|
this.setBtnEnable(this.menuBtn, false);
|
||||||
this.setBtnEnable(this.spinBtn, false);
|
this.setBtnEnable(this.spinBtn, false);
|
||||||
|
|
||||||
|
this.slotGame.showFeatureBuy(true)
|
||||||
|
|
||||||
this.setBtnVisible(this.spinBtn, false);
|
this.setBtnVisible(this.spinBtn, false);
|
||||||
this.setBtnVisible(this.stopAutoBtn, true);
|
this.setBtnVisible(this.stopAutoBtn, true);
|
||||||
|
|
||||||
@ -591,6 +605,8 @@ export class SlotBar extends Component {
|
|||||||
this.setBtnVisible(this.spinBtn, true);
|
this.setBtnVisible(this.spinBtn, true);
|
||||||
this.setBtnVisible(this.stopAutoBtn, false);
|
this.setBtnVisible(this.stopAutoBtn, false);
|
||||||
this.setBtnEnable(this.spinBtn, false);
|
this.setBtnEnable(this.spinBtn, false);
|
||||||
|
this.slotGame.showFeatureBuy(false)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reconnectState(hasDelete: boolean = false) {
|
reconnectState(hasDelete: boolean = false) {
|
||||||
@ -604,9 +620,10 @@ export class SlotBar extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resetAllState() {
|
resetAllState() {
|
||||||
this.hasClickSpin = false;
|
this.allowClickManualStop(false)
|
||||||
this.hasClickManualStop = false;
|
this.notAllowClickManualStop(false)
|
||||||
this.manualStopNode.active = false
|
|
||||||
|
|
||||||
this.isAuto = false;
|
this.isAuto = false;
|
||||||
this.setBtnVisible(this.spinBtn, true);
|
this.setBtnVisible(this.spinBtn, true);
|
||||||
this.spinAni.stopSpin();
|
this.spinAni.stopSpin();
|
||||||
@ -617,6 +634,8 @@ export class SlotBar extends Component {
|
|||||||
this.setBtnEnable(this.addBtn, true);
|
this.setBtnEnable(this.addBtn, true);
|
||||||
this.setBtnEnable(this.menuBtn, true);
|
this.setBtnEnable(this.menuBtn, true);
|
||||||
this.setBtnEnable(this.autoBtn, true);
|
this.setBtnEnable(this.autoBtn, true);
|
||||||
|
this.setBtnEnable(this.subBtn, this.betIndex > 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onTurboMouseDown() {
|
onTurboMouseDown() {
|
||||||
@ -683,10 +702,6 @@ export class SlotBar extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
playSpin_lihua() {
|
|
||||||
this.spin_lihua.setAnimation(0, 'animation', false)
|
|
||||||
}
|
|
||||||
|
|
||||||
exitFreeSpin() {
|
exitFreeSpin() {
|
||||||
this.freeSpinBg.active = false;
|
this.freeSpinBg.active = false;
|
||||||
this.btns1.active = this.BTNS1_ACTIVE;
|
this.btns1.active = this.BTNS1_ACTIVE;
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import { gold2cash } from '../../Loading/scripts/comm';
|
|||||||
import { NodePoolManager } from '../../Loading/scripts/manager/NodePoolManager';
|
import { NodePoolManager } from '../../Loading/scripts/manager/NodePoolManager';
|
||||||
import { I18nManager } from '../../Loading/scripts/manager/I18nManager';
|
import { I18nManager } from '../../Loading/scripts/manager/I18nManager';
|
||||||
import { AudioManager } from '../../Loading/scripts/manager/AudioManager';
|
import { AudioManager } from '../../Loading/scripts/manager/AudioManager';
|
||||||
|
import { UpLayer } from './game/UpLayer';
|
||||||
let { ccclass, property } = _decorator;
|
let { ccclass, property } = _decorator;
|
||||||
|
|
||||||
//倍率瓶子的所在位置
|
//倍率瓶子的所在位置
|
||||||
@ -15,7 +16,7 @@ const multiPositionArr: Vec3[] = [
|
|||||||
new Vec3(-110, 35, 0),
|
new Vec3(-110, 35, 0),
|
||||||
new Vec3(60, 35, 0),
|
new Vec3(60, 35, 0),
|
||||||
new Vec3(230, 35, 0),
|
new Vec3(230, 35, 0),
|
||||||
new Vec3(380, 80, 0),
|
new Vec3(395, 80, 0),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -32,6 +33,9 @@ export class SlotGame extends Component {
|
|||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
multiPre: Prefab = null;
|
multiPre: Prefab = null;
|
||||||
|
|
||||||
|
@property(UpLayer)
|
||||||
|
upLayer: UpLayer = null;
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
multiLabelPre: Prefab = null;
|
multiLabelPre: Prefab = null;
|
||||||
|
|
||||||
@ -105,7 +109,7 @@ export class SlotGame extends Component {
|
|||||||
this.grayNode = this.node.getChildByName('grayNode');
|
this.grayNode = this.node.getChildByName('grayNode');
|
||||||
this.winLayer = this.node.getChildByName('winLayer');
|
this.winLayer = this.node.getChildByName('winLayer');
|
||||||
this.readyHand = this.node.getChildByName('readyHand');
|
this.readyHand = this.node.getChildByName('readyHand');
|
||||||
this.scatterLayer = this.node.getChildByName('scatterLayer');
|
this.scatterLayer = this.node.getChildByPath('scatterLayer')
|
||||||
|
|
||||||
this.winType = this.node.getChildByName('winType');
|
this.winType = this.node.getChildByName('winType');
|
||||||
|
|
||||||
@ -225,9 +229,15 @@ export class SlotGame extends Component {
|
|||||||
|
|
||||||
// 初始化滚轮数据
|
// 初始化滚轮数据
|
||||||
initRollerWithIcon(gameInfo: any) {
|
initRollerWithIcon(gameInfo: any) {
|
||||||
|
this.upLayer.hideAllLayer();
|
||||||
|
this.rollerManager.setUpLayer(this.upLayer);
|
||||||
this.gameInfo = gameInfo;
|
this.gameInfo = gameInfo;
|
||||||
this.spinData = this.gameInfo.Data;
|
this.spinData = this.gameInfo.Data;
|
||||||
this.rollerManager.initRollerWithIcon(this.spinData);
|
this.rollerManager.initRollerWithIcon(this.spinData);
|
||||||
|
this.rollerManager.vRollers.forEach((roller) => {
|
||||||
|
this.upLayer.syncSpecialFromRoller(roller);
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setRollerIconRule(rollerIconRule: any) {
|
setRollerIconRule(rollerIconRule: any) {
|
||||||
@ -239,6 +249,7 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
spin(isFree: boolean) {
|
spin(isFree: boolean) {
|
||||||
|
this.upLayer.giveBackAllSpecials(this.rollerManager);
|
||||||
AudioManager.instance.playSFX('Spin_Button_Click');
|
AudioManager.instance.playSFX('Spin_Button_Click');
|
||||||
this.setWaysCount('...');
|
this.setWaysCount('...');
|
||||||
if (!isFree) {
|
if (!isFree) {
|
||||||
@ -297,7 +308,7 @@ export class SlotGame extends Component {
|
|||||||
.call(() => {
|
.call(() => {
|
||||||
let totalMultiSpin = multNode.parent.getChildByName('totalMultiSpin')
|
let totalMultiSpin = multNode.parent.getChildByName('totalMultiSpin')
|
||||||
totalMultiSpin.active = true
|
totalMultiSpin.active = true
|
||||||
totalMultiSpin.setPosition(new Vec3((labelNode.children[posArr[0]].getPosition().x + labelNode.children[posArr[posArr.length - 1]].getPosition().x) / 2 + 115, -230, 0))
|
totalMultiSpin.setPosition(new Vec3((labelNode.children[posArr[0]].getPosition().x + labelNode.children[posArr[posArr.length - 1]].getPosition().x) / 2 + 115, isfree ? -170 : -230, 0))
|
||||||
totalMultiSpin.getComponent(Animation).play()
|
totalMultiSpin.getComponent(Animation).play()
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -323,11 +334,11 @@ export class SlotGame extends Component {
|
|||||||
AudioManager.instance.playSFX("multi_total_Sound")
|
AudioManager.instance.playSFX("multi_total_Sound")
|
||||||
let totalMulti = multNode.parent.getChildByName('totalMulti')
|
let totalMulti = multNode.parent.getChildByName('totalMulti')
|
||||||
totalMulti.active = true
|
totalMulti.active = true
|
||||||
totalMulti.setPosition(new Vec3((labelNode.children[posArr[0]].getPosition().x + labelNode.children[posArr[posArr.length - 1]].getPosition().x) / 2 + 115, -65, 0))
|
totalMulti.setPosition(new Vec3((labelNode.children[posArr[0]].getPosition().x + labelNode.children[posArr[posArr.length - 1]].getPosition().x) / 2 + 115, isfree ? 0 : -65, 0))
|
||||||
totalMulti.getComponent(Label).string = "x" + winMulti.toString()
|
totalMulti.getComponent(Label).string = "x" + winMulti.toString()
|
||||||
tween(totalMulti)
|
tween(totalMulti)
|
||||||
.delay(0.4)
|
.delay(0.4)
|
||||||
.to(0.4, { position: new Vec3(0, isfree ? -395 : -500, 0) })
|
.to(0.4, { position: new Vec3(0, isfree ? -370 : -500, 0) })
|
||||||
.call(() => {
|
.call(() => {
|
||||||
totalMulti.active = false
|
totalMulti.active = false
|
||||||
AudioManager.instance.playSFX('Appear__multi__Win_Sound');
|
AudioManager.instance.playSFX('Appear__multi__Win_Sound');
|
||||||
@ -578,10 +589,15 @@ export class SlotGame extends Component {
|
|||||||
if (this.rollerManager.checkNextRollerExpect(6, 3)) {
|
if (this.rollerManager.checkNextRollerExpect(6, 3)) {
|
||||||
AudioManager.instance.playSFX('Appear_Scatter_Sound_elimin', 1, true)
|
AudioManager.instance.playSFX('Appear_Scatter_Sound_elimin', 1, true)
|
||||||
this.rollerManager.iconFallDown(this.spinData, true);
|
this.rollerManager.iconFallDown(this.spinData, true);
|
||||||
|
this.scheduleOnce(() => {
|
||||||
|
this.node.getChildByName('awaitScatter').active = true
|
||||||
|
}, 0.2)
|
||||||
this.scheduleOnce(() => {
|
this.scheduleOnce(() => {
|
||||||
AudioManager.instance.stopAllSFX()
|
AudioManager.instance.stopAllSFX()
|
||||||
this.setWaysCount(this.spinData.Symbol.WaysNum);
|
this.setWaysCount(this.spinData.Symbol.WaysNum);
|
||||||
this.rollerManager.iconFallDown(this.spinData, false);
|
this.rollerManager.iconFallDown(this.spinData, false);
|
||||||
|
this.node.getChildByName('awaitScatter').active = false
|
||||||
|
|
||||||
}, 2.5)
|
}, 2.5)
|
||||||
} else {
|
} else {
|
||||||
this.scheduleOnce(() => {
|
this.scheduleOnce(() => {
|
||||||
@ -597,6 +613,8 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onRollerStop(rollerId: number) {
|
onRollerStop(rollerId: number) {
|
||||||
|
let roller = this.rollerManager.allRollers[rollerId];
|
||||||
|
this.upLayer.syncSpecialFromRoller(roller);
|
||||||
// if (rollerId < 1) return;
|
// if (rollerId < 1) return;
|
||||||
// 计算当前停止列之前的所有数字的乘积
|
// 计算当前停止列之前的所有数字的乘积
|
||||||
let totalWays = 1;
|
let totalWays = 1;
|
||||||
@ -627,6 +645,7 @@ export class SlotGame extends Component {
|
|||||||
|
|
||||||
// 新增:事件处理方法
|
// 新增:事件处理方法
|
||||||
onAllRollerIconsDeleted() {
|
onAllRollerIconsDeleted() {
|
||||||
|
this.upLayer.giveBackAllSpecials(this.rollerManager);
|
||||||
// 向上传递事件
|
// 向上传递事件
|
||||||
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_DELETED);
|
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_DELETED);
|
||||||
}
|
}
|
||||||
@ -637,6 +656,7 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onAllRollerIconsFallen() {
|
onAllRollerIconsFallen() {
|
||||||
|
this.upLayer.resetAndSyncAllSpecials(this.rollerManager);
|
||||||
// 向上传递事件
|
// 向上传递事件
|
||||||
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_FALLEN);
|
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_FALLEN);
|
||||||
}
|
}
|
||||||
@ -860,8 +880,9 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setFeatureBuyInteractable(isInteractable: boolean) {
|
setFeatureBuyInteractable(isInteractable: boolean) {
|
||||||
this.featureBuyNode.getComponent(Sprite).grayscale = !isInteractable;
|
// this.featureBuyNode.getComponent(Sprite).grayscale = !isInteractable;
|
||||||
this.featureBuyNode.getChildByName('FEATUREBUY').getComponent(Sprite).grayscale = !isInteractable;
|
// this.featureBuyNode.getChildByName('FEATUREBUY').getComponent(Sprite).grayscale = !isInteractable;
|
||||||
|
this.featureBuyNode.getComponent(UIOpacity).opacity = isInteractable ? 255 : 160
|
||||||
|
|
||||||
this.featureBuyNode.getComponent(Button).interactable = isInteractable;
|
this.featureBuyNode.getComponent(Button).interactable = isInteractable;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import { FreeSpinEnter } from "./game/FreeSpinEnter";
|
|||||||
import { FreeSpinAdd } from "./game/FreeSpinAdd";
|
import { FreeSpinAdd } from "./game/FreeSpinAdd";
|
||||||
import { SysGift } from "./game/SysGift";
|
import { SysGift } from "./game/SysGift";
|
||||||
import { ErrorManager } from "../../Loading/scripts/manager/ErrorManager";
|
import { ErrorManager } from "../../Loading/scripts/manager/ErrorManager";
|
||||||
|
import { SlotRanking } from "../SlotRanking/scripts/SlotRanking";
|
||||||
|
|
||||||
let { ccclass, property } = _decorator;
|
let { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ interface GameState {
|
|||||||
isInFreeSpin: boolean;
|
isInFreeSpin: boolean;
|
||||||
isOneRoundEnd: boolean;
|
isOneRoundEnd: boolean;
|
||||||
isDebug: boolean;
|
isDebug: boolean;
|
||||||
|
isFeatureBuySpin: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自动旋转配置接口
|
// 自动旋转配置接口
|
||||||
@ -51,7 +53,7 @@ interface AutoSpinConfig {
|
|||||||
export class SlotScene extends Component {
|
export class SlotScene extends Component {
|
||||||
// 组件引用
|
// 组件引用
|
||||||
@property(SlotGame)
|
@property(SlotGame)
|
||||||
private slotGame: SlotGame = null;
|
public slotGame: SlotGame = null;
|
||||||
|
|
||||||
@property(SlotBar)
|
@property(SlotBar)
|
||||||
private slotBar: SlotBar = null;
|
private slotBar: SlotBar = null;
|
||||||
@ -77,6 +79,9 @@ export class SlotScene extends Component {
|
|||||||
@property(SysGift)
|
@property(SysGift)
|
||||||
private SysGift: SysGift = null;
|
private SysGift: SysGift = null;
|
||||||
|
|
||||||
|
@property(SlotRanking)
|
||||||
|
slotRanking: SlotRanking = null;
|
||||||
|
|
||||||
// 游戏数据
|
// 游戏数据
|
||||||
private gameInfo: GameInfo = null;
|
private gameInfo: GameInfo = null;
|
||||||
private spinInfo: any = null;
|
private spinInfo: any = null;
|
||||||
@ -87,7 +92,7 @@ export class SlotScene extends Component {
|
|||||||
private objectId: string[] = [];
|
private objectId: string[] = [];
|
||||||
|
|
||||||
// 游戏状态管理
|
// 游戏状态管理
|
||||||
private gameState: GameState = {
|
public gameState: GameState = {
|
||||||
isOnReconnect: false,
|
isOnReconnect: false,
|
||||||
isAutoSpin: false,
|
isAutoSpin: false,
|
||||||
isEliminating: false,
|
isEliminating: false,
|
||||||
@ -95,6 +100,7 @@ export class SlotScene extends Component {
|
|||||||
isFirstFreeSpin: false,
|
isFirstFreeSpin: false,
|
||||||
isInFreeSpin: false,
|
isInFreeSpin: false,
|
||||||
isOneRoundEnd: false,
|
isOneRoundEnd: false,
|
||||||
|
isFeatureBuySpin: false,
|
||||||
isDebug: false,
|
isDebug: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -110,10 +116,12 @@ export class SlotScene extends Component {
|
|||||||
batchingTimer: number = 0;
|
batchingTimer: number = 0;
|
||||||
isErr: boolean = false;
|
isErr: boolean = false;
|
||||||
|
|
||||||
|
|
||||||
async start() {
|
async start() {
|
||||||
|
this.slotRanking.node.active = true
|
||||||
|
this.slotRanking.setSlotScene(this);
|
||||||
|
|
||||||
await this.init();
|
await this.init();
|
||||||
// this.TotalWin.show(505000, 8)
|
// this.TotalWin.show(505000, 10)
|
||||||
// this.FreeSpinEnter.show(8)
|
// this.FreeSpinEnter.show(8)
|
||||||
// this.FreeSpinAdd.show(5)
|
// this.FreeSpinAdd.show(5)
|
||||||
// this.BigWinUI.show(800000, WIN_TYPE.SUPER_MEGA_WIN, 10000)
|
// this.BigWinUI.show(800000, WIN_TYPE.SUPER_MEGA_WIN, 10000)
|
||||||
@ -212,6 +220,9 @@ export class SlotScene extends Component {
|
|||||||
}
|
}
|
||||||
this.slotBar.reconnectState(true);
|
this.slotBar.reconnectState(true);
|
||||||
this.slotGame.changeBg(this.gameState.isInFreeSpin);
|
this.slotGame.changeBg(this.gameState.isInFreeSpin);
|
||||||
|
// this.slotGame.rollerManager.checkNextRollerExpect(6, 1)
|
||||||
|
// this.slotGame.showScatterOnIsScroll();
|
||||||
|
|
||||||
if (this.gameState.isInFreeSpin) {
|
if (this.gameState.isInFreeSpin) {
|
||||||
AudioManager.instance.playBGM("Free_Mode_BGM");
|
AudioManager.instance.playBGM("Free_Mode_BGM");
|
||||||
} else {
|
} else {
|
||||||
@ -262,6 +273,8 @@ export class SlotScene extends Component {
|
|||||||
this.node.addChild(panel);
|
this.node.addChild(panel);
|
||||||
featureBuy.show(this.slotBar.getBet(), this.gameInfo.BuyMul, () => {
|
featureBuy.show(this.slotBar.getBet(), this.gameInfo.BuyMul, () => {
|
||||||
this.spinBtnClick(false, true);
|
this.spinBtnClick(false, true);
|
||||||
|
this.gameState.isFeatureBuySpin = true;
|
||||||
|
|
||||||
this.slotBar.featureBuySpin();
|
this.slotBar.featureBuySpin();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -290,14 +303,9 @@ export class SlotScene extends Component {
|
|||||||
} else {
|
} else {
|
||||||
if (!isFreeSpin) {
|
if (!isFreeSpin) {
|
||||||
if (!isFeatureBuy) {
|
if (!isFeatureBuy) {
|
||||||
this.slotBar.setBalance(
|
this.slotBar.setBalance(this.slotBar.getBalance() - this.slotBar.getBet());
|
||||||
this.slotBar.getBalance() - this.slotBar.getBet()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
this.slotBar.setBalance(
|
this.slotBar.setBalance(this.slotBar.getBalance() - (this.slotBar.getBet() * this.gameInfo.BuyMul));
|
||||||
this.slotBar.getBalance() -
|
|
||||||
this.slotBar.getBet() * this.gameInfo.BuyMul
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -313,32 +321,33 @@ export class SlotScene extends Component {
|
|||||||
IsBuy: true,
|
IsBuy: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.gameState.isDebug) {
|
if (!this.gameState.isDebug) {
|
||||||
this.spinInfo = await callGameApi("spin", msg);
|
this.spinInfo = await callGameApi("spin", msg);
|
||||||
|
this.slotBar.allowClickManualStop(true)
|
||||||
|
this.slotBar.notAllowClickManualStop(false)
|
||||||
if (this.spinInfo.Frb.Ongoing) {
|
if (this.spinInfo.Frb.Ongoing) {
|
||||||
if (this.gameState.isAutoSpin) {
|
if (!isFreeSpin) {
|
||||||
this.slotBar.closeAutoSpin();
|
let count = this.spinInfo.Frb.Ongoing.Frn;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GameDataManager.instance.frb = this.spinInfo.Frb;
|
|
||||||
if (frb) {
|
|
||||||
let count = 0;
|
|
||||||
|
|
||||||
if (frb.Ongoing != null) {
|
|
||||||
count = frb.Ongoing.Frn - 1;
|
|
||||||
}
|
|
||||||
if (frb.Finished != null) {
|
|
||||||
count = frb.Finished.Frn;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (count <= 0) {
|
if (count <= 0) {
|
||||||
count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
this.SysGift.handleSysInfoFreeCount(count);
|
this.SysGift.handleSysInfoFreeCount(count);
|
||||||
}
|
}
|
||||||
|
if (this.gameState.isAutoSpin) {
|
||||||
|
this.slotBar.closeAutoSpin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.spinInfo.Frb.Finished) {
|
||||||
|
if (!isFreeSpin) {
|
||||||
|
let count = this.spinInfo.Frb.Finished.Frn;
|
||||||
|
if (count <= 0) {
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
this.SysGift.handleSysInfoFreeCount(count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GameDataManager.instance.frb = this.spinInfo.Frb;
|
||||||
} else {
|
} else {
|
||||||
this.spinInfo = null;
|
this.spinInfo = null;
|
||||||
}
|
}
|
||||||
@ -377,9 +386,9 @@ export class SlotScene extends Component {
|
|||||||
if (!this.isReceiveMsg) return;
|
if (!this.isReceiveMsg) return;
|
||||||
|
|
||||||
// 免费游戏不能手动停止
|
// 免费游戏不能手动停止
|
||||||
if (this.gameState.isInFreeSpin) {
|
// if (this.gameState.isInFreeSpin) {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 滚轮没有开始旋转的时候不能停止
|
// 滚轮没有开始旋转的时候不能停止
|
||||||
if (!this.slotGame.isScroll()) return;
|
if (!this.slotGame.isScroll()) return;
|
||||||
@ -499,6 +508,8 @@ export class SlotScene extends Component {
|
|||||||
allRollerStop() {
|
allRollerStop() {
|
||||||
this.slotGame.setFastSpin(this.gameState.isFastSpin);
|
this.slotGame.setFastSpin(this.gameState.isFastSpin);
|
||||||
this.checkHasGame();
|
this.checkHasGame();
|
||||||
|
// this.slotGame.rollerManager.checkNextRollerExpect(6, 1)
|
||||||
|
// this.slotGame.showScatterOnIsScroll();
|
||||||
// this.TotalWin.show(35, () => {
|
// this.TotalWin.show(35, () => {
|
||||||
// this.slotBar.resetAllState();
|
// this.slotBar.resetAllState();
|
||||||
// });
|
// });
|
||||||
@ -777,6 +788,8 @@ export class SlotScene extends Component {
|
|||||||
isReconnect: boolean = false
|
isReconnect: boolean = false
|
||||||
) {
|
) {
|
||||||
this.gameState.isFirstFreeSpin = false;
|
this.gameState.isFirstFreeSpin = false;
|
||||||
|
this.gameState.isFeatureBuySpin = false;
|
||||||
|
|
||||||
this.gameState.isInFreeSpin = false;
|
this.gameState.isInFreeSpin = false;
|
||||||
this.slotBar.exitFreeSpin();
|
this.slotBar.exitFreeSpin();
|
||||||
|
|
||||||
@ -875,10 +888,6 @@ export class SlotScene extends Component {
|
|||||||
// delay = 1.2
|
// delay = 1.2
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//小游戏内单次滚动结算中奖时触发一个礼花特效
|
|
||||||
if (isFreeSpin) {
|
|
||||||
this.slotBar.playSpin_lihua()
|
|
||||||
}
|
|
||||||
|
|
||||||
this.scheduleOnce(() => {
|
this.scheduleOnce(() => {
|
||||||
|
|
||||||
@ -975,6 +984,14 @@ export class SlotScene extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 5:
|
||||||
|
msg1 = I18nManager.instance.t('AID_ERROR_CONTENT_4');
|
||||||
|
msg2 = I18nManager.instance.t('AID_ERROR_CODE_4');
|
||||||
|
tip = `${msg1}\n${msg2}`;
|
||||||
|
if (!this.TipPanel.getHasTip()) {
|
||||||
|
this.TipPanel.showTip(title, tip, () => { window.close() }, () => { callback?.(); }, I18nManager.instance.t('AID_ERROR_QUIT_BUTTON'), I18nManager.instance.t('AID_ERROR_RETRY_BUTTON'), true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@ export class Info {
|
|||||||
receiveStopData: boolean = false;// 是否收到停止数据
|
receiveStopData: boolean = false;// 是否收到停止数据
|
||||||
speedDataComplete: boolean = false;// 速度数据是否完成
|
speedDataComplete: boolean = false;// 速度数据是否完成
|
||||||
stopSpeedData: number[][] = null;// 停止时的速度数据
|
stopSpeedData: number[][] = null;// 停止时的速度数据
|
||||||
|
hasStopScrollWork: boolean = false;
|
||||||
state: ROLLER_STATE = ROLLER_STATE.STOP; // 当前状态
|
state: ROLLER_STATE = ROLLER_STATE.STOP; // 当前状态
|
||||||
isFastSpin: boolean = false; // 是否快速旋转
|
isFastSpin: boolean = false; // 是否快速旋转
|
||||||
isManualStop: boolean = false; // 是否手动停止
|
isManualStop: boolean = false; // 是否手动停止
|
||||||
@ -47,6 +48,7 @@ export class Info {
|
|||||||
this.speed = 0;
|
this.speed = 0;
|
||||||
this.stopSpeedData = null;
|
this.stopSpeedData = null;
|
||||||
this.isManualStop = false;
|
this.isManualStop = false;
|
||||||
|
this.hasStopScrollWork = false;
|
||||||
this.speedDataComplete = false;
|
this.speedDataComplete = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,7 +70,7 @@ export abstract class BaseRoller extends Component {
|
|||||||
iconFactory: IconFactory = null;
|
iconFactory: IconFactory = null;
|
||||||
|
|
||||||
// 保护属性,子类可访问
|
// 保护属性,子类可访问
|
||||||
protected _rollerId: number = 0;
|
_rollerId: number = 0;
|
||||||
protected _view: Node = null;
|
protected _view: Node = null;
|
||||||
protected _content: Node = null;
|
protected _content: Node = null;
|
||||||
protected _info: Info = new Info();
|
protected _info: Info = new Info();
|
||||||
@ -389,15 +391,15 @@ export abstract class BaseRoller extends Component {
|
|||||||
* 停止滚动
|
* 停止滚动
|
||||||
* @param data 停止时的图标数据
|
* @param data 停止时的图标数据
|
||||||
*/
|
*/
|
||||||
stopScroll(data: number[], stopSpeedData: number[][]) {
|
// stopScroll(data: number[], stopSpeedData: number[][]) {
|
||||||
this._stopData = data;
|
// this._stopData = data;
|
||||||
this._info.receiveStopData = true;
|
// this._info.receiveStopData = true;
|
||||||
|
|
||||||
// 如果速度数据已完成,执行停止逻辑
|
// // 如果速度数据已完成,执行停止逻辑
|
||||||
if (this._info.speedDataComplete) {
|
// if (this._info.speedDataComplete) {
|
||||||
this.stopScrollWork(stopSpeedData);
|
// this.stopScrollWork(stopSpeedData);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -606,7 +608,7 @@ export abstract class BaseRoller extends Component {
|
|||||||
return null; // 返回安全的默认值
|
return null; // 返回安全的默认值
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._content.getComponent(UITransform).convertToWorldSpaceAR(icon.position);
|
return icon.getWorldPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -389,6 +389,11 @@ export class BigWinUI extends Component {
|
|||||||
this.unscheduleAllCallbacks();
|
this.unscheduleAllCallbacks();
|
||||||
this.currentScore = this.winScore;
|
this.currentScore = this.winScore;
|
||||||
this.updateScoreLabel();
|
this.updateScoreLabel();
|
||||||
|
this.bigWinAudio.stop();
|
||||||
|
this.bigWinAudio.clip = this.bigWinAudioClips[3];
|
||||||
|
if (!AudioManager.instance.getMuted()) {
|
||||||
|
this.bigWinAudio.play();
|
||||||
|
}
|
||||||
this.endAni();
|
this.endAni();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,7 @@ export class FreeSpinAdd extends Component {
|
|||||||
|
|
||||||
let titleNode = this.freeSpinAddSpine.node.getChildByName('TitleNode');
|
let titleNode = this.freeSpinAddSpine.node.getChildByName('TitleNode');
|
||||||
this.freeSpinEnterTitleSp = titleNode.getChildByName('SpriteFREESPINWON').getComponent(Sprite);
|
this.freeSpinEnterTitleSp = titleNode.getChildByName('SpriteFREESPINWON').getComponent(Sprite);
|
||||||
|
this.freeSpinAddUI.on(Node.EventType.TOUCH_START, this.onTouch, this);
|
||||||
|
|
||||||
this.freeCount = freeCount;
|
this.freeCount = freeCount;
|
||||||
this.freeCountLabel.string = `+ ${freeCount}`;
|
this.freeCountLabel.string = `+ ${freeCount}`;
|
||||||
@ -34,6 +35,14 @@ export class FreeSpinAdd extends Component {
|
|||||||
this.closeCallBack = closeCallBack;
|
this.closeCallBack = closeCallBack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async onTouch() {
|
||||||
|
if (!this.freeSpinAddUI) return; // 添加节点存在检查
|
||||||
|
|
||||||
|
this.onClose()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
playAnimation() {
|
playAnimation() {
|
||||||
this.freeSpinAddSpine.clearTracks();
|
this.freeSpinAddSpine.clearTracks();
|
||||||
this.freeSpinAddSpine.setAnimation(0, 'animation', true);
|
this.freeSpinAddSpine.setAnimation(0, 'animation', true);
|
||||||
|
|||||||
@ -236,7 +236,7 @@ export class HistoryDetail extends Component {
|
|||||||
|
|
||||||
info.getChildByName("Label_Bet").getComponent(Label).string = getTranslate(this.dict, "Bet") + `(${currencySymbol})`;
|
info.getChildByName("Label_Bet").getComponent(Label).string = getTranslate(this.dict, "Bet") + `(${currencySymbol})`;
|
||||||
|
|
||||||
info.getChildByName("txt_profit").getComponent(Label).string = fixNum(pan.WinInfo ? pan.WinInfo.Score : 0);
|
info.getChildByName("txt_profit").getComponent(Label).string = fixNum(pan.Profit);
|
||||||
info.getChildByName("Label_Profit").getComponent(Label).string = getTranslate(this.dict, "Profit") + `(${currencySymbol})`;
|
info.getChildByName("Label_Profit").getComponent(Label).string = getTranslate(this.dict, "Profit") + `(${currencySymbol})`;
|
||||||
|
|
||||||
info.getChildByName("txt_balance_before").getComponent(Label).string = fixNum(pan.Balance - pan.AllScore + pan.Bet) + "➡️";
|
info.getChildByName("txt_balance_before").getComponent(Label).string = fixNum(pan.Balance - pan.AllScore + pan.Bet) + "➡️";
|
||||||
@ -432,7 +432,7 @@ export class HistoryDetail extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scatter 数量统计 node_scatter
|
// scatter 数量统计 node_scatter
|
||||||
if (pan.Symbol.ScNum >= 4 && pan.Free.GamesTimes >= 10) {
|
if (pan.Symbol.ScNum >= 4 && (pan.Free && pan.Free.GamesTimes >= 10)) {
|
||||||
const node_scatter = content.getChildByName("node_scatter")
|
const node_scatter = content.getChildByName("node_scatter")
|
||||||
const txt_scatter_num = node_scatter.getChildByName("txt_scatter_num").getComponent(Label)
|
const txt_scatter_num = node_scatter.getChildByName("txt_scatter_num").getComponent(Label)
|
||||||
txt_scatter_num.string = "x " + pan.Symbol.ScNum
|
txt_scatter_num.string = "x " + pan.Symbol.ScNum
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import { _decorator, Component, Node, Prefab, sp, Sprite, UITransform, Vec3, v3,
|
|||||||
import { ICON_STATE, ICON_WIDTH } from './Define';
|
import { ICON_STATE, ICON_WIDTH } from './Define';
|
||||||
import { GameDataManager } from 'db://assets/Loading/scripts/manager/GameDataManager';
|
import { GameDataManager } from 'db://assets/Loading/scripts/manager/GameDataManager';
|
||||||
import { NodePoolManager } from 'db://assets/Loading/scripts/manager/NodePoolManager';
|
import { NodePoolManager } from 'db://assets/Loading/scripts/manager/NodePoolManager';
|
||||||
|
import { RollerManager } from './RollerManager';
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
|
|
||||||
@ -302,6 +303,18 @@ export class Icon extends Component {
|
|||||||
transform.width = ICON_WIDTH;
|
transform.width = ICON_WIDTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// let rollerManager = this.node.parent.parent.parent.parent.parent.parent.getComponent(RollerManager)
|
||||||
|
// let scatterLayer = rollerManager.node.parent.getChildByName('scatterLayer')
|
||||||
|
// if (this._iconId == 1) {
|
||||||
|
// let worldPos = rollerManager.getIconWorldPosition(pos);
|
||||||
|
// let localPos = scatterLayer.getComponent(UITransform).convertToNodeSpaceAR(worldPos);
|
||||||
|
// this.node.parent = scatterLayer;
|
||||||
|
// this.node.setPosition(localPos);
|
||||||
|
// }
|
||||||
|
// if (this._iconId == 1) {
|
||||||
|
// this.node.parent = scatterLayer;
|
||||||
|
// this.node.setPosition(this.getWorldPosition());
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
// 重置状态
|
// 重置状态
|
||||||
@ -443,6 +456,11 @@ export class Icon extends Component {
|
|||||||
if (!this.iconSpine || !this.iconSpine.node) return;
|
if (!this.iconSpine || !this.iconSpine.node) return;
|
||||||
|
|
||||||
this.iconSpine.node.active = true;
|
this.iconSpine.node.active = true;
|
||||||
|
if (this._isWildOrScatter) {
|
||||||
|
this.iconSpine.timeScale = 1
|
||||||
|
this.iconSpine.clearTracks()
|
||||||
|
this.iconSpine.setAnimation(0, `${this.lHeight}_1`, true);
|
||||||
|
}
|
||||||
this._normalSpriteNode && (this._normalSpriteNode.active = false);
|
this._normalSpriteNode && (this._normalSpriteNode.active = false);
|
||||||
|
|
||||||
// 使用计时器回调而不是匿名函数,减少闭包
|
// 使用计时器回调而不是匿名函数,减少闭包
|
||||||
@ -457,10 +475,12 @@ export class Icon extends Component {
|
|||||||
private playSpawnAnimation() {
|
private playSpawnAnimation() {
|
||||||
if (!this.iconSpine) return;
|
if (!this.iconSpine) return;
|
||||||
|
|
||||||
if (this._isWildOrScatter) {
|
// if (this._isWildOrScatter) {
|
||||||
this.iconSpine.timeScale = 1
|
// this.iconSpine.timeScale = 1
|
||||||
this.iconSpine.setAnimation(0, `${this.lHeight}_1`, true);
|
// this.iconSpine.clearTracks()
|
||||||
} else if (this._isQKJ) {
|
// this.iconSpine.setAnimation(0, `${this.lHeight}_1`, true);
|
||||||
|
// } else
|
||||||
|
if (this._isQKJ) {
|
||||||
this.iconSpine.setAnimation(0, "animation", false);
|
this.iconSpine.setAnimation(0, "animation", false);
|
||||||
} else {
|
} else {
|
||||||
this.iconSpine.setAnimation(0, "tan", false);
|
this.iconSpine.setAnimation(0, "tan", false);
|
||||||
|
|||||||
@ -14,6 +14,9 @@ export class IconMsg extends Component {
|
|||||||
@property(Node)
|
@property(Node)
|
||||||
rightNode: Node = null;
|
rightNode: Node = null;
|
||||||
|
|
||||||
|
@property([SpriteFrame])
|
||||||
|
zxkFrames: SpriteFrame[] = [];
|
||||||
|
|
||||||
iconComponent: Icon = null;
|
iconComponent: Icon = null;
|
||||||
|
|
||||||
ui_payout: Node = null;
|
ui_payout: Node = null;
|
||||||
@ -60,6 +63,9 @@ export class IconMsg extends Component {
|
|||||||
this.ui_payout_wild.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
this.ui_payout_wild.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
||||||
this.ui_payout_scatter.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
this.ui_payout_scatter.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
||||||
|
|
||||||
|
this.ui_payout.getComponent(Sprite).spriteFrame = this.zxkFrames[iconComponent.lHeight - 1]
|
||||||
|
this.ui_payout_wild.getComponent(Sprite).spriteFrame = this.zxkFrames[iconComponent.lHeight - 1]
|
||||||
|
this.ui_payout_scatter.getComponent(Sprite).spriteFrame = this.zxkFrames[iconComponent.lHeight - 1]
|
||||||
|
|
||||||
this.right_ui_payout = this.rightNode.getChildByName('ui_payout');
|
this.right_ui_payout = this.rightNode.getChildByName('ui_payout');
|
||||||
this.right_ui_payout_wild = this.rightNode.getChildByName('ui_payout_wild');
|
this.right_ui_payout_wild = this.rightNode.getChildByName('ui_payout_wild');
|
||||||
@ -73,6 +79,9 @@ export class IconMsg extends Component {
|
|||||||
this.right_ui_payout_wild.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
this.right_ui_payout_wild.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
||||||
this.right_ui_payout_scatter.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
this.right_ui_payout_scatter.getComponent(UITransform).height = this.HEIGHT_MAP[iconComponent.lHeight];
|
||||||
|
|
||||||
|
this.right_ui_payout.getComponent(Sprite).spriteFrame = this.zxkFrames[iconComponent.lHeight - 1]
|
||||||
|
this.right_ui_payout_wild.getComponent(Sprite).spriteFrame = this.zxkFrames[iconComponent.lHeight - 1]
|
||||||
|
this.right_ui_payout_scatter.getComponent(Sprite).spriteFrame = this.zxkFrames[iconComponent.lHeight - 1]
|
||||||
|
|
||||||
this.ui_payout.active = false;
|
this.ui_payout.active = false;
|
||||||
this.ui_payout_wild.active = false;
|
this.ui_payout_wild.active = false;
|
||||||
|
|||||||
@ -226,23 +226,53 @@ export class Roller extends BaseRoller {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stopScroll(panData: number[], stopSpeedDataExpect?: number[][]) {
|
||||||
|
this._stopData = panData;
|
||||||
|
|
||||||
|
let stopSpeedData = [];
|
||||||
|
if (stopSpeedDataExpect) {
|
||||||
|
stopSpeedData = stopSpeedDataExpect;
|
||||||
|
} else {
|
||||||
|
let rollerSpeed = this.row * this.iconHeight / 0.1 * 175;
|
||||||
|
stopSpeedData = this._info.isFastSpin ? [[0, rollerSpeed]] : [[0.4, 5500]];
|
||||||
|
}
|
||||||
|
|
||||||
|
this._info.receiveStopData = true;
|
||||||
|
if (this._info.speedDataComplete) {
|
||||||
|
this.stopScrollWork(stopSpeedData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getNodeMsgFromPos(pos: number): { node: Node, start: number, height: number } | null {
|
||||||
|
let iconNode = this.getIconNode(pos);
|
||||||
|
if (!iconNode) return null;
|
||||||
|
|
||||||
|
let start = iconNode.getComponent(Icon).startPos;
|
||||||
|
let height = iconNode.getComponent(Icon).lHeight;
|
||||||
|
|
||||||
|
return { node: iconNode, start: start, height: height };
|
||||||
|
}
|
||||||
|
|
||||||
|
stopScrollWork(stopSpeedData: number[][]) {
|
||||||
|
this._info.hasStopScrollWork = true;
|
||||||
|
this.changeState(ROLLER_STATE.DECELERATE);
|
||||||
|
this._info.stopSpeedData = stopSpeedData;
|
||||||
|
this.tweenSpeed(this._info.stopSpeedData, () => {
|
||||||
|
this.changeState(ROLLER_STATE.LAST_PAGE_CREATE);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 手动停止滚动
|
* 手动停止滚动
|
||||||
* @param data 停止时的图标数据
|
* @param data 停止时的图标数据
|
||||||
*/
|
*/
|
||||||
async manualStopScroll(data: number[]) {
|
async manualStopScroll(data: number[]) {
|
||||||
if (this._info.isManualStop ||
|
this.resetInfo();
|
||||||
this._info.state === ROLLER_STATE.STOP) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
this._info.resetLxInfo();
|
|
||||||
this._stopData = data;
|
this._stopData = data;
|
||||||
this._info.isManualStop = true;
|
this._info.isManualStop = true;
|
||||||
Tween.stopAllByTarget(this._info.speedNode);
|
Tween.stopAllByTarget(this._info.speedNode);
|
||||||
|
|
||||||
// 直接回收所有动态图标
|
// 回收所有动态图标
|
||||||
while (this._info.icons.length > 0) {
|
while (this._info.icons.length > 0) {
|
||||||
let icon = this._info.icons.pop();
|
let icon = this._info.icons.pop();
|
||||||
this.iconFactory.recycleIcon(icon);
|
this.iconFactory.recycleIcon(icon);
|
||||||
@ -257,14 +287,8 @@ export class Roller extends BaseRoller {
|
|||||||
this.iconFactory.recycleIcon(icon);
|
this.iconFactory.recycleIcon(icon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this._allIcons.clear();
|
|
||||||
this._posToIconKey.clear();
|
|
||||||
|
|
||||||
this.createInitIcons(data);
|
this.createInitIcons(data);
|
||||||
// 为所有创建的图标播放动画
|
|
||||||
for (let icon of this._allIcons.values()) {
|
|
||||||
icon.getComponent(Icon).playSpawnAni();
|
|
||||||
}
|
|
||||||
this.changeState(ROLLER_STATE.STOP);
|
this.changeState(ROLLER_STATE.STOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -43,6 +43,8 @@ export class RollerManager extends Component {
|
|||||||
{ row: 5, col: 1 },
|
{ row: 5, col: 1 },
|
||||||
{ row: 5, col: 1 },
|
{ row: 5, col: 1 },
|
||||||
];
|
];
|
||||||
|
upLayer: any = null;
|
||||||
|
|
||||||
// 竖向滚轮数组
|
// 竖向滚轮数组
|
||||||
vRollers: Roller[] = [];
|
vRollers: Roller[] = [];
|
||||||
// 滚轮数组
|
// 滚轮数组
|
||||||
@ -112,7 +114,7 @@ export class RollerManager extends Component {
|
|||||||
let UIComponent = maskNode.addComponent(UITransform);
|
let UIComponent = maskNode.addComponent(UITransform);
|
||||||
comp.type = Mask.Type.GRAPHICS_RECT;
|
comp.type = Mask.Type.GRAPHICS_RECT;
|
||||||
|
|
||||||
UIComponent.setContentSize(1040, 840)
|
UIComponent.setContentSize(1040, 830)
|
||||||
return maskNode;
|
return maskNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,6 +136,10 @@ export class RollerManager extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setUpLayer(upLayer: any) {
|
||||||
|
this.upLayer = upLayer;
|
||||||
|
}
|
||||||
|
|
||||||
registerEvent() {
|
registerEvent() {
|
||||||
for (let lx = 0; lx < this.allRollers.length; lx++) {
|
for (let lx = 0; lx < this.allRollers.length; lx++) {
|
||||||
let roller = this.allRollers[lx];
|
let roller = this.allRollers[lx];
|
||||||
@ -268,8 +274,12 @@ export class RollerManager extends Component {
|
|||||||
AudioManager.instance.playSFX('Appear_Scatter_Sound');
|
AudioManager.instance.playSFX('Appear_Scatter_Sound');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isWild && !isScatter && this._isFastSpin) {
|
if (!isWild && !isScatter) {
|
||||||
AudioManager.instance.playSFX('Scroll_Stop_Sound');
|
if (this._isFastSpin) {
|
||||||
|
AudioManager.instance.playSFX('Scroll_Stop_Sound_fast');
|
||||||
|
} else {
|
||||||
|
AudioManager.instance.playSFX('Scroll_Stop_Sound_normal');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,18 +520,9 @@ export class RollerManager extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
frameOrder.forEach(({ frame, ids }) => {
|
this.allRollers.forEach(roller => {
|
||||||
let delay = Math.max(0, (frame - 1) / fps);
|
|
||||||
ids.forEach(id => {
|
|
||||||
let roller = this.allRollers[id];
|
|
||||||
if (roller) {
|
|
||||||
this.scheduleOnce(() => {
|
|
||||||
if (this._isManualStop) return;
|
|
||||||
roller.startScroll();
|
roller.startScroll();
|
||||||
}, delay);
|
})
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,6 +572,8 @@ export class RollerManager extends Component {
|
|||||||
roller.setCroSymbols(rollerCroSymbols);
|
roller.setCroSymbols(rollerCroSymbols);
|
||||||
roller.manualStopScroll(stopData)
|
roller.manualStopScroll(stopData)
|
||||||
}
|
}
|
||||||
|
this.upLayer.resetAndSyncAllSpecials(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 对服务器下发的数据进行操作
|
// 对服务器下发的数据进行操作
|
||||||
@ -638,6 +641,7 @@ export class RollerManager extends Component {
|
|||||||
uniquePositions.forEach(pos => {
|
uniquePositions.forEach(pos => {
|
||||||
let iconNode = this.getIconNode(pos);
|
let iconNode = this.getIconNode(pos);
|
||||||
if (iconNode) {
|
if (iconNode) {
|
||||||
|
this.upLayer.removeSpecialByNode(iconNode);
|
||||||
// 保存原始父节点和位置信息到Map中
|
// 保存原始父节点和位置信息到Map中
|
||||||
this.winIconNodeMap.set(pos, {
|
this.winIconNodeMap.set(pos, {
|
||||||
node: iconNode,
|
node: iconNode,
|
||||||
|
|||||||
@ -28,13 +28,6 @@ export class SysGift extends Component {
|
|||||||
|
|
||||||
onLoad(): void {
|
onLoad(): void {
|
||||||
this.hideAll();
|
this.hideAll();
|
||||||
let sp_win = this.info.getChildByName("sysgift_win")
|
|
||||||
|
|
||||||
|
|
||||||
sp_win.getComponent(LocalizedSprite).fetchRender();
|
|
||||||
let scale = 116 / sp_win.getComponent(Sprite).spriteFrame.width;
|
|
||||||
sp_win.setScale(scale, scale, scale);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hideAll() {
|
hideAll() {
|
||||||
@ -53,9 +46,10 @@ export class SysGift extends Component {
|
|||||||
|
|
||||||
let txt_spin_num = this.info.getChildByName("count")
|
let txt_spin_num = this.info.getChildByName("count")
|
||||||
txt_spin_num.getComponent(Label).string = (frb.Ongoing.Frn.toLocaleString())
|
txt_spin_num.getComponent(Label).string = (frb.Ongoing.Frn.toLocaleString())
|
||||||
|
let sp_win = this.info.getChildByName("sysgift_win")
|
||||||
let txt_win = this.info.getChildByName("win")
|
let txt_win = this.info.getChildByName("win")
|
||||||
|
let scale = 116 / sp_win.getComponent(Sprite).spriteFrame.width;
|
||||||
|
sp_win.setScale(scale, scale, scale);
|
||||||
|
|
||||||
let num = Math.round(frb.Ongoing.Fra * 100 + 1e-6) / 100;
|
let num = Math.round(frb.Ongoing.Fra * 100 + 1e-6) / 100;
|
||||||
txt_win.getComponent(Label).string = num.toLocaleString('en-US', {
|
txt_win.getComponent(Label).string = num.toLocaleString('en-US', {
|
||||||
|
|||||||
99
assets/Game/scripts/game/UpLayer.ts
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
import { _decorator, Component, instantiate, Node, sp, tween, UIOpacity, UITransform, v3 } from 'cc';
|
||||||
|
import { PREVIEW } from 'cc/env';
|
||||||
|
import { Icon } from './Icon';
|
||||||
|
import { Roller } from './Roller';
|
||||||
|
import { RollerManager } from './RollerManager';
|
||||||
|
let { ccclass, property } = _decorator;
|
||||||
|
|
||||||
|
@ccclass('UpLayer')
|
||||||
|
export class UpLayer extends Component {
|
||||||
|
|
||||||
|
@property(Node)
|
||||||
|
wildLayer: Node = null;
|
||||||
|
|
||||||
|
@property(Node)
|
||||||
|
scatterLayer: Node = null;
|
||||||
|
|
||||||
|
|
||||||
|
// 统一隐藏所有层
|
||||||
|
hideAllLayer() {
|
||||||
|
this.wildLayer.active = false;
|
||||||
|
this.scatterLayer.active = false;
|
||||||
|
}
|
||||||
|
// ---------------------------------------readyHandNode、scatterLayer、wildLayer相关 ---------------------------------------
|
||||||
|
adopted = new Map<Node, { rollerId: number; startPos: number; height: number; type: 'wild' | 'scatter' }>();
|
||||||
|
|
||||||
|
|
||||||
|
setSpecialLayersActive() {
|
||||||
|
let hasWild = Array.from(this.adopted.values()).some(v => v.type === 'wild');
|
||||||
|
let hasScatter = Array.from(this.adopted.values()).some(v => v.type === 'scatter');
|
||||||
|
this.wildLayer.active = hasWild;
|
||||||
|
this.scatterLayer.active = hasScatter;
|
||||||
|
}
|
||||||
|
|
||||||
|
adoptSpecial(node: Node, rollerId: number, startPos: number, height: number, type: 'wild' | 'scatter') {
|
||||||
|
if (!node || !node.isValid) return;
|
||||||
|
if (this.adopted.has(node)) return;
|
||||||
|
|
||||||
|
let wp = node.worldPosition.clone();
|
||||||
|
let layer = type === 'wild' ? this.wildLayer : this.scatterLayer;
|
||||||
|
layer.active = true;
|
||||||
|
|
||||||
|
node.parent = layer;
|
||||||
|
node.setWorldPosition(wp);
|
||||||
|
node.setSiblingIndex(9999);
|
||||||
|
|
||||||
|
this.adopted.set(node, { rollerId, startPos, height, type });
|
||||||
|
this.setSpecialLayersActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增量同步某列(停轮/单列落定时可用)
|
||||||
|
syncSpecialFromRoller(roller: Roller) {
|
||||||
|
if (!roller) return;
|
||||||
|
let seen = new Set<Node>();
|
||||||
|
for (let i = 0; i < roller.row; i++) {
|
||||||
|
let n = (roller as any).getIconNode(i);
|
||||||
|
if (!n || seen.has(n)) continue;
|
||||||
|
seen.add(n);
|
||||||
|
|
||||||
|
let icon = n.getComponent(Icon);
|
||||||
|
if (!icon || !icon._isWildOrScatter) continue;
|
||||||
|
|
||||||
|
let msg = (roller as any).getNodeMsgFromPos(i);
|
||||||
|
if (!msg) continue;
|
||||||
|
|
||||||
|
let type: 'wild' | 'scatter' = icon.index === 0 ? 'wild' : 'scatter';
|
||||||
|
this.adoptSpecial(msg.node, roller._rollerId, msg.start, msg.height, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除前:去登记,避免后续“归还”
|
||||||
|
removeSpecialByNode(node: Node) {
|
||||||
|
if (!node) return;
|
||||||
|
if (this.adopted.delete(node)) this.setSpecialLayersActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 统一归还(开新轮或重算前调用)
|
||||||
|
giveBackAllSpecials(rm: RollerManager) {
|
||||||
|
if (!rm) return;
|
||||||
|
this.adopted.forEach((info, node) => {
|
||||||
|
if (!node || !node.isValid) return;
|
||||||
|
let roller = rm.allRollers[info.rollerId];
|
||||||
|
if (!roller) return;
|
||||||
|
node.parent = roller.node;
|
||||||
|
node.setPosition(roller.getIconPosition(info.startPos, info.height));
|
||||||
|
});
|
||||||
|
this.adopted.clear();
|
||||||
|
this.setSpecialLayersActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全量重算:不累加,重新扫描所有列
|
||||||
|
resetAndSyncAllSpecials(rm: RollerManager) {
|
||||||
|
if (!rm) return;
|
||||||
|
this.giveBackAllSpecials(rm); // 清空旧数据与节点
|
||||||
|
for (let i = 0; i < rm.allRollers.length; i++) {
|
||||||
|
this.syncSpecialFromRoller(rm.allRollers[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"ver": "4.0.24",
|
"ver": "4.0.24",
|
||||||
"importer": "typescript",
|
"importer": "typescript",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "fff06ff8-efe2-4de7-a99a-f141dbd008f8",
|
"uuid": "55162d22-5267-4d67-9e5d-d56c2cc460eb",
|
||||||
"files": [],
|
"files": [],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {}
|
"userData": {}
|
||||||
@ -76,7 +76,9 @@ export class LayoutAdapter extends Component {
|
|||||||
const texH = this.sprite.spriteFrame.height;
|
const texH = this.sprite.spriteFrame.height;
|
||||||
const scale = Math.max(size.width / texW, size.height / texH);
|
const scale = Math.max(size.width / texW, size.height / texH);
|
||||||
this.BG_01.setScale(scale, scale); // 铺满并保持比例
|
this.BG_01.setScale(scale, scale); // 铺满并保持比例
|
||||||
|
if (this.Logo.isValid) {
|
||||||
this.changeLoge(size.height)
|
this.changeLoge(size.height)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (this.isMobile()) {
|
if (this.isMobile()) {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { PREVIEW } from "cc/env"
|
|||||||
const gameId = "rp_11001";
|
const gameId = "rp_11001";
|
||||||
// let apiaddr = "https://rpgames-api.rpfafafahkdev.com";
|
// let apiaddr = "https://rpgames-api.rpfafafahkdev.com";
|
||||||
let apiaddr = "";
|
let apiaddr = "";
|
||||||
let token = "eyJQIjoxMDA5NDksIkUiOjE3NjcwMTU2MDMsIlMiOjEwMDAsIkQiOiJycF8xMTAwMSJ9.ZFVTUEx8b15hwZk9wW3bJxKMkpA3IUlwbgYH5uY-uhA";
|
let token = "eyJQIjoxMDA5NDksIkUiOjE3Njc4ODExMzMsIlMiOjEwMDEsIkQiOiJycF8xMTAwMSJ9.N2C9PWfr9Vjv_Ve_1OTGwCBh40m1mTg_gZhq3mu43wg";
|
||||||
|
|
||||||
|
|
||||||
let language = "en"
|
let language = "en"
|
||||||
@ -32,7 +32,7 @@ export function getHistoryUrl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getLanguage() {
|
export function getLanguage() {
|
||||||
// return 'th';
|
// return 'zh';
|
||||||
return language;
|
return language;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,123 +0,0 @@
|
|||||||
import { _decorator, Component, resources } from 'cc';
|
|
||||||
import { sp } from 'cc';
|
|
||||||
import { I18nManager } from '../manager/I18nManager';
|
|
||||||
|
|
||||||
const { ccclass, property, executeInEditMode } = _decorator;
|
|
||||||
|
|
||||||
@ccclass('LocalizedSpine')
|
|
||||||
export class LocalizedSpine extends Component {
|
|
||||||
private spineComponent: sp.Skeleton | null = null;
|
|
||||||
|
|
||||||
@property({ tooltip: 'Spine资源名字' })
|
|
||||||
private spineName: string = '';
|
|
||||||
|
|
||||||
@property({ tooltip: '默认动画名称' })
|
|
||||||
private defaultAnimation: string = '';
|
|
||||||
|
|
||||||
@property({ tooltip: '是否自动播放默认动画' })
|
|
||||||
private autoPlay: boolean = true;
|
|
||||||
|
|
||||||
onLoad() {
|
|
||||||
if (!I18nManager.instance.getIsReady()) {
|
|
||||||
I18nManager.instance.init('en');
|
|
||||||
}
|
|
||||||
this.fetchRender();
|
|
||||||
}
|
|
||||||
|
|
||||||
fetchRender() {
|
|
||||||
if (!this.spineComponent) {
|
|
||||||
this.spineComponent = this.getComponent(sp.Skeleton);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.spineComponent) {
|
|
||||||
this.updateSpine();
|
|
||||||
} else {
|
|
||||||
console.warn(`LocalizedSpine: No Spine component found on node ${this.node.name}`);
|
|
||||||
this.loadDefaultSpine();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public updateSpine() {
|
|
||||||
if (!this.spineComponent || !this.spineName) return;
|
|
||||||
|
|
||||||
const currentLanguage = I18nManager.instance.currentLanguage;
|
|
||||||
const cacheKey = `${currentLanguage}_${this.spineName}`;
|
|
||||||
|
|
||||||
// 从I18nManager获取缓存的SpineData
|
|
||||||
const cachedSpineData = I18nManager.instance.spineCache.get(cacheKey);
|
|
||||||
if (cachedSpineData) {
|
|
||||||
this.setNewSpineData(cachedSpineData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果缓存中没有,从resources加载
|
|
||||||
const spinePath = `i18nSprite/${currentLanguage}/${this.spineName}_${currentLanguage}`;
|
|
||||||
resources.load(spinePath, sp.SkeletonData, (err, spineData) => {
|
|
||||||
if (err) {
|
|
||||||
console.warn(`Failed to load spine: ${spinePath}`, err);
|
|
||||||
this.loadDefaultSpine();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spineData) {
|
|
||||||
// 添加到I18nManager的缓存中
|
|
||||||
I18nManager.instance.spineCache.set(cacheKey, spineData);
|
|
||||||
this.setNewSpineData(spineData);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private loadDefaultSpine() {
|
|
||||||
const defaultPath = `i18nSpine/en/${this.spineName}_en`;
|
|
||||||
const cacheKey = `en_${this.spineName}`;
|
|
||||||
|
|
||||||
// 从I18nManager获取默认语言的缓存
|
|
||||||
const cachedSpineData = I18nManager.instance.spineCache.get(cacheKey);
|
|
||||||
if (cachedSpineData) {
|
|
||||||
this.setNewSpineData(cachedSpineData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
resources.load(defaultPath, sp.SkeletonData, (err, spineData) => {
|
|
||||||
if (err) {
|
|
||||||
console.error('Failed to load default spine:', err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spineData) {
|
|
||||||
I18nManager.instance.spineCache.set(cacheKey, spineData);
|
|
||||||
this.setNewSpineData(spineData);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private setNewSpineData(newData: sp.SkeletonData) {
|
|
||||||
if (this.spineComponent) {
|
|
||||||
this.spineComponent.skeletonData = newData;
|
|
||||||
|
|
||||||
// 如果设置了默认动画且启用了自动播放,则播放默认动画
|
|
||||||
if (this.defaultAnimation && this.autoPlay) {
|
|
||||||
this.spineComponent.setAnimation(0, this.defaultAnimation, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public setSpineName(name: string) {
|
|
||||||
this.spineName = name;
|
|
||||||
this.updateSpine();
|
|
||||||
}
|
|
||||||
|
|
||||||
public playAnimation(animName: string, loop: boolean = false) {
|
|
||||||
if (this.spineComponent) {
|
|
||||||
this.spineComponent.setAnimation(0, animName, loop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onDestroy() {
|
|
||||||
// 清理组件引用
|
|
||||||
if (this.spineComponent) {
|
|
||||||
this.spineComponent.skeletonData = null;
|
|
||||||
}
|
|
||||||
this.spineComponent = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { _decorator, Component, SpriteFrame, Sprite, resources } from 'cc';
|
import { _decorator, Component, Sprite } from 'cc';
|
||||||
import { I18nManager } from '../manager/I18nManager';
|
import { I18nManager } from '../manager/I18nManager';
|
||||||
|
|
||||||
const { ccclass, property, executeInEditMode } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ccclass('LocalizedSprite')
|
@ccclass('LocalizedSprite')
|
||||||
export class LocalizedSprite extends Component {
|
export class LocalizedSprite extends Component {
|
||||||
@ -11,95 +11,25 @@ export class LocalizedSprite extends Component {
|
|||||||
private spriteName: string = '';
|
private spriteName: string = '';
|
||||||
|
|
||||||
onLoad() {
|
onLoad() {
|
||||||
if (I18nManager.instance.ready) {
|
|
||||||
this.fetchRender();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fetchRender() {
|
|
||||||
if (!this.sprite) {
|
|
||||||
this.sprite = this.getComponent(Sprite);
|
this.sprite = this.getComponent(Sprite);
|
||||||
}
|
|
||||||
|
|
||||||
if (this.sprite) {
|
|
||||||
this.updateSprite();
|
this.updateSprite();
|
||||||
} else {
|
|
||||||
console.warn(`LocalizedSprite: No Sprite component found on node ${this.node.name}`);
|
|
||||||
this.loadDefaultSprite();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public updateSprite() {
|
public updateSprite() {
|
||||||
if (!this.sprite || !this.spriteName) return;
|
if (!this.sprite || !this.spriteName) return;
|
||||||
|
if (!I18nManager.instance.ready) return;
|
||||||
|
let cacheKey = `${I18nManager.instance.currentLanguage}_${this.spriteName}`;
|
||||||
|
let cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
||||||
|
|
||||||
const currentLanguage = I18nManager.instance.currentLanguage;
|
|
||||||
const cacheKey = `${currentLanguage}_${this.spriteName}`;
|
|
||||||
|
|
||||||
// 从I18nManager获取缓存的SpriteFrame
|
|
||||||
const cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
|
||||||
if (cachedFrame) {
|
if (cachedFrame) {
|
||||||
this.setNewSpriteFrame(cachedFrame);
|
this.sprite.spriteFrame = cachedFrame;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果缓存中没有,从resources加载
|
|
||||||
const spritePath = `i18nSprite/${currentLanguage}/${this.spriteName}/spriteFrame`;
|
|
||||||
resources.load(spritePath, SpriteFrame, (err, spriteFrame) => {
|
|
||||||
if (err) {
|
|
||||||
console.warn(`Failed to load sprite: ${spritePath}`, err);
|
|
||||||
this.loadDefaultSprite();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spriteFrame) {
|
|
||||||
// 添加到I18nManager的缓存中
|
|
||||||
I18nManager.instance.spriteFrameCache.set(cacheKey, spriteFrame);
|
|
||||||
this.setNewSpriteFrame(spriteFrame);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private loadDefaultSprite() {
|
|
||||||
const defaultPath = `i18nSprite/en/${this.spriteName}/spriteFrame`;
|
|
||||||
const cacheKey = `en_${this.spriteName}`;
|
|
||||||
|
|
||||||
// 从I18nManager获取默认语言的缓存
|
|
||||||
const cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
|
||||||
if (cachedFrame) {
|
|
||||||
this.setNewSpriteFrame(cachedFrame);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
resources.load(defaultPath, SpriteFrame, (err, spriteFrame) => {
|
|
||||||
if (err) {
|
|
||||||
console.error('Failed to load default sprite:', err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spriteFrame) {
|
|
||||||
// 添加到I18nManager的缓存中
|
|
||||||
I18nManager.instance.spriteFrameCache.set(cacheKey, spriteFrame);
|
|
||||||
this.setNewSpriteFrame(spriteFrame);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private setNewSpriteFrame(newFrame: SpriteFrame) {
|
|
||||||
if (this.sprite) {
|
|
||||||
this.sprite.spriteFrame = newFrame;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public setSpriteName(name: string) {
|
updateSpriteForPreload(language: string) {
|
||||||
this.spriteName = name;
|
this.sprite = this.getComponent(Sprite);
|
||||||
this.updateSprite();
|
let cacheKey = `${language}_${this.spriteName}`;
|
||||||
}
|
let cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
||||||
|
this.sprite.spriteFrame = cachedFrame;
|
||||||
onDestroy() {
|
|
||||||
// 只清理当前组件的引用
|
|
||||||
if (this.sprite) {
|
|
||||||
this.sprite.spriteFrame = null;
|
|
||||||
}
|
|
||||||
this.sprite = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,34 +1,46 @@
|
|||||||
import { _decorator, Component, Node, ProgressBar, Label, Button, view, VideoPlayer, UITransform, AssetManager, tween, ResolutionPolicy, game, director, Director, sys, macro, JsonAsset } from 'cc';
|
import {
|
||||||
import { callGameApi, getIsRB7, getLanguage, initReqAddr } from './comm';
|
_decorator,
|
||||||
import { GameDataManager } from './manager/GameDataManager';
|
Component,
|
||||||
import { ResManager } from './manager/ResManager';
|
Node,
|
||||||
import { AudioManager } from './manager/AudioManager';
|
ProgressBar,
|
||||||
import { NodePoolManager } from './manager/NodePoolManager';
|
Label,
|
||||||
import { I18nManager } from './manager/I18nManager';
|
UITransform,
|
||||||
import { LocalizedSprite } from './i18n/LocalizedSprite';
|
tween,
|
||||||
import { initErrorManager } from './manager/ErrorManager';
|
JsonAsset,
|
||||||
let { ccclass, property } = _decorator;
|
Button,
|
||||||
|
} from "cc";
|
||||||
|
import {
|
||||||
|
callGameApi,
|
||||||
|
getIsRB7,
|
||||||
|
getLanguage,
|
||||||
|
initReqAddr,
|
||||||
|
} from "./comm";
|
||||||
|
import { DEBUG } from "cc/env";
|
||||||
|
import { initErrorManager } from "./manager/ErrorManager";
|
||||||
|
import { I18nManager } from "./manager/I18nManager";
|
||||||
|
import { LocalizedSprite } from "./i18n/LocalizedSprite";
|
||||||
|
import { AudioManager } from "./manager/AudioManager";
|
||||||
|
import { GameDataManager } from "./manager/GameDataManager";
|
||||||
|
import { ResManager } from "./manager/ResManager";
|
||||||
|
import { NodePoolManager } from "./manager/NodePoolManager";
|
||||||
|
|
||||||
@ccclass('LoadingUI')
|
const { ccclass, property } = _decorator;
|
||||||
export class LoadingUI extends Component {
|
|
||||||
//test
|
|
||||||
@property(Node)
|
|
||||||
BG: Node = null;
|
|
||||||
|
|
||||||
@property(Node)
|
|
||||||
LoadingUINode: Node = null;
|
|
||||||
|
|
||||||
@property(ProgressBar)
|
|
||||||
progressBar: ProgressBar = null;
|
|
||||||
|
|
||||||
|
@ccclass("Loading")
|
||||||
|
export class Loading extends Component {
|
||||||
|
// UI组件
|
||||||
|
@property(Node) progressNode: Node = null;
|
||||||
|
@property(ProgressBar) progressBar: ProgressBar = null;
|
||||||
|
@property(Label) progressLabel: Label = null;
|
||||||
|
@property(Label) loadingLabel: Label = null;
|
||||||
|
@property(Node) maskSpineNode: Node = null;
|
||||||
|
@property(Node) lightSpineNode: Node = null;
|
||||||
|
@property(Node) startBtnNode: Node = null;
|
||||||
|
@property(Node) LoadingUINode: Node = null;
|
||||||
|
@property(Node) rb7Logo: Node = null;
|
||||||
|
@property(JsonAsset) languageJson: JsonAsset = null;
|
||||||
@property(Label)
|
@property(Label)
|
||||||
progressLabel: Label = null;
|
tipLabel: Label = null;
|
||||||
|
|
||||||
@property(Label)
|
|
||||||
loadingTipLabel: Label = null;
|
|
||||||
|
|
||||||
@property(Label)
|
|
||||||
retryTipLabel: Label = null;
|
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
startBtn: Button = null;
|
startBtn: Button = null;
|
||||||
@ -36,261 +48,275 @@ export class LoadingUI extends Component {
|
|||||||
@property(Label)
|
@property(Label)
|
||||||
startBtnLabel: Label = null;
|
startBtnLabel: Label = null;
|
||||||
|
|
||||||
@property(Node)
|
|
||||||
GameNode: Node = null;
|
|
||||||
|
|
||||||
@property(JsonAsset)
|
|
||||||
languageJson: JsonAsset = null;
|
|
||||||
|
|
||||||
private _networkComplete = false;
|
private _networkComplete = false;
|
||||||
private _retryCount = 0;
|
private _retryCount = 0;
|
||||||
private readonly MAX_RETRY = 5;
|
private readonly MAX_RETRY = 5;
|
||||||
private INITIAL_PROGRESS = 0.3;
|
// 加载状态
|
||||||
private _instanceGameNode = null;
|
private isNetworkReady = false;
|
||||||
|
private readonly PROGRESS_ANIMATION_DURATION = 0.3;
|
||||||
|
|
||||||
|
// 进度条阶段
|
||||||
|
private readonly PROGRESS_INIT = 0.2; // 初始化完成
|
||||||
|
private readonly PROGRESS_NETWORK = 0.5; // 网络请求完成
|
||||||
|
private readonly PROGRESS_RESOURCE = 0.9; // 资源加载完成
|
||||||
|
private readonly PROGRESS_COMPLETE = 1.0; // 完全加载完成
|
||||||
|
|
||||||
// 新增动画
|
// 游戏节点
|
||||||
private maskUITransform: UITransform = null;
|
private gameContainer: Node = null;
|
||||||
private lightNode: Node = null;
|
private gameNode: Node = null;
|
||||||
|
|
||||||
protected async onLoad() {
|
protected async onLoad() {
|
||||||
// initErrorManager();
|
|
||||||
// 初始显示状态
|
|
||||||
this.initUI();
|
|
||||||
this.LoadingUINode.active = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async start() {
|
|
||||||
try {
|
|
||||||
initReqAddr();
|
initReqAddr();
|
||||||
this.node.getChildByName('Logo').active = getIsRB7();
|
let language = getLanguage();
|
||||||
await I18nManager.instance.init(getLanguage(), this.languageJson);
|
|
||||||
|
if (getLanguage() == 'zh') {
|
||||||
|
this.node.getChildByPath("Mask/LoadingUINode/logo_zh").active = true;
|
||||||
|
this.node.getChildByPath("Mask/LoadingUINode/logo_en").active = false;
|
||||||
|
} else {
|
||||||
|
this.node.getChildByPath("Mask/LoadingUINode/logo_zh").active = false;
|
||||||
|
this.node.getChildByPath("Mask/LoadingUINode/logo_en").active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// initErrorManager();
|
||||||
|
await I18nManager.instance.ensureI18nSprite(language, "2");
|
||||||
|
this.node
|
||||||
|
.getChildByPath('Mask/LoadingUINode/msg')
|
||||||
|
.getComponent(LocalizedSprite)
|
||||||
|
.updateSpriteForPreload(language);
|
||||||
|
this.node.getChildByPath('Mask/LoadingUINode/msg').active = true;
|
||||||
|
|
||||||
|
await I18nManager.instance.init(language, this.languageJson);
|
||||||
I18nManager.instance.updateSceneRenderers();
|
I18nManager.instance.updateSceneRenderers();
|
||||||
// this.LoadingUINode.getChildByName("bg").getComponent(LocalizedSprite).fetchRender();
|
|
||||||
this.LoadingUINode.active = true;
|
|
||||||
// 更新进度条到 0.4
|
|
||||||
this.updateProgress(0.4);
|
|
||||||
|
|
||||||
|
this.initializeUI();
|
||||||
|
// 初始化完成,进度条到20%
|
||||||
|
this.updateProgress(this.PROGRESS_INIT);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this.initializeSystem();
|
||||||
AudioManager.instance.init();
|
AudioManager.instance.init();
|
||||||
game.setFrameRate(61);
|
this.updateLoadingText("AID_LOADING");
|
||||||
// this.checkStartLoading();
|
|
||||||
// 开始网络请求
|
|
||||||
this.initNetwork();
|
|
||||||
|
|
||||||
} catch (error) {
|
// 延迟一下让用户看到进度条开始
|
||||||
console.error('Network initialization failed:', error);
|
|
||||||
this.handleError(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private initUI() {
|
|
||||||
this.BG.active = true;
|
|
||||||
this.startBtn.node.active = false;
|
|
||||||
this.maskUITransform = this.LoadingUINode.getChildByName('mask').getComponent(UITransform);
|
|
||||||
this.lightNode = this.LoadingUINode.getChildByName('light');
|
|
||||||
this.updateProgress(this.INITIAL_PROGRESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private async initNetwork() {
|
|
||||||
try {
|
|
||||||
// 更新进度条到 0.6
|
|
||||||
this.updateProgress(0.6);
|
|
||||||
this.loadingTipLabel.string = I18nManager.instance.t('AID_LOADING');
|
|
||||||
this.retryTipLabel.string = '';
|
|
||||||
let gameInfo = await callGameApi("gameinfo", {});
|
|
||||||
if (!gameInfo) throw new Error('Get game info failed');
|
|
||||||
GameDataManager.instance.gameInfo = gameInfo;
|
|
||||||
|
|
||||||
// 更新进度条到 0.8
|
|
||||||
this.updateProgress(0.8);
|
|
||||||
|
|
||||||
this._networkComplete = true;
|
|
||||||
|
|
||||||
await GameDataManager.instance.preloadFrameTypeCache();
|
|
||||||
await GameDataManager.instance.preloadSymbolCache();
|
|
||||||
this.checkStartLoading();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Network initialization failed:', error);
|
|
||||||
this.handleError(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private checkStartLoading() {
|
|
||||||
if (this._networkComplete) {
|
|
||||||
this.LoadingUINode.active = true;
|
|
||||||
this.startLoadingGameBundle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async startLoadingGameBundle() {
|
|
||||||
try {
|
|
||||||
// 显示加载UI
|
|
||||||
this.loadingTipLabel.string = I18nManager.instance.t('AID_LOADING');
|
|
||||||
this.retryTipLabel.string = '';
|
|
||||||
this.startBtn.node.active = false;
|
|
||||||
|
|
||||||
// 从 0.8 开始加载
|
|
||||||
let startProgress = 0.8;
|
|
||||||
|
|
||||||
// 使用新的合并函数加载 Bundle 和预制体
|
|
||||||
this._instanceGameNode = await ResManager.instance.loadPrefabFromBundle(
|
|
||||||
'Game',
|
|
||||||
'prefabs/SlotScene',
|
|
||||||
(finished: number, total: number) => {
|
|
||||||
if (total <= 0) return;
|
|
||||||
let bundleProgress = finished / total;
|
|
||||||
// 将加载进度映射到 0.8-1 的范围
|
|
||||||
let mappedProgress = startProgress + (bundleProgress * (1 - startProgress));
|
|
||||||
this.updateProgress(mappedProgress);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
this.updateProgress(1);
|
|
||||||
this.onLoadComplete();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Loading error:', error);
|
|
||||||
this.handleError(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private updateProgress(progress: number) {
|
|
||||||
// 使用 tween 使进度条更新更平滑
|
|
||||||
tween(this.progressBar)
|
|
||||||
.to(0.2, { progress: progress }, {
|
|
||||||
easing: 'smooth',
|
|
||||||
onUpdate: (target: any, ratio: number) => {
|
|
||||||
this.progressLabel.string = `${Math.floor(target.progress * 100)}%`;
|
|
||||||
this.maskUITransform.width = target.progress * 494;
|
|
||||||
this.lightNode.setPosition(target.progress * 496 - 274, -612, 0);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private onLoadComplete() {
|
|
||||||
// 开始游戏
|
|
||||||
this.scheduleOnce(() => {
|
this.scheduleOnce(() => {
|
||||||
this.loadingTipLabel.string = '';
|
this.startNetworkLoading();
|
||||||
this.retryTipLabel.string = '';
|
}, 0.2);
|
||||||
this.startBtn.node.active = true;
|
} catch (error) {
|
||||||
this.startBtnLabel.string = I18nManager.instance.t('AID_GET_STARTED');
|
console.error("Network initialization failed:", error);
|
||||||
this.progressBar.node.active = false;
|
this.handleError(error);
|
||||||
this.progressLabel.node.active = false;
|
}
|
||||||
|
|
||||||
this.maskUITransform.node.active = false;
|
|
||||||
this.lightNode.active = false;
|
|
||||||
}, 0.3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 初始化系统 */
|
||||||
|
private async initializeSystem() {
|
||||||
|
this.rb7Logo.active = getIsRB7();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 初始化UI */
|
||||||
|
private initializeUI() {
|
||||||
|
this.startBtnNode.active = false;
|
||||||
|
this.gameContainer = this.node
|
||||||
|
.getChildByPath('Mask/GameNode')
|
||||||
|
|
||||||
|
// 初始化进度条为0
|
||||||
|
this.updateProgress(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 开始网络加载 */
|
||||||
|
private async startNetworkLoading() {
|
||||||
|
this.updateLoadingText("AID_LOADING");
|
||||||
|
|
||||||
|
try {
|
||||||
|
let gameInfo = await callGameApi("gameinfo", {});
|
||||||
|
|
||||||
|
GameDataManager.instance.gameInfo = gameInfo;
|
||||||
|
this.isNetworkReady = true;
|
||||||
|
|
||||||
|
// 网络请求完成,进度条到50%
|
||||||
|
this.updateProgress(this.PROGRESS_NETWORK);
|
||||||
|
|
||||||
|
// 稍微延迟一下让用户看到进度变化
|
||||||
|
this.scheduleOnce(() => {
|
||||||
|
this.startResourceLoading();
|
||||||
|
}, 0.3);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Network initialization failed:", error);
|
||||||
|
this.handleError(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
private handleError(error: Error) {
|
private handleError(error: Error) {
|
||||||
this._retryCount++;
|
this._retryCount++;
|
||||||
this.loadingTipLabel.string = '';
|
|
||||||
if (this._retryCount <= this.MAX_RETRY) {
|
if (this._retryCount <= this.MAX_RETRY) {
|
||||||
// 自动重试
|
// 自动重试
|
||||||
|
// this.tipLabel.string = `retry(${this._retryCount}/${this.MAX_RETRY})...`;
|
||||||
switch (this._retryCount) {
|
switch (this._retryCount) {
|
||||||
case 1:
|
case 1:
|
||||||
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_1');
|
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_1");
|
||||||
break
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_2');
|
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_2");
|
||||||
break
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_3');
|
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_3");
|
||||||
break
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_4');
|
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_4");
|
||||||
break
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_5');
|
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_5");
|
||||||
break
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
this.scheduleOnce(() => {
|
this.scheduleOnce(() => {
|
||||||
if (!this._networkComplete) {
|
if (!this._networkComplete) {
|
||||||
this.initNetwork();
|
this.startNetworkLoading();
|
||||||
} else {
|
} else {
|
||||||
this.startLoadingGameBundle();
|
this.startResourceLoading();
|
||||||
}
|
}
|
||||||
}, 2);
|
}, 2);
|
||||||
} else {
|
} else {
|
||||||
// 显示重试按钮
|
// 显示重试按钮
|
||||||
this.loadingTipLabel.string = I18nManager.instance.t('AID_LOADING');
|
this.tipLabel.string = I18nManager.instance.t("AID_LOADING");
|
||||||
this.retryTipLabel.string = '';
|
|
||||||
this.startBtn.node.active = true;
|
this.startBtn.node.active = true;
|
||||||
this.progressBar.node.active = false;
|
this.progressBar.node.active = false;
|
||||||
this.progressLabel.node.active = false;
|
this.progressLabel.node.active = false;
|
||||||
|
this.startBtnLabel.string = I18nManager.instance.t(
|
||||||
|
"AID_ERROR_RETRY_BUTTON"
|
||||||
this.maskUITransform.node.active = false;
|
);
|
||||||
this.lightNode.active = false;
|
|
||||||
|
|
||||||
this.startBtnLabel.string = I18nManager.instance.t('AID_ERROR_RETRY_BUTTON');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/** 开始资源加载 */
|
||||||
|
private async startResourceLoading() {
|
||||||
|
if (!this.isNetworkReady) return;
|
||||||
|
|
||||||
|
this.tipLabel.string = I18nManager.instance.t("AID_LOADING");
|
||||||
|
this.startBtnNode.active = false;
|
||||||
|
|
||||||
|
this.gameNode = await ResManager.instance.loadPrefabFromBundle(
|
||||||
|
"Game",
|
||||||
|
"SlotScene",
|
||||||
|
(finished: number, total: number) => {
|
||||||
|
if (total > 0) {
|
||||||
|
// 资源加载进度从50%到90%
|
||||||
|
const resourceProgress = finished / total;
|
||||||
|
const currentProgress =
|
||||||
|
this.PROGRESS_NETWORK +
|
||||||
|
resourceProgress * (this.PROGRESS_RESOURCE - this.PROGRESS_NETWORK);
|
||||||
|
this.updateProgress(currentProgress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// 资源加载完成,进度条到90%
|
||||||
|
this.updateProgress(this.PROGRESS_RESOURCE);
|
||||||
|
|
||||||
|
// 延迟一下然后完成最后的10%
|
||||||
|
this.scheduleOnce(() => {
|
||||||
|
this.finishLoading();
|
||||||
|
}, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 完成加载 */
|
||||||
|
private finishLoading() {
|
||||||
|
// this.updateLoadingText('Loading More...');
|
||||||
|
|
||||||
|
// 最后10%快速完成
|
||||||
|
this.updateProgress(this.PROGRESS_COMPLETE);
|
||||||
|
|
||||||
|
// 0.5秒后显示开始按钮
|
||||||
|
this.scheduleOnce(() => {
|
||||||
|
this.onLoadComplete();
|
||||||
|
}, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 更新进度条 */
|
||||||
|
private updateProgress(progress: number) {
|
||||||
|
tween(this.progressBar)
|
||||||
|
.to(
|
||||||
|
this.PROGRESS_ANIMATION_DURATION,
|
||||||
|
{ progress },
|
||||||
|
{
|
||||||
|
easing: "smooth",
|
||||||
|
onUpdate: (target: any) => {
|
||||||
|
const currentProgress = target.progress;
|
||||||
|
this.progressLabel.string = `${Math.floor(currentProgress * 100)}%`;
|
||||||
|
this.maskSpineNode
|
||||||
|
.getComponent(UITransform)
|
||||||
|
.setContentSize(currentProgress * 509, 100);
|
||||||
|
this.lightSpineNode.setPosition(
|
||||||
|
currentProgress * 509 - 278,
|
||||||
|
-612,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 更新加载文本 */
|
||||||
|
private updateLoadingText(key: string) {
|
||||||
|
this.loadingLabel.string = I18nManager.instance.t("AID_LOADING");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 加载完成 */
|
||||||
|
private onLoadComplete() {
|
||||||
|
this.startBtnLabel.string = I18nManager.instance.t("AID_GET_STARTED");
|
||||||
|
this.hideProgressUI();
|
||||||
|
this.showStartButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 隐藏进度UI */
|
||||||
|
private hideProgressUI() {
|
||||||
|
this.loadingLabel.string = '';
|
||||||
|
this.progressBar.node.active = false;
|
||||||
|
this.progressLabel.node.active = false;
|
||||||
|
this.maskSpineNode.active = false;
|
||||||
|
this.lightSpineNode.active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 显示开始按钮 */
|
||||||
|
private showStartButton() {
|
||||||
|
this.startBtnNode.active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 开始游戏 */
|
||||||
|
private startGame() {
|
||||||
|
if (!this.gameContainer) {
|
||||||
|
console.error("Game container not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.gameContainer.addChild(this.gameNode);
|
||||||
|
// 隐藏加载界面
|
||||||
|
this.LoadingUINode.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 按钮点击事件 */
|
||||||
onStartBtnClick() {
|
onStartBtnClick() {
|
||||||
if (this.startBtnLabel.string === I18nManager.instance.t('AID_ERROR_RETRY_BUTTON')) {
|
if (
|
||||||
|
this.startBtnLabel.string ===
|
||||||
|
I18nManager.instance.t("AID_ERROR_RETRY_BUTTON")
|
||||||
|
) {
|
||||||
// 重试逻辑
|
// 重试逻辑
|
||||||
this._retryCount = 0;
|
this._retryCount = 0;
|
||||||
this.startBtn.node.active = false;
|
this.startBtn.node.active = false;
|
||||||
this.progressBar.node.active = true;
|
this.progressBar.node.active = true;
|
||||||
this.progressLabel.node.active = true;
|
this.progressLabel.node.active = true;
|
||||||
|
|
||||||
|
|
||||||
this.maskUITransform.node.active = true;
|
|
||||||
this.lightNode.active = true;
|
|
||||||
|
|
||||||
if (!this._networkComplete) {
|
if (!this._networkComplete) {
|
||||||
this.initNetwork();
|
this.startNetworkLoading();
|
||||||
} else {
|
} else {
|
||||||
this.startLoadingGameBundle();
|
this.startResourceLoading();
|
||||||
}
|
}
|
||||||
} else if (this.startBtnLabel.string === I18nManager.instance.t('AID_GET_STARTED')) {
|
} else {
|
||||||
this.node.getChildByName('Logo').active = false;
|
this.startGame();
|
||||||
// 确保 GameNode 存在
|
|
||||||
if (!this.GameNode) {
|
|
||||||
throw new Error('GameNode is not set');
|
|
||||||
}
|
|
||||||
// 添加到场景
|
|
||||||
this.GameNode.addChild(this._instanceGameNode);
|
|
||||||
// 隐藏加载界面
|
|
||||||
this.LoadingUINode.destroy();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onDestroy() {
|
onDestroy() {
|
||||||
this.unscheduleAllCallbacks();
|
this.unscheduleAllCallbacks();
|
||||||
tween(this.progressBar).stop();
|
tween(this.progressBar).stop();
|
||||||
AudioManager.instance.destroy();
|
|
||||||
NodePoolManager.instance.clearAll();
|
NodePoolManager.instance.clearAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// UNKNOWN = 0, // 未知平台
|
|
||||||
// WINDOWS = 1, // Windows
|
|
||||||
// LINUX = 2, // Linux
|
|
||||||
// MACOS = 3, // macOS
|
|
||||||
// ANDROID = 4, // Android
|
|
||||||
// IOS = 5, // iOS
|
|
||||||
// MOBILE_BROWSER = 6, // 移动端浏览器
|
|
||||||
// DESKTOP_BROWSER = 7,// 桌面端浏览器
|
|
||||||
// WECHAT_GAME = 8, // 微信小游戏
|
|
||||||
// BAIDU_MINI_GAME = 9,// 百度小游戏
|
|
||||||
// XIAOMI_QUICK_GAME = 10,// 小米快游戏
|
|
||||||
// ALIPAY_MINI_GAME = 11, // 支付宝小游戏
|
|
||||||
// BYTEDANCE_MINI_GAME = 12,// 字节跳动小游戏
|
|
||||||
// OPPO_MINI_GAME = 13,// OPPO小游戏
|
|
||||||
// VIVO_MINI_GAME = 14,// vivo小游戏
|
|
||||||
// HUAWEI_QUICK_GAME = 15,// 华为快游戏
|
|
||||||
// COCOSPLAY = 16, // Cocos Play
|
|
||||||
// LINKSURE_MINI_GAME = 17,// 连尚小游戏
|
|
||||||
// QTT_MINI_GAME = 18 // 趣头条小游戏
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,53 +1,91 @@
|
|||||||
import { resources, JsonAsset, director, SpriteFrame, Sprite, Node, SpriteAtlas, sp } from 'cc';
|
import { resources, JsonAsset, director, SpriteFrame, SpriteAtlas, sp } from 'cc';
|
||||||
import { LocalizedSprite } from '../i18n/LocalizedSprite';
|
|
||||||
|
|
||||||
export class I18nManager {
|
export class I18nManager {
|
||||||
private static _instance: I18nManager = null;
|
|
||||||
|
private static _instance: I18nManager;
|
||||||
spriteFrameCache: Map<string, SpriteFrame> = new Map();
|
spriteFrameCache: Map<string, SpriteFrame> = new Map();
|
||||||
spineCache: Map<string, sp.SkeletonData> = new Map();
|
spineCache: Map<string, sp.SkeletonData> = new Map();
|
||||||
|
_sfTasks = new Map<string, Promise<SpriteFrame>>();
|
||||||
languageData: Record<string, any> = {};
|
languageData: Record<string, any> = {};
|
||||||
currentLanguage: string = 'en';
|
currentLanguage: string = 'en';
|
||||||
ready: boolean = false;
|
ready: boolean = false;
|
||||||
|
|
||||||
static get instance() {
|
static get instance() {
|
||||||
if (this._instance) {
|
return this._instance || (this._instance = new I18nManager());
|
||||||
return this._instance;
|
|
||||||
}
|
|
||||||
this._instance = new I18nManager();
|
|
||||||
return this._instance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private constructor() { }
|
private constructor() { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// yield/await 风格:谁都可以 await,且只加载一次
|
||||||
|
ensureI18nSprite(lang: string, name: string): Promise<SpriteFrame> {
|
||||||
|
const key = `${lang}_${name}`;
|
||||||
|
const path = `i18nSprite/${lang}/${name}/spriteFrame`;
|
||||||
|
|
||||||
|
const cached = this.spriteFrameCache.get(key);
|
||||||
|
if (cached) return Promise.resolve(cached);
|
||||||
|
|
||||||
|
const pending = this._sfTasks.get(key);
|
||||||
|
if (pending) return pending;
|
||||||
|
|
||||||
|
const task = new Promise<SpriteFrame>((resolve, reject) => {
|
||||||
|
resources.load(path, SpriteFrame, (err, sf) => {
|
||||||
|
this._sfTasks.delete(key);
|
||||||
|
if (err || !sf) return reject(err);
|
||||||
|
this.spriteFrameCache.set(key, sf);
|
||||||
|
resolve(sf);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this._sfTasks.set(key, task);
|
||||||
|
return task;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化语言管理器
|
* 初始化国际化管理器
|
||||||
* @param language 初始语言
|
* @param language 初始语言代码
|
||||||
|
* @param languageJson 语言数据JSON资源
|
||||||
*/
|
*/
|
||||||
public async init(language: string = 'en', languageJson: JsonAsset): Promise<void> {
|
public async init(language: string = 'en', languageJson: JsonAsset = null): Promise<void> {
|
||||||
this.currentLanguage = language;
|
this.currentLanguage = language;
|
||||||
try {
|
try {
|
||||||
|
if (languageJson) {
|
||||||
this.languageData = languageJson.json;
|
this.languageData = languageJson.json;
|
||||||
|
|
||||||
// 预加载并缓存图片资源
|
|
||||||
await this.preloadSpriteFrames();
|
|
||||||
await this.preloadSpriteFrameAltas();
|
|
||||||
await this.preloadSpineAssets(); // 新增预加载 spine 资源
|
|
||||||
this.ready = true;
|
|
||||||
} catch (error) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getIsReady() {
|
// 预加载资源(目前资源列表为空,可根据需要添加)
|
||||||
return this.ready;
|
let okSprite = await this.preloadAssets('spriteFrame', [
|
||||||
}
|
'2',
|
||||||
|
'3',
|
||||||
/**
|
'4',
|
||||||
* 预加载并缓存图片资源
|
'5',
|
||||||
*/
|
'6',
|
||||||
private async preloadSpriteFrames(): Promise<void> {
|
'7',
|
||||||
const imageNames = [
|
'8',
|
||||||
'loadingBg',
|
'9',
|
||||||
|
'10',
|
||||||
|
'11',
|
||||||
|
'12',
|
||||||
|
'13',
|
||||||
|
'14',
|
||||||
|
'15',
|
||||||
|
'16',
|
||||||
|
'17',
|
||||||
|
'18',
|
||||||
|
'19',
|
||||||
|
'20',
|
||||||
|
'21',
|
||||||
|
'22',
|
||||||
|
'23',
|
||||||
|
'24',
|
||||||
|
'25',
|
||||||
|
'26',
|
||||||
|
'27',
|
||||||
|
'29',
|
||||||
|
'30',
|
||||||
|
'98',
|
||||||
|
'99',
|
||||||
|
'Buy_5',
|
||||||
'sysgift_completed',
|
'sysgift_completed',
|
||||||
'sysgift_continue',
|
'sysgift_continue',
|
||||||
'sysgift_fbs',
|
'sysgift_fbs',
|
||||||
@ -56,93 +94,72 @@ export class I18nManager {
|
|||||||
'sysgift_symbols',
|
'sysgift_symbols',
|
||||||
'sysgift_total',
|
'sysgift_total',
|
||||||
'sysgift_win',
|
'sysgift_win',
|
||||||
];
|
]);
|
||||||
|
let okAtlas = await this.preloadAssets('atlas', []);
|
||||||
|
let okSpine = await this.preloadAssets('spine', []);
|
||||||
|
|
||||||
for (const name of imageNames) {
|
this.ready = okSprite && okAtlas && okSpine;
|
||||||
const path = `i18nSprite/${this.currentLanguage}/${name}/spriteFrame`;
|
} catch (error) {
|
||||||
const cacheKey = `${this.currentLanguage}_${name}`;
|
console.error('I18nManager init failed:', error);
|
||||||
|
}
|
||||||
if (!this.spriteFrameCache.has(cacheKey)) {
|
}
|
||||||
await new Promise<void>((resolve) => {
|
|
||||||
resources.load(path, SpriteFrame, (err, spriteFrame) => {
|
/**
|
||||||
if (!err && spriteFrame) {
|
* 预加载指定类型的资源
|
||||||
this.spriteFrameCache.set(cacheKey, spriteFrame);
|
* @param type 资源类型
|
||||||
|
* @param names 资源名称列表
|
||||||
|
*/
|
||||||
|
private async preloadAssets(type: 'spriteFrame' | 'atlas' | 'spine', names: string[]): Promise<boolean> {
|
||||||
|
let results = await Promise.all(names.map(name => this.loadAsset(type, name)));
|
||||||
|
return results.every(ok => ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载单个资源
|
||||||
|
* @param type 资源类型
|
||||||
|
* @param name 资源名称
|
||||||
|
*/
|
||||||
|
private loadAsset(type: 'spriteFrame' | 'atlas' | 'spine', name: string): Promise<boolean> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
let cacheKey = `${this.currentLanguage}_${name}`;
|
||||||
|
|
||||||
|
if (type === 'spriteFrame') {
|
||||||
|
let path = `i18nSprite/${this.currentLanguage}/${name}/spriteFrame`;
|
||||||
|
resources.load(path, SpriteFrame, (err, asset) => {
|
||||||
|
if (!err && asset) {
|
||||||
|
this.spriteFrameCache.set(cacheKey, asset);
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
console.warn(`[i18n] spriteFrame load failed: ${path}`, err?.message || err);
|
||||||
|
resolve(false);
|
||||||
}
|
}
|
||||||
resolve();
|
|
||||||
});
|
});
|
||||||
});
|
} else if (type === 'atlas') {
|
||||||
}
|
let path = `i18nSprite/${this.currentLanguage}/${name}`;
|
||||||
}
|
resources.load(path, SpriteAtlas, (err, atlas) => {
|
||||||
}
|
|
||||||
|
|
||||||
private async preloadSpriteFrameAltas(): Promise<void> {
|
|
||||||
const altasNames = [
|
|
||||||
`FreeSpinINOUT_${this.currentLanguage}`,
|
|
||||||
`BuyFeature_${this.currentLanguage}`,
|
|
||||||
`Others_${this.currentLanguage}`,
|
|
||||||
`SymbolsInfo_${this.currentLanguage}`,
|
|
||||||
]
|
|
||||||
|
|
||||||
for (const altasName of altasNames) {
|
|
||||||
const atlasPath = `i18nSprite/${this.currentLanguage}/${altasName}`;
|
|
||||||
// 加载图集并缓存其中的多个 SpriteFrame
|
|
||||||
await new Promise<void>((resolve) => {
|
|
||||||
resources.load(atlasPath, SpriteAtlas, (err, atlas) => {
|
|
||||||
if (!err && atlas) {
|
if (!err && atlas) {
|
||||||
const spriteFrames = atlas.getSpriteFrames();
|
atlas.getSpriteFrames().forEach(frame => {
|
||||||
spriteFrames.forEach((frame, index) => {
|
this.spriteFrameCache.set(`${this.currentLanguage}_${frame.name}`, frame);
|
||||||
let name = frame.name;
|
});
|
||||||
const cacheKey = `${this.currentLanguage}_${name}`;
|
resolve(true);
|
||||||
this.spriteFrameCache.set(cacheKey, frame);
|
} else {
|
||||||
|
console.warn(`[i18n] atlas load failed: ${path}`, err?.message || err);
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (type === 'spine') {
|
||||||
|
let path = `i18nSpine/${this.currentLanguage}/${name}`;
|
||||||
|
resources.load(path, sp.SkeletonData, (err, asset) => {
|
||||||
|
if (!err && asset) {
|
||||||
|
this.spineCache.set(cacheKey, asset);
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
console.warn(`[i18n] spine load failed: ${path}`, err?.message || err);
|
||||||
|
resolve(false);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
resolve();
|
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 添加预加载 Spine 资源的方法
|
|
||||||
private async preloadSpineAssets(): Promise<void> {
|
|
||||||
const spineNames = [
|
|
||||||
`WinWinWin_${this.currentLanguage}`,
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const name of spineNames) {
|
|
||||||
const path = `i18nSprite/${this.currentLanguage}/${name}`;
|
|
||||||
const cacheKey = `${this.currentLanguage}_${name}`;
|
|
||||||
|
|
||||||
if (!this.spineCache.has(cacheKey)) {
|
|
||||||
await new Promise<void>((resolve) => {
|
|
||||||
resources.load(path, sp.SkeletonData, (err, spineData) => {
|
|
||||||
if (!err && spineData) {
|
|
||||||
this.spineCache.set(cacheKey, spineData);
|
|
||||||
}
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setSpriteFrame(node: Node, name: string) {
|
|
||||||
// 先尝试从缓存获取
|
|
||||||
const cacheKey = `${this.currentLanguage}_${name}`;
|
|
||||||
const cachedFrame = this.spriteFrameCache.get(cacheKey);
|
|
||||||
|
|
||||||
if (cachedFrame) {
|
|
||||||
const sprite = node.getComponent(Sprite);
|
|
||||||
if (sprite) {
|
|
||||||
sprite.spriteFrame = cachedFrame;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果缓存中没有,则使用原有逻辑
|
|
||||||
let spriteNode = node.getComponent(LocalizedSprite);
|
|
||||||
if (spriteNode) {
|
|
||||||
spriteNode.setSpriteName(name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -159,17 +176,21 @@ export class I18nManager {
|
|||||||
/**
|
/**
|
||||||
* 翻译文本
|
* 翻译文本
|
||||||
* @param key 翻译键
|
* @param key 翻译键
|
||||||
|
* @returns 翻译后的文本,如果找不到则返回键本身
|
||||||
*/
|
*/
|
||||||
public t(key: string): string {
|
public t(key: string): string {
|
||||||
const translation = this.languageData[this.currentLanguage]?.[key];
|
return this.languageData[this.currentLanguage]?.[key] || key;
|
||||||
if (!translation) {
|
|
||||||
return key; // Return the key itself if translation is not found
|
|
||||||
}
|
}
|
||||||
return translation;
|
|
||||||
|
public getSpriteFrame(spriteName: string): SpriteFrame {
|
||||||
|
let cacheKey = `${this.currentLanguage}_${spriteName}`;
|
||||||
|
let cachedFrame = this.spriteFrameCache.get(cacheKey);
|
||||||
|
return cachedFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新场景中的本地化组件
|
* 更新场景中的所有本地化组件
|
||||||
|
* 在语言切换时调用,刷新所有本地化文本和资源
|
||||||
*/
|
*/
|
||||||
public updateSceneRenderers(): void {
|
public updateSceneRenderers(): void {
|
||||||
if (!this.ready) {
|
if (!this.ready) {
|
||||||
@ -178,41 +199,23 @@ export class I18nManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let scene = director.getScene();
|
let scene = director.getScene();
|
||||||
if (!scene || !scene.isValid) return;
|
if (!scene?.isValid) return;
|
||||||
|
|
||||||
const rootNodes = director.getScene()?.children || [];
|
// 收集所有本地化组件
|
||||||
const allLocalizedLabels: any[] = [];
|
let allLocalizedLabels = [];
|
||||||
const allLocalizedSprites: any[] = [];
|
let allLocalizedSprites = [];
|
||||||
|
|
||||||
rootNodes.forEach(node => {
|
scene.children.forEach(node => {
|
||||||
allLocalizedLabels.push(...node.getComponentsInChildren('LocalizedLabel'));
|
allLocalizedLabels.push(...node.getComponentsInChildren('LocalizedLabel'));
|
||||||
allLocalizedSprites.push(...node.getComponentsInChildren('LocalizedSprite'));
|
allLocalizedSprites.push(...node.getComponentsInChildren('LocalizedSprite'));
|
||||||
});
|
});
|
||||||
|
|
||||||
allLocalizedLabels.forEach(label => {
|
// 更新所有激活的本地化组件
|
||||||
if (label.node.active) {
|
[...allLocalizedLabels, ...allLocalizedSprites].forEach(component => {
|
||||||
label.updateLabel();
|
if (component.node.active) {
|
||||||
}
|
// 调用对应的更新方法
|
||||||
});
|
component.updateLabel?.() || component.updateSprite?.();
|
||||||
|
|
||||||
allLocalizedSprites.forEach(sprite => {
|
|
||||||
if (sprite.node.active) {
|
|
||||||
sprite.updateSprite();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// // 供插件查询当前语言使用
|
|
||||||
// const win = window as any;
|
|
||||||
// win._languageData = {
|
|
||||||
// get language() {
|
|
||||||
// return I18nManager.instance.currentLanguage;
|
|
||||||
// },
|
|
||||||
// init(lang: string) {
|
|
||||||
// I18nManager.instance.init(lang);
|
|
||||||
// },
|
|
||||||
// updateSceneRenderers() {
|
|
||||||
// I18nManager.instance.updateSceneRenderers();
|
|
||||||
// },
|
|
||||||
// };
|
|
||||||
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 143 KiB |
@ -11,7 +11,7 @@
|
|||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@6c48a",
|
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@6c48a",
|
||||||
"displayName": "logo",
|
"displayName": "logo_en",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@f9941",
|
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@f9941",
|
||||||
"displayName": "logo",
|
"displayName": "logo_en",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
@ -11,7 +11,7 @@
|
|||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@6c48a",
|
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@6c48a",
|
||||||
"displayName": "logo",
|
"displayName": "logo_zh",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@f9941",
|
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@f9941",
|
||||||
"displayName": "logo",
|
"displayName": "logo_zh",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
BIN
assets/resources/audio/Scroll_Stop_Sound_normal.mp3
Normal file
14
assets/resources/audio/Scroll_Stop_Sound_normal.mp3.meta
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.0",
|
||||||
|
"importer": "audio-clip",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "a0a2b727-37d9-4051-b08c-d546919ed1a8",
|
||||||
|
"files": [
|
||||||
|
".json",
|
||||||
|
".mp3"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"downloadMode": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -55,7 +55,7 @@
|
|||||||
"Weekly Ranking": "Ugentlig rangliste",
|
"Weekly Ranking": "Ugentlig rangliste",
|
||||||
"Monthly Ranking": "Månedlig rangliste",
|
"Monthly Ranking": "Månedlig rangliste",
|
||||||
"Event Description": "Eventbeskrivelse",
|
"Event Description": "Eventbeskrivelse",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Deltag i udvalgte spil i eventperioden, og bliv rangeret efter “gevinstpoint”. De XX bedst placerede spillere modtager attraktive præmier!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "I kampagneperioden — deltag i de udvalgte spil, og hvis dine indsatser ligger i top XX, kan du få store præmier!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Opnå i alt XX indsatser og en samlet indsats på XX for at deltage i eventet",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Opnå i alt XX indsatser og en samlet indsats på XX for at deltage i eventet",
|
||||||
"Historical leaderboard records": "Historik for ranglister",
|
"Historical leaderboard records": "Historik for ranglister",
|
||||||
"Claim with one click": "Hent alle præmier",
|
"Claim with one click": "Hent alle præmier",
|
||||||
@ -125,7 +125,7 @@
|
|||||||
"Weekly Ranking": "Wochenrangliste",
|
"Weekly Ranking": "Wochenrangliste",
|
||||||
"Monthly Ranking": "Monatsrangliste",
|
"Monthly Ranking": "Monatsrangliste",
|
||||||
"Event Description": "Eventbeschreibung",
|
"Event Description": "Eventbeschreibung",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Nehmen Sie während des Eventzeitraums an den angegebenen Spielen teil und werden Sie nach „Gewinnpunkten“ gerankt. Die Top XX Spieler erhalten attraktive Preise!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Während der Aktionszeit nimm an den ausgewählten Spielen teil und sichere dir großartige Preise, wenn deine Einsätze unter den Top-XX liegen!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Erreichen Sie insgesamt XX Einsätze und einen kumulierten Einsatz von XX, um am Event teilzunehmen",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Erreichen Sie insgesamt XX Einsätze und einen kumulierten Einsatz von XX, um am Event teilzunehmen",
|
||||||
"Historical leaderboard records": "Ranglistenverlauf",
|
"Historical leaderboard records": "Ranglistenverlauf",
|
||||||
"Claim with one click": "Alle Belohnungen abholen",
|
"Claim with one click": "Alle Belohnungen abholen",
|
||||||
@ -195,7 +195,7 @@
|
|||||||
"Weekly Ranking": "Weekly Ranking",
|
"Weekly Ranking": "Weekly Ranking",
|
||||||
"Monthly Ranking": "Monthly Ranking",
|
"Monthly Ranking": "Monthly Ranking",
|
||||||
"Event Description": "Event Description",
|
"Event Description": "Event Description",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "During the event, participate in the designated games and rank within the top XX by bets to win generous rewards!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumulate XX bets or a total wager of XX to participate in the event",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumulate XX bets or a total wager of XX to participate in the event",
|
||||||
"Historical leaderboard records": "Historical leaderboard records",
|
"Historical leaderboard records": "Historical leaderboard records",
|
||||||
"Claim with one click": "Claim with one click",
|
"Claim with one click": "Claim with one click",
|
||||||
@ -265,7 +265,7 @@
|
|||||||
"Weekly Ranking": "Ranking Semanal",
|
"Weekly Ranking": "Ranking Semanal",
|
||||||
"Monthly Ranking": "Ranking Mensual",
|
"Monthly Ranking": "Ranking Mensual",
|
||||||
"Event Description": "Descripción del Evento",
|
"Event Description": "Descripción del Evento",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante el período del evento, participa en los juegos designados y clasifícate según los “puntos de ganancia”. ¡Los XX mejores jugadores obtendrán grandes premios!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante el período del evento, participa en los juegos designados y, si tus apuestas se ubican entre los primeros XX, ¡podrás ganar grandes premios!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumula XX apuestas y alcanza un total de apuestas de XX para poder participar en el evento",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumula XX apuestas y alcanza un total de apuestas de XX para poder participar en el evento",
|
||||||
"Historical leaderboard records": "Historial de Rankings",
|
"Historical leaderboard records": "Historial de Rankings",
|
||||||
"Claim with one click": "Reclamar Todo",
|
"Claim with one click": "Reclamar Todo",
|
||||||
@ -335,7 +335,7 @@
|
|||||||
"Weekly Ranking": "Viikoittainen lista",
|
"Weekly Ranking": "Viikoittainen lista",
|
||||||
"Monthly Ranking": "Kuukausittainen lista",
|
"Monthly Ranking": "Kuukausittainen lista",
|
||||||
"Event Description": "Tapahtuman kuvaus",
|
"Event Description": "Tapahtuman kuvaus",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Osallistu tapahtuman aikana määrättyihin peleihin ja sijoitu “voittopisteiden” perusteella. Parhaat XX pelaajaa saavat houkuttelevia palkintoja!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Kampanjan aikana osallistu valittuihin peleihin, ja jos panoksesi sijoittuvat kärjen XX joukkoon, voit voittaa upeita palkintoja!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Saavuta yhteensä XX panostusta ja XX kokonaispanos osallistuaksesi tapahtumaan",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Saavuta yhteensä XX panostusta ja XX kokonaispanos osallistuaksesi tapahtumaan",
|
||||||
"Historical leaderboard records": "Tulostaulukon historia",
|
"Historical leaderboard records": "Tulostaulukon historia",
|
||||||
"Claim with one click": "Lunasta kaikki",
|
"Claim with one click": "Lunasta kaikki",
|
||||||
@ -405,7 +405,7 @@
|
|||||||
"Weekly Ranking": "Classement hebdomadaire",
|
"Weekly Ranking": "Classement hebdomadaire",
|
||||||
"Monthly Ranking": "Classement mensuel",
|
"Monthly Ranking": "Classement mensuel",
|
||||||
"Event Description": "Description de l’événement",
|
"Event Description": "Description de l’événement",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Pendant la période de l’événement, participez aux jeux désignés et soyez classé selon les « points de gain ». Les XX meilleurs joueurs recevront des récompenses attractives !",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Pendant la période de l’événement, participez aux jeux désignés et, si vos mises se classent parmi les XX premiers, vous pourrez remporter de superbes récompenses !",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Cumulez XX mises et atteignez un montant total de mises de XX pour pouvoir participer à l’événement",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Cumulez XX mises et atteignez un montant total de mises de XX pour pouvoir participer à l’événement",
|
||||||
"Historical leaderboard records": "Historique des classements",
|
"Historical leaderboard records": "Historique des classements",
|
||||||
"Claim with one click": "Tout réclamer",
|
"Claim with one click": "Tout réclamer",
|
||||||
@ -475,7 +475,7 @@
|
|||||||
"Weekly Ranking": "Peringkat Mingguan",
|
"Weekly Ranking": "Peringkat Mingguan",
|
||||||
"Monthly Ranking": "Peringkat Bulanan",
|
"Monthly Ranking": "Peringkat Bulanan",
|
||||||
"Event Description": "Deskripsi Acara",
|
"Event Description": "Deskripsi Acara",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Selama periode acara, mainkan game yang ditentukan dan menangkan poin untuk masuk ke peringkat XX teratas dan dapatkan hadiah menarik!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Selama periode acara, ikut serta dalam permainan yang ditentukan dan raih peringkat teratas XX berdasarkan taruhan untuk mendapatkan hadiah besar!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Akumulasi taruhan mencapai XX kali dan total taruhan mencapai XX untuk berpartisipasi dalam acara",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Akumulasi taruhan mencapai XX kali dan total taruhan mencapai XX untuk berpartisipasi dalam acara",
|
||||||
"Historical leaderboard records": "Riwayat Papan Peringkat",
|
"Historical leaderboard records": "Riwayat Papan Peringkat",
|
||||||
"Claim with one click": "Klaim Sekaligus",
|
"Claim with one click": "Klaim Sekaligus",
|
||||||
@ -545,7 +545,7 @@
|
|||||||
"Weekly Ranking": "Classifica Settimanale",
|
"Weekly Ranking": "Classifica Settimanale",
|
||||||
"Monthly Ranking": "Classifica Mensile",
|
"Monthly Ranking": "Classifica Mensile",
|
||||||
"Event Description": "Descrizione dell’Evento",
|
"Event Description": "Descrizione dell’Evento",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante il periodo dell’evento, partecipa ai giochi selezionati e vieni classificato in base ai “punti vincita”. I primi XX giocatori riceveranno premi interessanti!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante il periodo dell’evento, partecipa ai giochi designati e, se le tue puntate rientrano tra le prime XX, potrai ottenere ricche ricompense!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumula XX puntate e raggiungi un totale di puntate pari a XX per partecipare all’evento",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumula XX puntate e raggiungi un totale di puntate pari a XX per partecipare all’evento",
|
||||||
"Historical leaderboard records": "Cronologia delle Classifiche",
|
"Historical leaderboard records": "Cronologia delle Classifiche",
|
||||||
"Claim with one click": "Riscatta Tutto",
|
"Claim with one click": "Riscatta Tutto",
|
||||||
@ -615,7 +615,7 @@
|
|||||||
"Weekly Ranking": "ウィークリーランキング",
|
"Weekly Ranking": "ウィークリーランキング",
|
||||||
"Monthly Ranking": "マンスリーランキング",
|
"Monthly Ranking": "マンスリーランキング",
|
||||||
"Event Description": "イベント概要",
|
"Event Description": "イベント概要",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "イベント期間中に指定されたゲームに参加し、「獲得ポイント」に基づいてランキングが決定されます。上位 XX 名のプレイヤーには豪華報酬が贈られます!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "イベント期間中、指定されたゲームに参加し、ベットがトップXXに入れば、豪華な報酬を獲得できます!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "累計ベット回数が XX 回、かつ累計ベット額が XX に達すると、イベントに参加できます",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "累計ベット回数が XX 回、かつ累計ベット額が XX に達すると、イベントに参加できます",
|
||||||
"Historical leaderboard records": "ランキング履歴",
|
"Historical leaderboard records": "ランキング履歴",
|
||||||
"Claim with one click": "一括受け取り",
|
"Claim with one click": "一括受け取り",
|
||||||
@ -685,7 +685,7 @@
|
|||||||
"Weekly Ranking": "주간 랭킹",
|
"Weekly Ranking": "주간 랭킹",
|
||||||
"Monthly Ranking": "월간 랭킹",
|
"Monthly Ranking": "월간 랭킹",
|
||||||
"Event Description": "이벤트 안내",
|
"Event Description": "이벤트 안내",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "이벤트 기간 동안 지정된 게임에 참여하고 “획득 포인트” 기준으로 랭킹이 결정됩니다. 상위 XX명의 플레이어에게 푸짐한 보상이 지급됩니다!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "이벤트 기간 동안 지정된 게임에 참여하고 베팅 순위가 상위 XX위 안에 들면 풍성한 보상을 받을 수 있습니다!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "누적 베팅 횟수 XX회 및 누적 베팅 금액 XX를 달성하면 이벤트에 참여할 수 있습니다",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "누적 베팅 횟수 XX회 및 누적 베팅 금액 XX를 달성하면 이벤트에 참여할 수 있습니다",
|
||||||
"Historical leaderboard records": "랭킹 기록",
|
"Historical leaderboard records": "랭킹 기록",
|
||||||
"Claim with one click": "일괄 수령",
|
"Claim with one click": "일괄 수령",
|
||||||
@ -755,7 +755,7 @@
|
|||||||
"Weekly Ranking": "အပတ်စဉ် အဆင့်သတ်မှတ်ဇယား",
|
"Weekly Ranking": "အပတ်စဉ် အဆင့်သတ်မှတ်ဇယား",
|
||||||
"Monthly Ranking": "လစဉ် အဆင့်သတ်မှတ်ဇယား",
|
"Monthly Ranking": "လစဉ် အဆင့်သတ်မှတ်ဇယား",
|
||||||
"Event Description": "ပွဲလှုပ်ရှားမှု အကြောင်းအရာ",
|
"Event Description": "ပွဲလှုပ်ရှားမှု အကြောင်းအရာ",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "ပွဲလှုပ်ရှားမှုကာလအတွင်း သတ်မှတ်ထားသော ဂိမ်းများတွင် ပါဝင်ကစားပြီး “အနိုင်ရမှတ်များ” အပေါ် မူတည်၍ အဆင့်သတ်မှတ်မည်ဖြစ်ပါသည်။ ထိပ်ဆုံး XX ဦးသည် ဆုလာဘ်အထူးများကို ရရှိမည်ဖြစ်ပါသည်။",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "အစီအစဉ်ကာလအတွင်း သတ်မှတ်ထားသောဂိမ်းများတွင် ပါဝင်ကာ ပေါက်ကြေးတင်ထားမှုများသည် ထိပ်တန်း XX အဆင့်အတွင်းဝင်လျှင် စျေးကြီးမော်လပြည့် ရခိုင်ထောက်ပံ့မျိုးစုံကို ရယူနိုင်ပါသည်!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "စုစုပေါင်း လောင်းကစားအကြိမ် XX ကြိမ်နှင့် စုစုပေါင်း လောင်းကစားပမာဏ XX ကို ပြည့်မီပါက ပွဲလှုပ်ရှားမှုတွင် ပါဝင်နိုင်ပါသည်",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "စုစုပေါင်း လောင်းကစားအကြိမ် XX ကြိမ်နှင့် စုစုပေါင်း လောင်းကစားပမာဏ XX ကို ပြည့်မီပါက ပွဲလှုပ်ရှားမှုတွင် ပါဝင်နိုင်ပါသည်",
|
||||||
"Historical leaderboard records": "အဆင့်သတ်မှတ်ဇယား မှတ်တမ်း",
|
"Historical leaderboard records": "အဆင့်သတ်မှတ်ဇယား မှတ်တမ်း",
|
||||||
"Claim with one click": "တစ်ကြိမ်တည်း ဆုလက်ခံမည်",
|
"Claim with one click": "တစ်ကြိမ်တည်း ဆုလက်ခံမည်",
|
||||||
@ -825,7 +825,7 @@
|
|||||||
"Weekly Ranking": "Wekelijkse ranglijst",
|
"Weekly Ranking": "Wekelijkse ranglijst",
|
||||||
"Monthly Ranking": "Maandelijkse ranglijst",
|
"Monthly Ranking": "Maandelijkse ranglijst",
|
||||||
"Event Description": "Beschrijving van het evenement",
|
"Event Description": "Beschrijving van het evenement",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Neem tijdens de evenementperiode deel aan de geselecteerde spellen en word gerangschikt op basis van “winstpunten”. De beste XX spelers ontvangen aantrekkelijke beloningen!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Tijdens de actieperiode kun je deelnemen aan de aangewezen spellen en, als je inzetten bij de top XX horen, geweldige prijzen winnen!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Bereik in totaal XX inzetten en een cumulatief inzetbedrag van XX om aan het evenement deel te nemen",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Bereik in totaal XX inzetten en een cumulatief inzetbedrag van XX om aan het evenement deel te nemen",
|
||||||
"Historical leaderboard records": "Geschiedenis van ranglijsten",
|
"Historical leaderboard records": "Geschiedenis van ranglijsten",
|
||||||
"Claim with one click": "Alles claimen",
|
"Claim with one click": "Alles claimen",
|
||||||
@ -895,7 +895,7 @@
|
|||||||
"Weekly Ranking": "Classificação Semanal",
|
"Weekly Ranking": "Classificação Semanal",
|
||||||
"Monthly Ranking": "Classificação Mensal",
|
"Monthly Ranking": "Classificação Mensal",
|
||||||
"Event Description": "Descrição do Evento",
|
"Event Description": "Descrição do Evento",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante o período do evento, participe dos jogos selecionados e seja classificado com base nos “pontos de ganho”. Os XX melhores jogadores receberão prêmios atrativos!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante o período do evento, participe nos jogos designados e, se as suas apostas ficarem entre os primeiros XX, você poderá ganhar grandes recompensas!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumule XX apostas e alcance um total de apostas de XX para participar do evento",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumule XX apostas e alcance um total de apostas de XX para participar do evento",
|
||||||
"Historical leaderboard records": "Histórico de Classificações",
|
"Historical leaderboard records": "Histórico de Classificações",
|
||||||
"Claim with one click": "Resgatar Tudo",
|
"Claim with one click": "Resgatar Tudo",
|
||||||
@ -965,7 +965,7 @@
|
|||||||
"Weekly Ranking": "Clasament săptămânal",
|
"Weekly Ranking": "Clasament săptămânal",
|
||||||
"Monthly Ranking": "Clasament lunar",
|
"Monthly Ranking": "Clasament lunar",
|
||||||
"Event Description": "Descrierea evenimentului",
|
"Event Description": "Descrierea evenimentului",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Pe durata evenimentului, participă la jocurile selectate și fii clasat în funcție de „punctele de câștig”. Primii XX de jucători vor primi recompense atractive!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "În perioada evenimentului, participă la jocurile desemnate și, dacă pariurile tale se află în top XX, poți obține recompense generoase!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumulează XX pariuri și atinge un total al pariurilor de XX pentru a putea participa la eveniment",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumulează XX pariuri și atinge un total al pariurilor de XX pentru a putea participa la eveniment",
|
||||||
"Historical leaderboard records": "Istoric clasamente",
|
"Historical leaderboard records": "Istoric clasamente",
|
||||||
"Claim with one click": "Revendică tot",
|
"Claim with one click": "Revendică tot",
|
||||||
@ -1035,7 +1035,7 @@
|
|||||||
"Weekly Ranking": "Еженедельный рейтинг",
|
"Weekly Ranking": "Еженедельный рейтинг",
|
||||||
"Monthly Ranking": "Ежемесячный рейтинг",
|
"Monthly Ranking": "Ежемесячный рейтинг",
|
||||||
"Event Description": "Описание события",
|
"Event Description": "Описание события",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "В период проведения события участвуйте в выбранных играх и занимайте места в рейтинге на основе «очков выигрыша». Топ XX игроков получат щедрые награды!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "В период проведения акции участвуйте в выбранных играх и, если ваши ставки войдут в топ XX, вы сможете получить щедрые призы!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Совершите XX ставок и наберите общий объём ставок XX, чтобы принять участие в событии",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Совершите XX ставок и наберите общий объём ставок XX, чтобы принять участие в событии",
|
||||||
"Historical leaderboard records": "История рейтингов",
|
"Historical leaderboard records": "История рейтингов",
|
||||||
"Claim with one click": "Забрать всё",
|
"Claim with one click": "Забрать всё",
|
||||||
@ -1048,7 +1048,6 @@
|
|||||||
"Event": "Событие",
|
"Event": "Событие",
|
||||||
"Claim": "Забрать",
|
"Claim": "Забрать",
|
||||||
"Event Time": "Время события"
|
"Event Time": "Время события"
|
||||||
|
|
||||||
},
|
},
|
||||||
"sv": {
|
"sv": {
|
||||||
"AID_AUTO_BUTTON": "Starta autospinn",
|
"AID_AUTO_BUTTON": "Starta autospinn",
|
||||||
@ -1106,7 +1105,7 @@
|
|||||||
"Weekly Ranking": "Veckovis topplista",
|
"Weekly Ranking": "Veckovis topplista",
|
||||||
"Monthly Ranking": "Månatlig topplista",
|
"Monthly Ranking": "Månatlig topplista",
|
||||||
"Event Description": "Evenemangsbeskrivning",
|
"Event Description": "Evenemangsbeskrivning",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Delta i de utvalda spelen under evenemangsperioden och rangordnas baserat på ”vinstpoäng”. De XX bästa spelarna får attraktiva belöningar!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Under kampanjperioden — delta i de utvalda spelen, och om dina insatser hamnar bland topp XX kan du vinna fina priser!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Uppnå totalt XX insatser och ett sammanlagt insatsbelopp på XX för att delta i evenemanget",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Uppnå totalt XX insatser och ett sammanlagt insatsbelopp på XX för att delta i evenemanget",
|
||||||
"Historical leaderboard records": "Topplistehistorik",
|
"Historical leaderboard records": "Topplistehistorik",
|
||||||
"Claim with one click": "Hämta alla",
|
"Claim with one click": "Hämta alla",
|
||||||
@ -1176,7 +1175,7 @@
|
|||||||
"Weekly Ranking": "อันดับรายสัปดาห์",
|
"Weekly Ranking": "อันดับรายสัปดาห์",
|
||||||
"Monthly Ranking": "อันดับรายเดือน",
|
"Monthly Ranking": "อันดับรายเดือน",
|
||||||
"Event Description": "รายละเอียดกิจกรรม",
|
"Event Description": "รายละเอียดกิจกรรม",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "ร่วมเล่นเกมที่กำหนดในช่วงเวลากิจกรรม และจัดอันดับตาม “คะแนนชนะ” ผู้เล่นที่ติดอันดับ XX แรก รับรางวัลสุดพิเศษทันที!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "ในช่วงกิจกรรม เพียงเข้าร่วมเล่นเกมที่กำหนด และมียอดเดิมพันติดอันดับ XX อันดับแรก ก็รับรางวัลใหญ่ได้เลย!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "สะสมยอดเดิมพันครบ XX ครั้ง และมียอดเดิมพันสะสมครบ XX จึงจะมีสิทธิ์เข้าร่วมกิจกรรม",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "สะสมยอดเดิมพันครบ XX ครั้ง และมียอดเดิมพันสะสมครบ XX จึงจะมีสิทธิ์เข้าร่วมกิจกรรม",
|
||||||
"Historical leaderboard records": "ประวัติตารางจัดอันดับ",
|
"Historical leaderboard records": "ประวัติตารางจัดอันดับ",
|
||||||
"Claim with one click": "รับรางวัลทั้งหมดในครั้งเดียว",
|
"Claim with one click": "รับรางวัลทั้งหมดในครั้งเดียว",
|
||||||
@ -1246,7 +1245,7 @@
|
|||||||
"Weekly Ranking": "Haftalık Sıralama",
|
"Weekly Ranking": "Haftalık Sıralama",
|
||||||
"Monthly Ranking": "Aylık Sıralama",
|
"Monthly Ranking": "Aylık Sıralama",
|
||||||
"Event Description": "Etkinlik Açıklaması",
|
"Event Description": "Etkinlik Açıklaması",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Etkinlik süresi boyunca belirlenen oyunlara katılın ve “kazanç puanları”na göre sıralamaya girin. İlk XX oyuncu cazip ödüller kazanacaktır!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Etkinlik süresi boyunca belirlenen oyunlara katıl ve bahislerin ilk XX sırada yer alırsa büyük ödüller kazan!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Etkinliğe katılmak için toplam XX bahis yapın ve toplam bahis tutarınız XX’e ulaşsın",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Etkinliğe katılmak için toplam XX bahis yapın ve toplam bahis tutarınız XX’e ulaşsın",
|
||||||
"Historical leaderboard records": "Sıralama Geçmişi",
|
"Historical leaderboard records": "Sıralama Geçmişi",
|
||||||
"Claim with one click": "Hepsini Al",
|
"Claim with one click": "Hepsini Al",
|
||||||
@ -1316,7 +1315,7 @@
|
|||||||
"Weekly Ranking": "Bảng tuần",
|
"Weekly Ranking": "Bảng tuần",
|
||||||
"Monthly Ranking": "Bảng tháng",
|
"Monthly Ranking": "Bảng tháng",
|
||||||
"Event Description": "Giới thiệu sự kiện",
|
"Event Description": "Giới thiệu sự kiện",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Trong thời gian diễn ra sự kiện, tham gia các trò chơi được chỉ định và xếp hạng theo “điểm thắng”. Người chơi nằm trong Top XX sẽ nhận được phần thưởng hấp dẫn!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Trong thời gian diễn ra sự kiện, hãy tham gia các trò chơi được chỉ định và xếp hạng trong top XX về tổng cược để nhận những phần thưởng hấp dẫn!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Tích lũy XX lượt cược và tổng số tiền cược đạt XX để đủ điều kiện tham gia sự kiện",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Tích lũy XX lượt cược và tổng số tiền cược đạt XX để đủ điều kiện tham gia sự kiện",
|
||||||
"Historical leaderboard records": "Lịch sử bảng xếp hạng",
|
"Historical leaderboard records": "Lịch sử bảng xếp hạng",
|
||||||
"Claim with one click": "Nhận thưởng một lần",
|
"Claim with one click": "Nhận thưởng một lần",
|
||||||
@ -1386,7 +1385,7 @@
|
|||||||
"Weekly Ranking": "週榜",
|
"Weekly Ranking": "週榜",
|
||||||
"Monthly Ranking": "月榜",
|
"Monthly Ranking": "月榜",
|
||||||
"Event Description": "活動說明",
|
"Event Description": "活動說明",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "活動期間內參與指定遊戲,依「贏分」排名前 XX 名,即可獲得豐富大獎!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "活動期間內參與指定遊戲,依「投注」排名前 XX 名,即可獲得豐富大獎!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "累積投注達 XX 次,且累積投注金額達 XX,即可參與活動",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "累積投注達 XX 次,且累積投注金額達 XX,即可參與活動",
|
||||||
"Historical leaderboard records": "歷史排行榜紀錄",
|
"Historical leaderboard records": "歷史排行榜紀錄",
|
||||||
"Claim with one click": "一鍵領取",
|
"Claim with one click": "一鍵領取",
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
"physics-2d": "inherit-project-setting"
|
"physics-2d": "inherit-project-setting"
|
||||||
},
|
},
|
||||||
"macroConfig": {
|
"macroConfig": {
|
||||||
"cleanupImageCache": "off"
|
"cleanupImageCache": "inherit-project-setting"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nativeCodeBundleMode": "both",
|
"nativeCodeBundleMode": "both",
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"handleTemplateMd5Link": true
|
"handleTemplateMd5Link": true
|
||||||
},
|
},
|
||||||
"mainBundleIsRemote": false,
|
"mainBundleIsRemote": false,
|
||||||
"mainBundleCompressionType": "merge_dep",
|
"mainBundleCompressionType": "merge_all_json",
|
||||||
"useSplashScreen": false,
|
"useSplashScreen": false,
|
||||||
"bundleCommonChunk": false,
|
"bundleCommonChunk": false,
|
||||||
"packAutoAtlas": true,
|
"packAutoAtlas": true,
|
||||||
|
|||||||
@ -1,3 +1,11 @@
|
|||||||
{
|
{
|
||||||
"__version__": "1.3.9"
|
"__version__": "1.3.9",
|
||||||
|
"splash-setting": {
|
||||||
|
"background": {
|
||||||
|
"type": "color"
|
||||||
|
},
|
||||||
|
"logo": {
|
||||||
|
"type": "none"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
"label": "customSplash",
|
"label": "customSplash",
|
||||||
"enable": true,
|
"enable": true,
|
||||||
"customSplash": {
|
"customSplash": {
|
||||||
"complete": false,
|
"complete": true,
|
||||||
"form": "https://creator-api.cocos.com/api/form/show?sid=d7d2df3c7819de249897b8f170c1432d"
|
"form": "https://creator-api.cocos.com/api/form/show?sid=d7d2df3c7819de249897b8f170c1432d"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||