| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- import { _decorator, Component, Node, Button, tween, Vec3, JsonAsset, Sprite, RichText, Animation, Vec4, color, director } from 'cc';
- import { RewardVideoSystem } from '../ad/RewardVideoSystem';
- import { DataSystem } from '../core/data/DataSystem';
- import { Http } from '../core/net/Http';
- import { HttpSystem } from '../core/net/HttpSystem';
- import { ResourceLoader } from '../core/resourceManager/ResourceLoader';
- import { Sound } from '../core/sound/Sound';
- import { SoundSystem } from '../core/sound/SoundSystem';
- import { WindowOpenMode } from '../core/ui/window/WindowOpenMode';
- import { WindowSystem } from '../core/ui/window/WindowSystem';
- import { HttpErrorCode } from '../data/HttpErrorCode';
- import { platform } from '../data/jsb/platform';
- import { UserData } from '../data/UserData';
- import { RedPointData } from '../main/RedPointData';
- import { ReportThinking } from '../ReportThinking';
- const { ccclass, property, requireComponent } = _decorator;
- @ccclass('Draw')
- @requireComponent(Http)
- export class Draw extends Component {
- @property({ tooltip: "抽奖按钮", type: Node }) public drawBtn: Node;
- @property({ tooltip: "规则按钮", type: Node }) public ruleBtn: Node;
- @property({ tooltip: "关闭按钮", type: Node }) public closeBtn: Node;
- @property({ tooltip: "转盘", type: Node }) public turntable: Node;
- @property({ tooltip: "免费抽奖按钮文本", type: Node }) public freeBtnShow: Node;
- @property({ tooltip: "视频抽奖按钮文本", type: Node }) public vidoeBtnShow: Node;
- @property({ tooltip: "剩余次数文本", type: RichText }) public times: RichText;
- @property({ tooltip: "跑马灯动画", type: Animation }) public turnLightAnim: Animation;
- @property({ tooltip: "中奖动画", type: Animation }) public winAnim: Animation;
- @property({ tooltip: "中奖选框", type: Sprite }) public winChooseBox: Sprite;
- @property({ tooltip: "音效组件", type: Sound }) public sound: Sound;
- private freeTimes = 0;//免费抽奖次数
- private videoTimes = 0;//视频抽奖次数
- private turntableConfig;//转盘配置
- private rotaryRotation = 0;//角度
- private winId = 0;//中奖id
- private prizeNum = 0;//中奖数目
- start() {
- }
- public setDrawTimes(freeTimes: number, videoTimes: number, config: any) {
- this.freeTimes = freeTimes;
- this.videoTimes = videoTimes;
- this.turntableConfig = config;
- this.rotaryRotation = 360 / config.length;
- videoTimes && (this.drawBtn.getComponent(Button).interactable = true);
- }
- private async toGetVideo() {
- let result = await this.getComponent(Http).send("/api/ad/watchVideoAD");
- if (result && result.code == 0) {//可以观看视频
- ReportThinking.ad_init('turntable');
- let adData = await RewardVideoSystem.show();
- if (adData) {//视频观看成功
- let _result = await this.getComponent(Http).send("/api/draw/draw", { free: false, adData: adData.obj });
- if (_result && _result.code == 0) {
- this.prizeNum = _result.data.num;
- ReportThinking.ad_end('turntable', this.turntableConfig[_result.data.index - 1].item == 3 ? this.prizeNum : 0);
- this.rotaryTable(_result.data.index);
- } else {//返回错误信息
- if (_result && _result.code == HttpErrorCode.VideoADCD) {
- WindowSystem.showTips('视频观看时间不足');
- } else {
- WindowSystem.showTips('抽奖失败');
- }
- this.initBtn(false);
- }
- } else {//视频错误
- WindowSystem.showTips('视频观看时间不足');
- this.initBtn(false);
- }
- } else {//返回错误,无法观看视频
- WindowSystem.showTips('视频次数不足');
- this.initBtn(false);
- }
- }
- //抽奖
- private async draw() {
- this.initBtn(true);
- if (this.freeTimes) {
- let result = await this.getComponent(Http).send("/api/draw/draw", { free: true });
- if (result && result.code == 0) {
- ReportThinking.turn(result.data.index, result.data.num);
- this.prizeNum = result.data.num;
- this.rotaryTable(result.data.index);
- } else {//返回错误信息
- WindowSystem.showTips('抽奖失败');
- this.initBtn(false);
- }
- return;
- }
- if (this.videoTimes) {
- this.toGetVideo();
- return;
- }
- }
- private rotaryTable(index: number) {
- this.winId = index;
- this.drawBtn.getComponent(Button).interactable = false;
- // this.turnLightAnim.play();
- let t = tween(this.turntable);
- this.turntable.eulerAngles = new Vec3(this.turntable.eulerAngles.x, this.turntable.eulerAngles.y, this.turntable.eulerAngles.z % 360);
- t.to(1, { eulerAngles: new Vec3(this.turntable.eulerAngles.x, this.turntable.eulerAngles.y, -360) }, { easing: "cubicIn" })
- .to(4, { eulerAngles: new Vec3(this.turntable.eulerAngles.x, this.turntable.eulerAngles.y, -1800 + (this.rotaryRotation * (index - 1))) }, { easing: "cubicOut" })
- .call(() => {
- this.sound.play(1);
- this.winAnim.play();//播放中奖动画
- })
- .start();
- this.updateTimes();
- }
- //中奖动画结束回调
- public winAnimBack() {
- this.winChooseBox.color = color(255, 255, 255, 255);
- this.scheduleOnce(() => {
- // this.turnLightAnim.stop();
- this.showPrize();
- }, 0.5);
- }
- //展示奖品
- public async showPrize() {
- let pName = '';
- switch (this.turntableConfig[this.winId - 1].item) {
- case 1://粮草
- pName = 'money';
- break;
- case 2://元宝
- pName = 'diamond';
- break;
- case 3://红包币
- pName = 'bonus';
- break;
- case 4:
- pName = 'prestige';
- break;
- }
- let userData = DataSystem.getData(UserData);
- ReportThinking.currency_increase(pName, userData[pName], this.prizeNum, this.prizeNum + userData[pName], 'turntable');
- await WindowSystem.open("prefabs/ui/turntable/turntablePrizePopup", WindowOpenMode.NotCloseAndCover,
- [{ icon: this.turntableConfig[this.winId - 1].icon, type: this.turntableConfig[this.winId - 1].item, num: this.prizeNum }]);
- this.prizeNum = 0;//重置奖品数目
- this.winChooseBox.color = color(255, 255, 255, 0);
- this.updataUI();
- }
- //更新转盘剩余次数
- public updateTimes() {
- if (this.freeTimes) {
- this.freeTimes--;
- } else {
- this.videoTimes--;
- }
- this.times.string = "<color=#ffffff>剩余次数:</color><color=#ffd522>" + (this.freeTimes + this.videoTimes) + "</color>";
- DataSystem.getData(RedPointData).canDraw = this.freeTimes + this.videoTimes > 0;
- }
- //ui刷新
- private updataUI() {
- this.initBtn(false);
- if (!this.freeTimes) {
- this.freeBtnShow.active = false;
- this.vidoeBtnShow.active = true;
- }
- if (!this.videoTimes) {
- this.drawBtn.getComponent(Button).interactable = false;//按键事件禁用
- this.drawBtn.getComponent(Sprite).grayscale = true;//按键置灰
- }
- }
- private initBtn(isDraw: boolean) {
- this.drawBtn.getComponent(Button).interactable = !isDraw;//按键事件
- this.drawBtn.getComponent(Sprite).grayscale = isDraw;//按键置灰
- this.ruleBtn.active = !isDraw;
- this.closeBtn.active = !isDraw;
- }
- private turntableRotation = 0;
- update() {
- if (this.turntableRotation != (Math.round(this.turntable.eulerAngles.z / 10) * 10) && (Math.round(this.turntable.eulerAngles.z / 10) * 10) % 20 == 0) {
- this.turntableRotation = (Math.round(this.turntable.eulerAngles.z / 10) * 10);
- // console.log("角度:" + this.turntable.eulerAngles.z);
- // console.log("转盘音效");
- this.sound.play(0);
- }
- }
- }
|