widget_slide.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { _decorator, Component, EventTouch, Node, UITransform, Vec2, Vec3 } from 'cc';
  2. import { widget_base } from './widget_base';
  3. import { att_slide_data, widget_item_data } from '../../../data/data';
  4. import { config } from '../../config';
  5. import { gameManager } from '../gameManager';
  6. const { ccclass, property } = _decorator;
  7. @ccclass('widget_slide')
  8. export class widget_slide extends widget_base {
  9. @property(Node) img_zhaobutong:Node = null;
  10. private mSlideData:att_slide_data = null;
  11. private mStartClickPos:Vec2 = null;
  12. private mCurSlideNum:number = 0;
  13. private mSlideFinishUp:boolean = false;
  14. private mSlideFinishDown:boolean = false;
  15. private mSlideFinishLeft:boolean = false;
  16. private mSlideFinishRight:boolean = false;
  17. protected init(){
  18. if(this.mData.att.slide_data!=null){
  19. this.mSlideData = this.mData.att.slide_data
  20. }
  21. }
  22. protected start(): void {
  23. if(this.mIsActive){
  24. this.registeredEvent()
  25. }
  26. }
  27. protected registeredEvent(): void {
  28. if( !this.mSlideData ){
  29. return
  30. }
  31. this.node.on(Node.EventType.TOUCH_START,(et:EventTouch)=>{
  32. if(!this.mIsActive) return
  33. this.mStartClickPos = et.getUILocation()
  34. })
  35. if(this.mSlideData.slide_dir==config.slide_type.up_down||this.mSlideData.slide_dir==config.slide_type.left_right){
  36. this.node.on(Node.EventType.TOUCH_END,()=>{
  37. if(!this.mIsActive) return
  38. this.mSlideFinishUp = false;
  39. this.mSlideFinishDown = false;
  40. this.mSlideFinishLeft = false;
  41. this.mSlideFinishRight = false;
  42. })
  43. this.node.on(Node.EventType.TOUCH_MOVE,(et:EventTouch)=>{
  44. if(!this.mIsActive) return
  45. let isFinish = false;
  46. let distance = this.mSlideData.slide_distance;
  47. let et_ =et.getUILocation()
  48. let p = new Vec3(et_.x,et_.y)
  49. let pos = this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(p)
  50. switch (this.mSlideData.slide_dir) {
  51. case config.slide_type.up_down:
  52. let down_y = (this.node.position.y - distance*0.5);
  53. let up_y = (this.node.position.y + distance*0.5);
  54. if(pos.y>=up_y){
  55. this.mSlideFinishUp = true;
  56. }
  57. if(pos.y<=down_y){
  58. this.mSlideFinishDown = true;
  59. }
  60. if(this.mSlideFinishUp&&this.mSlideFinishDown){
  61. isFinish = true;
  62. this.mSlideFinishUp = false;
  63. this.mSlideFinishDown = false;
  64. }
  65. break;
  66. case config.slide_type.left_right:
  67. let left_x = (this.node.position.x - distance*0.5);
  68. let right_x = (this.node.position.x + distance*0.5);
  69. if(pos.x>=right_x){
  70. this.mSlideFinishRight = true;
  71. }
  72. if(pos.x<=left_x){
  73. this.mSlideFinishLeft = true;
  74. }
  75. if(this.mSlideFinishLeft&&this.mSlideFinishRight){
  76. isFinish = true;
  77. this.mSlideFinishLeft = false;
  78. this.mSlideFinishRight = false;
  79. }
  80. break;
  81. }
  82. if(isFinish){
  83. this.mCurSlideNum++;
  84. }
  85. if(this.mCurSlideNum>=this.mSlideData.slide_num){
  86. this.exeFinish()
  87. }
  88. })
  89. }else{
  90. this.node.on(Node.EventType.TOUCH_END,(et:EventTouch)=>{
  91. if(!this.mIsActive) return
  92. let isFinish = false;
  93. let endClickPos = et.getUILocation()
  94. switch (this.mSlideData.slide_dir) {
  95. case config.slide_type.up:
  96. if((endClickPos.y-this.mStartClickPos.y)>=this.mSlideData.slide_distance){
  97. isFinish = true;
  98. }
  99. break;
  100. case config.slide_type.down:
  101. if((this.mStartClickPos.y-endClickPos.y)>=this.mSlideData.slide_distance){
  102. isFinish = true;
  103. }
  104. break;
  105. case config.slide_type.left:
  106. if((this.mStartClickPos.x-endClickPos.x)>=this.mSlideData.slide_distance){
  107. isFinish = true;
  108. }
  109. break;
  110. case config.slide_type.right:
  111. if((endClickPos.x-this.mStartClickPos.x)>=this.mSlideData.slide_distance){
  112. isFinish = true;
  113. }
  114. break;
  115. }
  116. if(isFinish){
  117. this.exeFinish()
  118. }
  119. })
  120. }
  121. }
  122. public exeFinish(){
  123. if(this.checkOtherListenWidgetFinish()){
  124. this.onFinishEvent()
  125. }
  126. }
  127. checkOtherListenWidgetFinish(){
  128. let is_finish = true;
  129. if(this.mSlideData.other_widget_finish_listen_list==undefined){
  130. return true
  131. }
  132. if(this.mSlideData.other_widget_finish_listen_list.length<=0){
  133. return true;
  134. }
  135. let event_id = gameManager.Singleton.checkWidgetList(this.mSlideData.other_widget_finish_listen_list)
  136. if(event_id==-1){
  137. is_finish = true;
  138. }else{
  139. is_finish = false;
  140. gameManager.Singleton.exeEvent(event_id)
  141. }
  142. return is_finish;
  143. }
  144. public initSlide(){
  145. this.mCurSlideNum = 0;
  146. this.mSlideFinishUp = false;
  147. this.mSlideFinishDown = false;
  148. this.mSlideFinishLeft = false;
  149. this.mSlideFinishRight = false;
  150. }
  151. public showZhaoButongFinishStatus(): void {
  152. gameManager.Singleton.sys_click_correct_detail_music()
  153. this.img_zhaobutong.active = true;
  154. }
  155. public hideZhaoButongFinishStatus(): void {
  156. if(this.img_zhaobutong != null) {
  157. this.img_zhaobutong.active = false;
  158. }
  159. }
  160. }