123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- import { _decorator, Node, Label, Sprite, EventTouch, SpriteFrame, Tween, tween, Vec3} from 'cc';
- import { BaseExp } from '../core/base/BaseExp';
- import { autoBind } from '../extend/AutoBind';
- import { userIns } from '../data/UserData';
- import { Constants } from '../data/Constants';
- import { stateMgr } from '../core/manager/StateManager';
- import { uiMgr } from '../core/manager/UIManager';
- import { ITEM_TYPE, ResUtil } from '../utils/ResUtil';
- import i18n from '../core/i18n/runtime-scripts/LanguageData';
- import { Utils } from '../utils/Utils';
- import { Game } from '../game/Game';
- import PlatformSystem from '../platform/PlatformSystem';
- import { audioMgr } from '../core/manager/AudioManager';
- const { ccclass, property } = _decorator;
- @ccclass('SettleUI')
- export class SettleUI extends BaseExp {
- @property({ type: SpriteFrame, tooltip: "成功的图片" })
- public success_sf: SpriteFrame;
- @property({ type: SpriteFrame, tooltip: "失败的图片" })
- public fail_sf: SpriteFrame;
- @property({ type: SpriteFrame, tooltip: "枪默认图片" })
- public gun_def_sf: SpriteFrame;
- @autoBind({ type: Sprite, tooltip: "成功状态的图片" })
- public success_status_icon: Sprite;
- @autoBind({ type: Label, tooltip: "关卡等级" })
- public task_num_lable: Label;
- @autoBind({ type: Sprite, tooltip: "解锁的枪的图片" })
- public gun_icon: Sprite;
- @autoBind({ type: Label, tooltip: "解锁进度" })
- public progress_num_lable: Label;
- @autoBind({ type: Sprite, tooltip: "未解锁的枪的图片" })
- public gun_not_unlock_icon: Sprite;
- @autoBind({ type: Sprite, tooltip: "未解锁的枪的图片" })
- public gun_unlock_icon: Sprite;
- @autoBind({ type: Node, tooltip: "旋转光节点" })
- public rotation_light: Node;
- @autoBind({ type: Node, tooltip: "任务奖励按钮" })
- public task_reward_btn: Node;
- @autoBind({ type: Node, tooltip: "爆头奖励按钮" })
- public headshot_reward_btn: Node;
- @autoBind({ type: Node, tooltip: "下一关按钮" })
- public next_level_btn: Node;
- @autoBind({ type: Node, tooltip: "返回首页" })
- public back_home_btn: Node;
- @autoBind({ type: Node, tooltip: "重新开始" })
- public restart_btn: Node;
- @autoBind({ type: Node, tooltip: "看视频双倍奖励" })
- public video_btn: Node;
- @autoBind({ type: Label, tooltip: "金币文本" })
- public gold_lable: Label;
- @autoBind({ type: Label, tooltip: "钻石文本" })
- public diamond_lable: Label;
- //关卡数据
- private levelData:any = null;
- //传递过后的参数
- private param:any = null;
- /*const param:any = {
- isWin: false,//是否胜利
- headShotNum: Game.I.player.headShotNum,//爆头数量
- cb: ()=>{//回调函数
-
- }
- }*/
- start() {
- this.closeOnBlank = false;
- //注册动态变化值
- stateMgr.registerUI(Constants.gold, this.gold_lable);
- stateMgr.registerUI(Constants.diamond, this.diamond_lable);
- }
-
- public show(...args: any[]){
- Tween.stopAllByTarget(this.rotation_light);
- this.rotation_light.active = false;
- this.hasAnim = true;
- this.param = args[0];
- //加载数据ui
- this.ui();
- }
- /**
- * 加载数据ui
- */
- public ui(){
- //先填充默认图片
- this.gun_not_unlock_icon.spriteFrame = this.gun_def_sf;
- this.gun_unlock_icon.spriteFrame = this.gun_def_sf;
- //成功失败的图片
- this.success_status_icon.spriteFrame = this.param.isWin? this.success_sf : this.fail_sf;
- const data: any = userIns.getCurLevelData();
- this.levelData = data;
- if(data){
- //关卡数
- this.task_num_lable.string = i18n("main.关卡任务 %{value}",{value: data.id});
- //枪的图片 解锁进度
- const unlock:string = data.unlock;
- if(!Utils.isNull(unlock)){
- let [gun_id,progress_str] = unlock.split('|');
- let [cur,max] = progress_str.split('/');
- let gunData:any = userIns.playerGunsTable.find(e=>e.id == gun_id);
- ResUtil.setSpriteFrame(gunData.gun_unlock_icon,this.gun_unlock_icon);
- ResUtil.setSpriteFrame(gunData.gun_not_unlock_icon,this.gun_not_unlock_icon);
- //解锁该武器
- if(cur == max && !Utils.isNull(gun_id)){
- this.rotation_light.active = true;
- userIns.unlockGun(gun_id);
- tween(this.rotation_light)
- .by(2, { eulerAngles: new Vec3(0, 0, -360) })
- .repeatForever()
- .start();
- }
- //解锁进度
- this.progress_num_lable.string =`${cur}/${max}`;
- this.gun_not_unlock_icon.fillRange = 1 - Number(cur)/Number(max);
- }else{
- this.progress_num_lable.string = `looking forward to it`;
- }
- }
- //关卡的奖励
- const reward:string = this.param.isWin ? data.reward_1 : data.reward_2;
- let [g_id_1,num_1] = reward.split('_');
- //任务奖励
- let reward_icon_1: Node = this.task_reward_btn.getChildByName("reward_icon");
- const itemData:any = userIns.itemTable.find(e=>e.id == g_id_1);
- //任务奖励图片
- ResUtil.setSpriteFrame(itemData.icon,reward_icon_1);
- //任务奖励数量
- this.task_reward_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${num_1}`;
- this.video_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${num_1}`;
- //延迟0.5播放奖励动画
- this.scheduleOnce(() => {
- this.flyReward(itemData,Number(num_1),this.task_reward_btn);
- },0.5)
- //是否胜利 胜利的时候有爆头奖励
- const isShowHeadshot:boolean = this.param.isWin && this.param.headShotNum > 0;
- this.headshot_reward_btn.active = isShowHeadshot;
- if(isShowHeadshot){
- //爆头奖励
- let [g_id_2,num_2] = Game.I.player.pData.headshotReward.split('_');
- const t_num_2:number = Number(num_2) * Game.I.player.headShotNum;
- let reward_icon_2: Node = this.headshot_reward_btn.getChildByName("reward_icon");
- const hData:any = userIns.itemTable.find(e=>e.id == g_id_2);
- //爆头任务奖励图片
- ResUtil.setSpriteFrame(hData.icon,reward_icon_2);
- //爆头奖励数量
- this.headshot_reward_btn.getChildByName("reward_num_lable").getComponent(Label).string = `x${t_num_2}`;
- //延迟0.5播放奖励动画
- this.scheduleOnce(() => {
- this.flyReward(hData,Number(t_num_2),this.headshot_reward_btn);
- },0.5)
- }
- //下一关按钮
- this.next_level_btn.active = this.param.isWin;
- //重新开始按钮
- this.restart_btn.active = !this.param.isWin;
- }
- /**
- * 飞钻石和金币的奖励
- * @param data 奖励的数据
- * @param num 数量
- * @param clikTarget 飞动的节点
- */
- public flyReward(data:any,num:number,clikTarget: Node){
- if(num <= 0)return;
- audioMgr.playOneShot(Constants.audios.reward);
- if(data.type == 1){
- userIns.data.gold += num;
- ResUtil.flyAnim(ITEM_TYPE.Coin, clikTarget, this.gold_lable.node, 5, 50,(b) => {});
- }else if(data.type == 2){
- userIns.data.diamond += num;
- ResUtil.flyAnim(ITEM_TYPE.Diamond, clikTarget, this.diamond_lable.node, 5, 50,(b) => {});
- }
- }
- /**
- * 按钮点击事件
- * @param event 事件
- * @param param 参数
- */
- override onBtnClicked(event:EventTouch, param:any) {
- super.onBtnClicked(event, param);
- let btnName = event.target.name;
- if(btnName === 'restart_btn'){//重新开始
- uiMgr.hide(Constants.popUIs.settleUI,this.param.cb);
- Game.I.restart();
- }else if(btnName ==='back_home_btn'){//返回首页
- uiMgr.pop(Constants.mainUIs.main);
- }else if(btnName ==='next_level_btn'){//下一关
- const nLevel = ()=>{
- uiMgr.hide(Constants.popUIs.settleUI,this.param.cb);
- Game.I.nextLevel();
- }
- //下一关判断是否触发广告
- let odds:number = Game.I.player.pData.adforceShow2;
- if(Utils.getRandomFloat(0,1) <= odds){
- PlatformSystem.platform.showRewardVideo((f) => {
- if(f) {//播放视频成功
- nLevel();
- }
- });
- }else{
- nLevel();
- }
- }else if(btnName ==='video_btn'){//看视频双倍奖励
- PlatformSystem.platform.showRewardVideo((f) => {
- if(f) {//播放视频成功
- this.video_btn.active = false;
- this.scheduleOnce(() => {
- //视频再奖励一次
- const reward:string = this.param.isWin ? this.levelData.reward_1 : this.levelData.reward_2;
- let [g_id_1,num_1] = reward.split('_');
- const itemData:any = userIns.itemTable.find(e=>e.id == g_id_1);
- this.flyReward(itemData,Number(num_1),this.video_btn);
- },0.3)
- }
- });
- }
- }
- }
|