car_lib_bottom.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { _decorator, Component, instantiate, Label, Layout, Node, Prefab, Sprite, SpriteFrame, UITransform } from 'cc';
  2. import { base_ui } from '../../fw/base_ui';
  3. import { tools } from '../../tools';
  4. import { car_lib_list_item } from './car_lib_list_item';
  5. import { userDataManager } from '../../manager/userDataManager';
  6. import { car_item_data } from '../../data';
  7. const { ccclass, property } = _decorator;
  8. @ccclass('car_lib_bottom')
  9. export class car_lib_bottom extends base_ui {
  10. @property(Node) btn_num_left:Node = null
  11. @property(Node) btn_num_right:Node = null
  12. @property(Node) lab_num:Node = null
  13. @property(Node) btn_score_sort:Node = null
  14. @property(SpriteFrame) sf_score_up:SpriteFrame = null
  15. @property(SpriteFrame) sf_score_down:SpriteFrame = null
  16. @property(Node) btn_jiesuo:Node = null
  17. @property(SpriteFrame) sf_jiesuo_select:SpriteFrame = null
  18. @property(SpriteFrame) sf_jiesuo_unselect:SpriteFrame = null
  19. @property(Node) list:Node = null
  20. @property(Node) list_content:Node = null
  21. @property(Prefab) list_item:Prefab = null
  22. private data_list:car_item_data[] = []
  23. private is_sort_up_status:boolean = true
  24. private is_jiesuo_status:boolean = false
  25. private num_current_count:number = 1
  26. private num_total_count:number = 1
  27. private current_select_list_item:car_lib_list_item = null
  28. private m_click_item_cb = null
  29. start() {
  30. this.onButtonListen(this.btn_num_left, ()=>{
  31. if(this.num_current_count==1) {
  32. return
  33. }
  34. this.num_current_count -=1
  35. this.updateNumStatus(true)
  36. })
  37. this.onButtonListen(this.btn_num_right, ()=>{
  38. if(this.num_current_count>=this.num_total_count) {
  39. return
  40. }
  41. this.num_current_count +=1
  42. this.updateNumStatus(true)
  43. })
  44. this.onButtonListen(this.btn_score_sort, ()=>{
  45. this.is_sort_up_status = !this.is_sort_up_status
  46. this.updateSortStatus(true)
  47. })
  48. this.onButtonListen(this.btn_jiesuo, ()=>{
  49. this.is_jiesuo_status = !this.is_jiesuo_status
  50. this.updateJiesuoStatus(true)
  51. })
  52. }
  53. public init(click_item_cb) {
  54. this.m_click_item_cb = click_item_cb
  55. this.num_total_count = tools.all_car_page_list.length
  56. // this.data_list = JSON.parse(JSON.stringify(tools.all_car_list))
  57. this.data_list = tools.all_car_page_list[this.getNumCurrentIndex()]
  58. this.updateSortStatus()
  59. this.updateJiesuoStatus()
  60. this.updateNumStatus()
  61. this.reloadListContentData()
  62. let list_content_size = this.list_content.getComponent(UITransform).contentSize
  63. let item_contenteSize = instantiate(this.list_item).getComponent(UITransform).contentSize
  64. let horizontal_padding = (list_content_size.width - item_contenteSize.width * 2) / 3
  65. if(horizontal_padding > 0) {
  66. this.list_content.getComponent(Layout).paddingLeft = horizontal_padding
  67. this.list_content.getComponent(Layout).paddingRight = horizontal_padding
  68. this.list_content.getComponent(Layout).spacingX = horizontal_padding
  69. }
  70. }
  71. private getNumCurrentIndex():number {
  72. let index = this.num_current_count - 1
  73. if(index<0) {
  74. index = 0
  75. }
  76. return index
  77. }
  78. updateSortStatus(is_load_data:boolean=false) {
  79. if(this.is_sort_up_status) {
  80. this.btn_score_sort.getComponent(Sprite).spriteFrame = this.sf_score_down
  81. } else {
  82. this.btn_score_sort.getComponent(Sprite).spriteFrame = this.sf_score_up
  83. }
  84. if(is_load_data) {
  85. this.data_list = this.data_list.reverse()
  86. this.reloadListContentData()
  87. }
  88. }
  89. updateJiesuoStatus(is_load_data:boolean=false) {
  90. if(this.is_jiesuo_status) {
  91. this.btn_jiesuo.getComponent(Sprite).spriteFrame = this.sf_jiesuo_select
  92. } else {
  93. this.btn_jiesuo.getComponent(Sprite).spriteFrame = this.sf_jiesuo_unselect
  94. }
  95. if(is_load_data) {
  96. this.reloadListContentData()
  97. }
  98. }
  99. updateNumStatus(is_reload_data:boolean=false) {
  100. this.lab_num.getComponent(Label).string = this.num_current_count + '/' + this.num_total_count
  101. if(is_reload_data) {
  102. this.data_list = tools.all_car_page_list[this.getNumCurrentIndex()]
  103. this.reloadListContentData()
  104. }
  105. }
  106. reloadListContentData() {
  107. this.list_content.removeAllChildren()
  108. this.current_select_list_item = null
  109. for (let index = 0; index < this.data_list.length; index++) {
  110. const element = this.data_list[index];
  111. let is_jiesuo = userDataManager.user_car_list.car_list.some(obj => obj === element.id)
  112. let item = null
  113. if(this.is_jiesuo_status) {
  114. if(is_jiesuo) {
  115. item = instantiate(this.list_item)
  116. }
  117. } else {
  118. item = instantiate(this.list_item)
  119. }
  120. if(item!=null) {
  121. item.parent = this.list_content
  122. let item_component = item.getComponent(car_lib_list_item)
  123. item_component.initView(element, index, this.onClickListItem.bind(this))
  124. if(is_jiesuo) {
  125. item_component.setJiesuoSelectedStatus()
  126. } else {
  127. item_component.setJiesuoUnselectedStatus()
  128. }
  129. if(userDataManager.user_car_list.default_car_id == element.id) {
  130. this.current_select_list_item = item_component
  131. item_component.setSelectedStatus()
  132. } else {
  133. item_component.setUnselectedStatus()
  134. }
  135. }
  136. }
  137. }
  138. onClickListItem(item:car_lib_list_item) {
  139. if(this.current_select_list_item.getData().id == item.getData().id) {
  140. return
  141. }
  142. if(item.getIsJiesuo()==false) {
  143. console.log('解锁 解锁 解锁')
  144. return
  145. }
  146. this.current_select_list_item.setUnselectedStatus()
  147. item.setSelectedStatus()
  148. this.current_select_list_item = item
  149. if(this.m_click_item_cb!=null) {
  150. this.m_click_item_cb(item)
  151. }
  152. }
  153. }