import { _decorator, Component, Node } from 'cc'; import { widget_base } from './widget_base'; import { att_click_data, other_widget_finish_listen_item, widget_item_data } from '../../../data/data'; import { config } from '../../config'; import { ClientEvent } from '../../clientEvent'; import { gameManager } from '../gameManager'; const { ccclass, property } = _decorator; @ccclass('widget_click') export class widget_click extends widget_base { @property(Node) img_zhaobutong:Node = null; private mClickData:att_click_data = null; private mClickNum:number = 0; private mClickTime:number =1; //1秒内完成点击 private mHoldTime:number = 0; //按下的事件 protected init(): void { if(this.mData.att.click_data!=null){ this.mClickData = this.mData.att.click_data } } protected start(): void { if(this.mIsActive){ this.registeredEvent() } } protected registeredEvent(): void { this.mHoldTime = 0; this.mClickNum = 0; switch (this.mClickData.click_type) { case config.clcik_type.Press_and_hold: this.node.on(Node.EventType.TOUCH_START,()=>{ if(!this.mIsActive) return this.mHoldTime = 0; this.checkTime() this.schedule(this.checkTime,1) }) this.node.on(Node.EventType.TOUCH_END,()=>{ if(!this.mIsActive) return if(!this.getIsFinish()){ this.mHoldTime = 0; this.unschedule(this.checkTime) } }) break; case config.clcik_type.Multiple_clicks: this.node.on(Node.EventType.TOUCH_START,()=>{ if(!this.mIsActive) return this.scheduleOnce(this.reSetClickNum,this.mClickTime); this.mClickNum++; if(this.mClickNum===this.mClickData.multiple_check_num){ this.mClickNum = 0; this.unschedule(this.reSetClickNum) this.exeFinish() } }) break; case config.clcik_type.click: this.node.off(Node.EventType.TOUCH_END) this.node.on(Node.EventType.TOUCH_END,()=>{ if(!this.mIsActive) return this.exeFinish() }) break; case config.clcik_type.click_not_auto_finish: this.node.off(Node.EventType.TOUCH_END) this.node.on(Node.EventType.TOUCH_END,()=>{ if(!this.mIsActive) return ClientEvent.dispatchEvent(config.EventRun.WIDGET_FINISH,this.mData.att.id) }) break; } } public exeFinish(){ this.checkAddOtherWidgetFinishListenOperation() } private checkTime(){ this.mHoldTime+=1; if(this.getIsFinish()){ this.unschedule(this.checkTime) return } if(this.mClickData.hold_time<=this.mHoldTime){ this.exeFinish() this.unschedule(this.checkTime) return } } private reSetClickNum(){ this.mClickNum = 0; } public showZhaoButongFinishStatus(): void { gameManager.Singleton.sys_click_correct_detail_music() this.img_zhaobutong.active = true; } public hideZhaoButongFinishStatus(): void { if(this.img_zhaobutong != null) { this.img_zhaobutong.active = false; } } // 检查添加其他控件 private checkAddOtherWidgetFinishListenOperation() { let onFinishEvent_cb = (()=>{ this.checkOtherListenWidgetFinish(false) this.onFinishEvent() }) if(this.checkOtherWidgetFinishListenListData()==false) { onFinishEvent_cb() return } // 是-直接执行自身 if(this.mClickData.is_direct_execute_myself) { // console.log('直接-执行自身') onFinishEvent_cb() } // 否-直接执行自身 else { // 是-选择其一执行自身 let finish_list = this.checkOtherListenWidgetFinish(true) // console.log('完成的控件列表=',finish_list) if(this.mClickData.is_select_anyone_execute_myself) { let is_execute_myself = false for (let index = 0; index < finish_list.length; index++) { const element = finish_list[index]; if(element.is_execute_myself) { is_execute_myself = true break } } if(is_execute_myself) { // console.log('满足其中一个条件-执行自身') onFinishEvent_cb() } } // 否-选择其一执行自身 else { // 控件全部完成 if(finish_list.length==this.mClickData.other_widget_finish_listen_list.length) { // console.log('控件全部完成-执行自身') onFinishEvent_cb() return } // 同时满足 let execute_count = 0 let have_count = 0 for (let i = 0; i < this.mClickData.other_widget_finish_listen_list.length; i++) { const i_element = this.mClickData.other_widget_finish_listen_list[i] if(i_element.is_execute_myself) { execute_count+=1 for (let j = 0; j < finish_list.length; j++) { const j_element = finish_list[j]; if(i_element.widget_id==j_element.widget_id) { have_count+=1 } } } } if(execute_count>0) { if(execute_count==have_count) { // console.log('同时满足条件-执行自身') onFinishEvent_cb() return } } } } // 未完成控件,执行监控事件 this.checkOtherListenWidgetFinish(false) } private checkOtherWidgetFinishListenListData():boolean { if(this.mClickData.other_widget_finish_listen_list==undefined){ return false } if(this.mClickData.other_widget_finish_listen_list.length<=0){ return false } return true } private checkOtherListenWidgetFinish(is_finish_status:boolean):other_widget_finish_listen_item[]{ if(this.checkOtherWidgetFinishListenListData()==false) { return [] } let list = gameManager.Singleton.checkWidgetList(this.mClickData.other_widget_finish_listen_list,is_finish_status) if(is_finish_status==false&&list.length>0) { // for (let index = 0; index < list.length; index++) { // const event = list[index]; // gameManager.Singleton.exeEvent(event.event_id) // } // console.log('list=',list) // 未完成:其中有2,只执行2; 没有2,所有1执行; 没有2&&没有1,所有0执行; let hight_list:other_widget_finish_listen_item[] = [] let middle_list:other_widget_finish_listen_item[] = [] let normal_list:other_widget_finish_listen_item[] = [] for (let index = 0; index < list.length; index++) { const event = list[index]; if(event.grade>=2) { hight_list.push(event) break } else if(event.grade==1) { middle_list.push(event) } else { normal_list.push(event) } } let exeEvent_cb = ((item_list:other_widget_finish_listen_item[])=>{ for (let index = 0; index < item_list.length; index++) { const event = item_list[index]; gameManager.Singleton.exeEvent(event.event_id) } }) if(hight_list.length>0) { middle_list = [] normal_list = [] exeEvent_cb(hight_list) } else { if(middle_list.length>0) { normal_list = [] exeEvent_cb(middle_list) } else { exeEvent_cb(normal_list) } } } return list; } }