widget_click.ts 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { _decorator, Component, Node } from 'cc';
  2. import { widget_base } from './widget_base';
  3. import { att_click_data, widget_item_data } from '../../../data/data';
  4. import { config } from '../../config';
  5. import { ClientEvent } from '../../clientEvent';
  6. import { gameManager } from '../gameManager';
  7. const { ccclass, property } = _decorator;
  8. @ccclass('widget_click')
  9. export class widget_click extends widget_base {
  10. @property(Node) img_zhaobutong:Node = null;
  11. private mClickData:att_click_data = null;
  12. private mClickNum:number = 0;
  13. private mClickTime:number =1; //1秒内完成点击
  14. private mHoldTime:number = 0; //按下的事件
  15. protected init(): void {
  16. if(this.mData.att.click_data!=null){
  17. this.mClickData = this.mData.att.click_data
  18. }
  19. }
  20. protected start(): void {
  21. if(this.mIsActive){
  22. this.registeredEvent()
  23. }
  24. }
  25. protected registeredEvent(): void {
  26. this.mHoldTime = 0;
  27. this.mClickNum = 0;
  28. switch (this.mClickData.click_type) {
  29. case config.clcik_type.Press_and_hold:
  30. this.node.on(Node.EventType.TOUCH_START,()=>{
  31. if(!this.mIsActive) return
  32. this.mHoldTime = 0;
  33. this.checkTime()
  34. this.schedule(this.checkTime,1)
  35. })
  36. this.node.on(Node.EventType.TOUCH_END,()=>{
  37. if(!this.mIsActive) return
  38. if(!this.getIsFinish()){
  39. this.mHoldTime = 0;
  40. this.unschedule(this.checkTime)
  41. }
  42. })
  43. break;
  44. case config.clcik_type.Multiple_clicks:
  45. this.node.on(Node.EventType.TOUCH_START,()=>{
  46. if(!this.mIsActive) return
  47. this.scheduleOnce(this.reSetClickNum,this.mClickTime);
  48. this.mClickNum++;
  49. if(this.mClickNum===this.mClickData.multiple_check_num){
  50. this.mClickNum = 0;
  51. this.unschedule(this.reSetClickNum)
  52. this.onFinishEvent()
  53. }
  54. })
  55. break;
  56. case config.clcik_type.click:
  57. this.node.off(Node.EventType.TOUCH_START)
  58. this.node.on(Node.EventType.TOUCH_START,()=>{
  59. if(!this.mIsActive) return
  60. this.onFinishEvent()
  61. })
  62. break;
  63. case config.clcik_type.click_not_auto_finish:
  64. this.node.off(Node.EventType.TOUCH_START)
  65. this.node.on(Node.EventType.TOUCH_START,()=>{
  66. if(!this.mIsActive) return
  67. ClientEvent.dispatchEvent(config.EventRun.WIDGET_FINISH,this.mData.att.id)
  68. })
  69. break;
  70. }
  71. }
  72. private checkTime(){
  73. this.mHoldTime+=1;
  74. if(this.getIsFinish()){
  75. this.unschedule(this.checkTime)
  76. return
  77. }
  78. if(this.mClickData.hold_time<=this.mHoldTime){
  79. this.onFinishEvent()
  80. this.unschedule(this.checkTime)
  81. return
  82. }
  83. }
  84. private reSetClickNum(){
  85. this.mClickNum = 0;
  86. }
  87. public showZhaoButongFinishStatus(): void {
  88. gameManager.Singleton.sys_click_correct_detail_music()
  89. this.img_zhaobutong.active = true;
  90. }
  91. }