123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- 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;
- }
- }
|