widget_click.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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.exeFinish()
  53. }
  54. })
  55. break;
  56. case config.clcik_type.click:
  57. this.node.off(Node.EventType.TOUCH_END)
  58. this.node.on(Node.EventType.TOUCH_END,()=>{
  59. if(!this.mIsActive) return
  60. this.exeFinish()
  61. })
  62. break;
  63. case config.clcik_type.click_not_auto_finish:
  64. this.node.off(Node.EventType.TOUCH_END)
  65. this.node.on(Node.EventType.TOUCH_END,()=>{
  66. if(!this.mIsActive) return
  67. ClientEvent.dispatchEvent(config.EventRun.WIDGET_FINISH,this.mData.att.id)
  68. })
  69. break;
  70. }
  71. }
  72. public exeFinish(){
  73. if(this.checkOtherListenWidgetFinish()){
  74. this.onFinishEvent()
  75. }
  76. }
  77. checkOtherListenWidgetFinish(){
  78. let is_finish = true;
  79. if(this.mClickData.other_widget_finish_listen_list==undefined){
  80. return true
  81. }
  82. if(this.mClickData.other_widget_finish_listen_list.length<=0){
  83. return true;
  84. }
  85. let event_id = gameManager.Singleton.checkWidgetList(this.mClickData.other_widget_finish_listen_list)
  86. if(event_id==-1){
  87. is_finish = true;
  88. }else{
  89. is_finish = false;
  90. gameManager.Singleton.exeEvent(event_id)
  91. }
  92. return is_finish;
  93. }
  94. private checkTime(){
  95. this.mHoldTime+=1;
  96. if(this.getIsFinish()){
  97. this.unschedule(this.checkTime)
  98. return
  99. }
  100. if(this.mClickData.hold_time<=this.mHoldTime){
  101. this.exeFinish()
  102. this.unschedule(this.checkTime)
  103. return
  104. }
  105. }
  106. private reSetClickNum(){
  107. this.mClickNum = 0;
  108. }
  109. public showZhaoButongFinishStatus(): void {
  110. gameManager.Singleton.sys_click_correct_detail_music()
  111. this.img_zhaobutong.active = true;
  112. }
  113. public hideZhaoButongFinishStatus(): void {
  114. if(this.img_zhaobutong != null) {
  115. this.img_zhaobutong.active = false;
  116. }
  117. }
  118. }