import { _decorator, Component, Node, Label, RichText, EventHandler } from 'cc';
import { Http } from '../core/net/Http';
import { OpenWindow } from '../core/ui/window/OpenWindow';
import { WindowManager } from '../core/ui/window/WindowManager';
import { WindowOpenMode } from '../core/ui/window/WindowOpenMode';
import { Utils } from '../core/utils/Utils';
import { MultipleType } from '../Data/ADData';
import { g } from '../Data/g';
import { LoginWaitWin } from '../Windows/LoginWaitWin';
const { ccclass, property } = _decorator;
@ccclass('RedBoxItem')
export class RedBoxItem extends Component {
@property({ tooltip: "红包等级", type: Node }) public redLv: Node;
@property({ tooltip: "红包id", type: Node }) public redID: Node;
@property({ tooltip: "倒计时", type: Node }) public redTime: Node;
@property({ tooltip: "http服务", type: Http }) public http: Http;
@property({ tooltip: "领取神石回调", type: EventHandler }) public getDiamondBackFun: EventHandler;
@property({ tooltip: "红点", type: Node }) public redDot: Node;
public redType = 0;//红包类型0:免费红包,1:切磋红包
public opentime = 0;//红包开启时间
public redId = 0;//红包id
start() {
g.gameData.isPlayVideo = false;
}
public setData(data: any) {
this.redType = data.type;
this.opentime = data.canOpenTime;
this.redId = data.id;
if (data.type == 0) {
this.redLv.getComponent(Label).string = g.userData.lv + "级红包";
this.redID.getComponent(Label).string = "免费红包";
this.redTime.getComponent(RichText).string = "看视频领取";
} else {
this.redLv.getComponent(Label).string = data.lv + "级红包";
this.redID.getComponent(Label).string = "" + data.enemyName;
let _time = this.opentime * 1000 - Date.now();
this.redTime.getComponent(RichText).string = _time <= 0 ? "可领取" :
"" + Utils.formatCountDown(_time) + "后可领取";
if (_time > 0) {
this.schedule(this.scheduleCallback, 1);
} else {
this.redDot.active = true;
}
}
}
//定时回调
public scheduleCallback() {
let _time = this.opentime * 1000 - Date.now();
this.redTime.getComponent(RichText).string = _time <= 0 ? "可领取" :
"" + Utils.formatCountDown(_time) + "后可领取";
if (_time <= 0) {
this.redDot.active = true;
this.unschedule(this.scheduleCallback);
}
}
public isSend = false;
public async getRedBox() {
if (g.gameData.isPlayVideo) {
return;
}
g.gameData.isPlayVideo = true;
if (this.redType == 0) {
let data = await this.http.send("/api/ad/WatchVideoAD");
switch (data.code) {
case 0:
//播放视频
let adData = await g.showRewardVideo();
if (adData) {
this.videoBack();
} else {
//视频观看失败
WindowManager.showTips("视频观看时间不足");
}
break;
case 108:
WindowManager.showTips("今日视频次数已用完,请明日再继续");
g.gameData.isPlayVideo = false;
break;
default:
// WindowManager.showTips(g.CodeMsg[data.code]);
WindowManager.showTips("视频准备中,请稍后再试");
g.gameData.isPlayVideo = false;
break;
}
} else {
if (this.opentime - (Date.now() / 1000) <= 0) {
this.openRedBox();
} else {
WindowManager.showTips("倒计时结束后可抢红包");
g.gameData.isPlayVideo = false;
}
}
}
//视频结束回调
public async videoBack() {
//#region 打开加载等待界面
// let _window = await WindowManager.open("Prefabs/Windows/加载等待窗口", WindowOpenMode.NotCloseAndCover);
//#endregion
let data = await this.http.send("/api/wealth/AddDiamondForVideo", { multipleType: MultipleType.Default, adData: g.adData });
// _window.getComponent(LoginWaitWin).close();//关闭加载等待界面
if (data.code == 0) {
if (data.data.addDiamond > 0) {
this.getComponent(OpenWindow).prefabPath = "Prefabs/Windows/神石领取界面";
let _window = this.getComponent(OpenWindow);
_window.open([data.data.addDiamond, -1, null, this.getDiamondBackFun]);
} else {
this.getDiamondBackFun.emit([]);
}
} else {
WindowManager.showTips(g.CodeMsg[data.code]);
g.gameData.isPlayVideo = false;
}
}
public async openRedBox() {
//#region 打开加载等待界面
let _window = await WindowManager.open("Prefabs/Windows/加载等待窗口", WindowOpenMode.NotCloseAndCover);
//#endregion
let data = await this.http.send("/api/redPacket/OpenRedPacket", { redPacketID: this.redId });
_window.getComponent(LoginWaitWin).close();//关闭加载等待界面
if (data.code == 0) {
let _window = this.getComponent(OpenWindow);
if (data.data.openID == g.userData.id) {//打开红包
_window.prefabPath = "Prefabs/Windows/切磋红包奖品";
_window.open([data.data.prizes]);
} else {//红包被抢
_window.prefabPath = "Prefabs/Windows/红包被抢弹窗";
_window.open({ name: data.data.uerName, avator: data.data.userAvator, time: data.data.openTime });
}
for (let i = 0; i < g.gameData.myRedPacketDatas.length; i++) {
if (this.redId == g.gameData.myRedPacketDatas[i].id) {
g.gameData.myRedPacketDatas.splice(i, 1);
break;
}
}
this.close();
} else {
g.gameData.isPlayVideo = false;
WindowManager.showTips(g.CodeMsg[data.code]);
}
}
public close() {
this.node.removeFromParent();
this.destroy();
}
onDestroy() {
g.gameData.isPlayVideo = false;
}
}