widget_slide.ts 6.0 KB

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