import { _decorator, Component, EventTouch, Node, Rect, UITransform, v2, Vec2, Vec3 } from 'cc'; import { widget_base } from './widget_base'; import { att_drag_data, widget_item_data } from '../../../data/data'; import { gameManager } from '../gameManager'; import { ClientEvent } from '../../clientEvent'; import { config } from '../../config'; const { ccclass, property } = _decorator; @ccclass('widget_drag') export class widget_drag extends widget_base { @property(Node) img_zhaobutong:Node = null; private mDragData:att_drag_data = null; private mIsStartMove:boolean = false; private offset_x:number = 0; private offset_y:number = 0; private mDragRect:Rect = null; private other_drag_list:att_drag_data[] = []; protected init(){ if(this.mData.att.drag_data!=null){ this.mDragData = this.mData.att.drag_data } if(this.mData.att.drag_data.other_drag_list!=undefined){ for (let index = 0; index < this.mData.att.drag_data.other_drag_list.length; index++) { const element = this.mData.att.drag_data.other_drag_list[index]; let item = new att_drag_data; item.index = index; item.drag_pos_x = element.drag_pos_x; item.drag_pos_y = element.drag_pos_y; item.other_event_id = element.other_event_id; item.drag_size_width = element.drag_size_width; item.drag_size_height = element.drag_size_height; item.score = element.score; this.other_drag_list.push(item) } } } protected start(): void { if(this.mIsActive&&this.isInit){ this.registeredEvent() } } protected registeredEvent(): void { this.node.on(Node.EventType.TOUCH_START,(et:EventTouch)=>{ if(!this.mIsActive) return this.mIsStartMove = true; let p = new Vec3(et.getUILocation().x,et.getUILocation().y) let n_p = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(p) this.node.position = new Vec3(n_p.x,n_p.y); this.setScenePageScroll(false) }) this.node.on(Node.EventType.TOUCH_MOVE,(et:EventTouch)=>{ if(!this.mIsActive) return let p = new Vec3(et.getUILocation().x,et.getUILocation().y) let n_p = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(p) this.node.position = new Vec3(n_p.x,n_p.y); }) this.node.on(Node.EventType.TOUCH_END,()=>{ this.onEndEvent() this.setScenePageScroll(true) }) } private setScenePageScroll(is_scroll:boolean) { let scene_page = this.getScenePage() if(scene_page==null) return if(is_scroll) { scene_page.startScrollTouch() } else { scene_page.stopScrollTouch() } } private onEndEvent(){ if(!this.mIsActive) return this.mIsStartMove = false; this.checkOnecFinish() } private checkOther(){ if(this.mDragData.other_drag_list==undefined){ return false; } let isCheck = false; if(this.other_drag_list.length>0){ for (let index = 0; index < this.other_drag_list.length; index++) { const item_data = this.other_drag_list[index]; let w = item_data.drag_size_width; let h = item_data.drag_size_height; let pos = new Vec3(this.mData.att.x+item_data.drag_pos_x,this.mData.att.y+item_data.drag_pos_y) let rect = new Rect(pos.x-w*0.5,pos.y-h*0.5,w,h) let p = this.node.position; let is = rect.contains(new Vec2(p.x,p.y)) if(is){ if(item_data.other_event_id!=-1){ this.offEvent() console.log("item_data.other_event_id",item_data.other_event_id) ClientEvent.dispatchEvent(config.EventRun.WIDGET_DRAG_OTHER_FINISH,this.mData.att.id,item_data.score) gameManager.Singleton.exeEvent(item_data.other_event_id) isCheck = true; break; } } } } return isCheck; } checkOtherListenWidgetFinish(){ let is_finish = true; if(this.mDragData.other_widget_finish_listen_list==undefined){ return true } if(this.mDragData.other_widget_finish_listen_list.length<=0){ return true; } let event_id = gameManager.Singleton.checkWidgetList(this.mDragData.other_widget_finish_listen_list) if(event_id==-1){ is_finish = true; }else{ is_finish = false; gameManager.Singleton.exeEvent(event_id) } return is_finish; } public deleteOtherDrag(index:number){ // this.other_drag_list.splice(index,1) for (let i = 0; i < this.other_drag_list.length; i++) { const element = this.other_drag_list[i]; if(element.index==index) { this.other_drag_list.splice(i,1) break } } } private checkOnecFinish(){ if(this.checkMoveToDragRect()){ this.mIsStartMove = false; if(this.checkOtherListenWidgetFinish()){ this.onFinishEvent() }else{ } }else{ if(this.checkOther()){ this.mIsStartMove = false; }else{ if(this.mDragData.is_err_drag_back){ this.node.position = new Vec3(this.mData.att.x,this.mData.att.y) } } } } public getDragRect():Rect{ if(this.mDragData==null){ this.mDragData = this.mData.att.drag_data } let w = this.mDragData.drag_size_width; let h = this.mDragData.drag_size_height; let pos = new Vec3(this.mData.att.x+this.mDragData.drag_pos_x,this.mData.att.y+this.mDragData.drag_pos_y) this.mDragRect = new Rect(pos.x-w*0.5,pos.y-h*0.5,w,h) return this.mDragRect; } private checkMoveToDragRect():boolean{ let p = this.node.position; let is = this.getDragRect().contains(new Vec2(p.x,p.y)) return is } protected onFinishAnimation(): void { this.icon.position = new Vec3(this.mData.att.x,this.mData.att.y) // node.setSiblingIndex(node.parent.childrenCount - 1); // this.icon.setSiblingIndex(999) } public showZhaoButongFinishStatus(): void { gameManager.Singleton.sys_click_correct_detail_music() this.img_zhaobutong.active = true; this.icon.position = new Vec3(this.mData.att.x,this.mData.att.y) } public hideZhaoButongFinishStatus(): void { if(this.img_zhaobutong != null) { this.img_zhaobutong.active = false; } } public toFinishEvent(){ this.onFinishEvent() } }