/****************************************************************** * Copyright(C) 2019 - 2020 Nx Studio * * 加锁按钮 * * 2018.05.18 ******************************************************************/ const TDefine = require( "trace.define" ); const TTT = TDefine.TraceType; cc.Class( { extends: cc.Component, properties: { nodUnLock: { default: null, type: cc.Node, displayName: "解锁态" }, nodLock: { default: null, type: cc.Node, displayName: "锁定态" }, touchAudio: { default: null, type: cc.AudioClip, displayName: "触摸音" }, clickInterval: { default: 0.2, displayName: "点击间隔(秒)" }, touchEvents: { default: [], type: cc.Component.EventHandler, displayName: "触摸回调" }, // 埋点 idType: { default: TTT.btnClicked, type: TTT, displayName: "埋点类型" }, btnName: { default: "", displayName: "按钮名" }, }, // 编辑器特性 editor: { // 允许当前组件在编辑器模式下运行 executeInEditMode: false, // requireComponent 参数用来指定当前组件的依赖组件 requireComponent: cc.Button, // 当本组件添加到节点上后,禁止同类型(含子类)的组件再添加到同一个节点,防止逻辑发生冲突 disallowMultiple: true, // menu 用来将当前组件添加到组件菜单中,方便用户查找 menu: "Nx/组件|按钮", }, // 载入 onLoad: function() { // 默认解锁 this.lock( this.locked ); //设置解锁时的初始态 this.setInitParam(); }, // 显示 onEnable: function() { this.node.on( "click", this.onCatchClicked, this ); }, // 隐藏 onDisable: function() { this.node.off( "click", this.onCatchClicked, this ); }, setInitParam: function() { let cdn = this.node.children; let outline = null; this.oldColor = [];//可能有多个文本 for( let i in cdn ) { if( cdn[ i ] ) { outline = nx.gui.getComponent( cdn[ i ], "", cc.LabelOutline ); if( outline ) { this.oldColor.push( outline.color ); } } } this.grayColor = new cc.Color( 69, 69, 69 ); }, // 无效态 lock: function( _locked ) { this.locked = _locked; if( this.nodUnLock ) { this.nodUnLock.active = !_locked; } if( this.nodLock ) { this.nodLock.active = _locked; } var btn = this.node.getComponent( cc.Button ); if( btn ) { btn.interactable = !_locked; if( btn.enableAutoGrayEffect ) { this.setBtnColor( btn.interactable ); } } }, setBtnColor: function( isnormal ) { if( !this.node.isValid || nx.dt.arrEmpty( this.oldColor ) ) return; let cdn = this.node.children; if( isnormal ) { let index = 0; for( let n in cdn ) { if( cdn[ n ] ) { let outline = nx.gui.getComponent( cdn[ n ], "", cc.LabelOutline ); if( outline ) { outline.color = this.oldColor[ index ]; index++; } } } } else { for( let g in cdn ) { if( cdn[ g ] ) { let outline = nx.gui.getComponent( cdn[ g ], "", cc.LabelOutline ); if( outline ) { outline.color = this.grayColor; } } } } }, // 点击 onCatchClicked: function() { // 音效 if( this.touchAudio ) { nx.audio.playSFX( this.touchAudio, false ); } else { if( nx.audioHelper ) { nx.audioHelper.sfxBtnClicked(); } } // 点击间隔 var now = new Date(); if( typeof this.lastClickTime == "number" ) { var ms = this.clickInterval * 1000; if( ( now.getTime() - this.lastClickTime ) < ms ) { return; } } this.lastClickTime = now.getTime(); // 通告 if( this.touchEvents ) { // 在没有提供CustomData,则返回节点 for( var i = 0; i < this.touchEvents.length; ++i ) { var te = this.touchEvents[ i ]; if( te && te.customEventData === "" ) { te.customEventData = this.node; } } // nx.dt.trycatch( () => { cc.Component.EventHandler.emitEvents( this.touchEvents ); // } ) } // 埋点 if( nx.mTrace && this.idType > 0 && nx.dt.strNEmpty( this.btnName ) ) { nx.mTrace.trace( this.idType, this.btnName ); } } } );