源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

167 行
5.8 KiB

  1. DanceModel = DanceModel or BaseClass(BaseVo, true)
  2. local DanceModel = DanceModel
  3. DanceModel.REQUEST_CCMD_EVENT = "DanceModel.REQUEST_CCMD_EVENT"
  4. DanceModel.UPDATE_DANCE_POSES_DATA = "DanceModel.UPDATE_DANCE_POSES_DATA" -- 更新舞姿总览数据
  5. DanceModel.ACTIVATED_DANCE_POSE = "DanceModel.ACTIVATED_DANCE_POSE" -- 更新舞姿时推送
  6. DanceModel.UPDATE_DEFAULT_DANCE_POSE = "DanceModel.UPDATE_DEFAULT_DANCE_POSE" -- 更新默认舞姿时推送
  7. DanceModel.UPDATE_RANDOM_DANCE_FLAG = "DanceModel.UPDATE_RANDOM_DANCE_FLAG" -- 更新随机舞姿标志
  8. DanceModel.UPDATE_DANCE_RED = "DanceModel.UPDATE_DANCE_RED" -- 更新舞姿红点
  9. -- 公共接口
  10. DanceModel.CHANGE_DANCE_STATUS = "DanceModel.CHANGE_DANCE_STATUS" -- 切换跳舞状态
  11. DanceModel.OPEN_DANCE_POSE_SELECT_VIEW = "DanceModel.OPEN_DANCE_POSE_SELECT_VIEW" -- 打开舞姿选择界面
  12. DanceModel.OPEN_DANCE_POSE_VIEW = "DanceModel.OPEN_DANCE_POSE_VIEW" -- 打开舞姿界面
  13. function DanceModel:__init()
  14. DanceModel.Instance = self
  15. self:Reset()
  16. end
  17. function DanceModel:Reset()
  18. self.is_rand_dance = false -- 是否是随机舞姿
  19. self.cur_dance_pose_id = 1 -- 当前默认舞姿id
  20. self.dance_poses_activated_list = {} -- 已激活的舞姿id列表 格式为[dance_id] = true
  21. self.dance_pose_data = nil -- 舞姿数据列表
  22. self.dance_red = false -- 舞姿红点
  23. self.dance_red_item_cache = {} -- 舞姿红点缓存 格式为 舞姿id = true/false
  24. self._need_pose_select_view_close = false -- 切换舞姿后,是否需要自动关闭舞姿切换界面
  25. end
  26. function DanceModel:getInstance()
  27. if self.Instance == nil then
  28. self.Instance = DanceModel.New()
  29. end
  30. return self.Instance
  31. end
  32. -- 协议数据相关 start
  33. -- 舞姿总览 42500
  34. function DanceModel:SetDancePosesData(vo)
  35. self:UpdateRandomDanceFlag(vo.is_rand)
  36. self:UpdateDefaultDancePose(vo.dance_id)
  37. self.dance_poses_activated_list = {}
  38. for k, v in pairs(vo.dance) do
  39. self.dance_poses_activated_list[v.id] = true
  40. end
  41. end
  42. -- 获取是否是随机舞姿
  43. function DanceModel:GetIsRandomPose( )
  44. return self.is_rand_dance == 1
  45. end
  46. -- 获取默认的舞姿id
  47. function DanceModel:GetDefaultDancesPoseId( )
  48. return self.cur_dance_pose_id
  49. end
  50. function DanceModel:GetDancePosesActivatedList(dance_id)
  51. if dance_id then
  52. return self.dance_poses_activated_list[dance_id] or false
  53. else
  54. return self.dance_poses_activated_list
  55. end
  56. end
  57. -- 舞姿激活 42501
  58. function DanceModel:UpdateDancePoseList(dance_id)
  59. if self.dance_poses_activated_list then
  60. self.dance_poses_activated_list[dance_id] = true
  61. end
  62. end
  63. -- 设置默认舞姿 42502
  64. function DanceModel:UpdateDefaultDancePose(dance_id)
  65. if dance_id then
  66. self.cur_dance_pose_id = dance_id
  67. end
  68. end
  69. -- 设置是否随机舞姿 42503
  70. function DanceModel:UpdateRandomDanceFlag(type)
  71. self.is_rand_dance = type
  72. end
  73. -- 协议数据相关 end
  74. -- 配置相关 start
  75. -- 获取配置的舞姿数据列表
  76. function DanceModel:GetDancePoseDataList( )
  77. if not self.dance_pose_data then -- 没有数据时,就引用配置顺序存储
  78. self.dance_pose_data = {}
  79. for k, v in pairs(Config.Dance) do
  80. v.goods_data = stringtotable(v.goods)[1]
  81. self.dance_pose_data[#self.dance_pose_data + 1] = v
  82. end
  83. end
  84. -- 更新协议数据到舞姿数据列表中
  85. self:SortDancePoseData()
  86. return self.dance_pose_data
  87. end
  88. -- 根据激活情况排序舞姿数据
  89. function DanceModel:SortDancePoseData( )
  90. -- 每次获取数据都要重新判断一次激活情况
  91. if self.dance_pose_data then
  92. for k, v in ipairs(self.dance_pose_data) do
  93. v.activated = self:GetDancePosesActivatedList(v.id)
  94. end
  95. end
  96. -- 已激活的在前,可激活在中间,不可激活在后,相同状态按排序id从低往高排序
  97. local a_red, b_red
  98. local sort_func = function ( a, b )
  99. if a.activated == b.activated then
  100. a_red = self:GetDanceRedByDanceId(a.id)
  101. b_red = self:GetDanceRedByDanceId(b.id)
  102. if a_red == b_red then
  103. return a.order < b.order
  104. else
  105. return a_red
  106. end
  107. else
  108. return a.activated
  109. end
  110. end
  111. table.sort(self.dance_pose_data, sort_func)
  112. end
  113. -- 配置相关 end
  114. -- 红点相关 start
  115. -- 检测舞姿id dance_id 如果传了舞姿id,则只检测这个舞姿的红点情况
  116. function DanceModel:CheckDanceRedByGoodsModel( )
  117. self:CheckDanceRed()
  118. end
  119. function DanceModel:CheckDanceRed(dance_id)
  120. self.dance_red = false
  121. local goods_model = GoodsModel:getInstance()
  122. -- local goods_model = GoodsModel:getInstance():GetTypeGoodsNum
  123. -- 舞姿的红点主要是检测可激活的舞姿
  124. local dance_data = self:GetDancePoseDataList()
  125. if dance_data then
  126. for k, v in pairs(dance_data) do
  127. if (dance_id and dance_id == v.id) -- 只检测目标舞姿id
  128. or not dance_id then -- 全部检测
  129. if v.activated then -- 已激活,没有红点
  130. self.dance_red_item_cache[v.id] = false
  131. else
  132. local goods_id = tonumber(v.goods_data[2])
  133. local goods_num = goods_model:GetTypeGoodsNum(goods_id)
  134. self.dance_red_item_cache[v.id] = goods_num >= tonumber(v.goods_data[3])
  135. end
  136. end
  137. end
  138. end
  139. for k, v in pairs(self.dance_red_item_cache) do
  140. if v then
  141. self.dance_red = true
  142. break
  143. end
  144. end
  145. -- 推送红点更新
  146. self:Fire(DanceModel.UPDATE_DANCE_RED)
  147. end
  148. function DanceModel:GetDanceRed( )
  149. return self.dance_red
  150. end
  151. -- 获取舞姿对应的红点,也就是可激活的状态
  152. function DanceModel:GetDanceRedByDanceId(dance_id)
  153. return dance_id and self.dance_red_item_cache[dance_id] or false
  154. end
  155. -- 红点相关 end