源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 line
7.6 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 舞姿激活界面
  4. -- *>
  5. DancePoseView = DancePoseView or BaseClass(BaseView)
  6. local DancePoseView = DancePoseView
  7. local stringtotable = stringtotable
  8. function DancePoseView:__init()
  9. self.base_file = "dance"
  10. self.layout_file = "DancePoseView"
  11. self.layer_name = "Activity"
  12. self.destroy_imm = true
  13. self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
  14. self.change_scene_close = true
  15. self.is_set_zdepth = true
  16. self.model = DanceModel:getInstance()
  17. self.goods_model = GoodsModel:getInstance()
  18. self.loaded_role_model = nil
  19. self.open_dance_id = nil
  20. self.open_type_id = nil
  21. self.load_callback = function ()
  22. self:LoadSuccess()
  23. self:AddEvent()
  24. end
  25. self.open_callback = function ( )
  26. self:UpdateView()
  27. end
  28. self.destroy_callback = function ( )
  29. self:DestroySuccess()
  30. end
  31. end
  32. -- 可选参数(二选一)
  33. -- open_dance_id 定位的舞姿
  34. -- open_type_id 定位的舞姿的物品id
  35. function DancePoseView:Open(open_dance_id, open_type_id)
  36. self.open_dance_id = open_dance_id
  37. self.open_type_id = open_type_id
  38. BaseView.Open(self)
  39. end
  40. function DancePoseView:LoadSuccess()
  41. local nodes = {
  42. "bg:raw",
  43. "role_con",
  44. "close_btn:obj",
  45. "ques_btn:obj",
  46. "pose_scroll", "pose_scroll/Viewport/pose_con",
  47. "activated:obj",
  48. "activate_con:obj",
  49. "activate_con/activate_btn:obj",
  50. "activate_con/activate_btn/activate_btn_red:obj",
  51. "activate_con/item_con",
  52. "activate_con/item_name:tmp", "activate_con/item_neednum:tmp",
  53. "pose_desc:tmp",
  54. }
  55. self:GetChildren(nodes)
  56. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("dance_bg"))
  57. self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con)
  58. self.award_item:SetItemSize(62, 62)
  59. self.award_item:SetAnchoredPosition(0, 0)
  60. self.award_item:SetVisible(true)
  61. end
  62. function DancePoseView:AddEvent()
  63. local function click_event(target)
  64. if target == self.close_btn_obj then
  65. self:Close()
  66. elseif target == self.ques_btn_obj then -- 介绍按钮
  67. GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 42500)
  68. elseif target == self.activate_btn_obj then -- 激活按钮
  69. if self.item_data then
  70. local bool = self.model:GetDanceRedByDanceId(self.item_data.id)
  71. if bool then
  72. self.model:Fire(DanceModel.REQUEST_CCMD_EVENT, 42501, self.item_data.id)
  73. else
  74. if self.award_item then
  75. self.award_item:ClickCallFun()
  76. end
  77. end
  78. end
  79. end
  80. end
  81. AddClickEvent(self.close_btn_obj, click_event)
  82. AddClickEvent(self.ques_btn_obj, click_event)
  83. AddClickEvent(self.activate_btn_obj, click_event)
  84. local function updateDacneData()
  85. self:UpdatePosesItem()
  86. end
  87. self:BindEvent(self.model, DanceModel.UPDATE_DANCE_POSES_DATA, updateDacneData)
  88. self:BindEvent(self.model, DanceModel.ACTIVATED_DANCE_POSE, updateDacneData)
  89. end
  90. function DancePoseView:UpdateView()
  91. self:UpdatePosesItem()
  92. end
  93. -- 更新姿势节点
  94. function DancePoseView:UpdatePosesItem( )
  95. -- 这个不需要深拷贝
  96. local data = self.model:GetDancePoseDataList()
  97. local function dance_callback(item_data)
  98. self.pose_item_creator:IterateItems(function(item, i)
  99. item:SetSelected(item_data.id)
  100. end)
  101. self:UpdateRoleDance(item_data.id)
  102. self:UpdatePoseCostInfoAndDesc(item_data)
  103. end
  104. self.pose_item_creator = self.pose_item_creator or self:AddUIComponent(UI.ItemListCreator)
  105. local info = {
  106. data_list = data,
  107. scroll_view = self.pose_scroll,
  108. item_con = self.pose_con,
  109. item_class = DancePoseItem,
  110. item_height = 112,
  111. item_width = 112,
  112. start_x = 10,
  113. start_y = -1,
  114. space_x = 13,
  115. space_y = 13,
  116. create_frequency = 0.01,
  117. is_scroll_back_on_update = true,
  118. alignment = UnityEngine.TextAnchor.UpperLeft,
  119. on_update_item = function(item, i, v)
  120. item:SetData(v, dance_callback)
  121. end,
  122. final_callback = function()
  123. -- 初次加载完,定位到默认舞姿或打开界面时要看的舞姿
  124. local default_dance_id = self.open_dance_id or self.model:GetDefaultDancesPoseId()
  125. for k, v in ipairs(data) do
  126. if self.open_type_id then
  127. if v.goods_data and tonumber(v.goods_data[2]) == self.open_type_id then
  128. dance_callback(v)
  129. break
  130. end
  131. else
  132. if v.id == default_dance_id then
  133. dance_callback(v)
  134. break
  135. end
  136. end
  137. end
  138. self.open_dance_id = nil
  139. self.open_type_id = nil
  140. end,
  141. }
  142. self.pose_item_creator:UpdateItems(info)
  143. end
  144. -- 更新玩家舞姿
  145. function DancePoseView:UpdateRoleDance(dance_id)
  146. local dance_pose = "dance"
  147. if dance_id > 1 then -- 舞姿1的名称为dance,特殊处理
  148. dance_pose = dance_pose .. dance_id
  149. end
  150. if not self.loaded_role_model then
  151. -- 先清除引用模型
  152. lua_resM:clearRoleMode(self)
  153. -- 加载模型
  154. local res_data = {
  155. father_node = self,
  156. layer_name = self.layer_name,
  157. transform = self.role_con,
  158. fashion_type = FuncOpenModel.TypeId.Clothes,
  159. size = Vector2(720,720),
  160. can_rotate = true,
  161. -- raycast_size = Vector2(390, 508),
  162. load_dance_pose = true,
  163. scale = 220,
  164. action_name_list = {dance_pose},
  165. position = Vector3(0,0,-500),
  166. ui_model_type = UIModelCommon.ModelType.Model,
  167. }
  168. FuncOpenModel:getInstance():SetModelRes(res_data)
  169. self.loaded_role_model = lua_resM:GetPartModel(self, self.role_con)
  170. else
  171. self.loaded_role_model:PlayActions({dance_pose})
  172. end
  173. end
  174. -- 更新节点花费信息和描述信息
  175. function DancePoseView:UpdatePoseCostInfoAndDesc(item_data)
  176. self.item_data = item_data
  177. if item_data then
  178. if item_data.activated then -- 已经激活了
  179. self.activated_obj:SetActive(true)
  180. self.activate_con_obj:SetActive(false)
  181. else
  182. self.activated_obj:SetActive(false)
  183. self.activate_con_obj:SetActive(true)
  184. local cost_cfg = item_data.goods_data
  185. local typeId, lock = self.goods_model:GetMappingTypeId(cost_cfg[1], cost_cfg[2])
  186. self.award_item:SetData(typeId, cost_cfg[3], nil, nil, lock)
  187. self.item_name_tmp.text = self.goods_model:getGoodsName(typeId, true)
  188. local goods_num = self.goods_model:GetTypeGoodsNum(typeId)
  189. self.item_neednum_tmp.text = string.format("<color=%s>%s</color>/%s",
  190. goods_num >= cost_cfg[3] and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
  191. goods_num, cost_cfg[3])
  192. -- 获取红点
  193. local bool = self.model:GetDanceRedByDanceId(item_data.id)
  194. self.activate_btn_red_obj:SetActive(bool)
  195. end
  196. -- 姿势描述
  197. self.pose_desc_tmp.text = Trim(item_data.desc)
  198. end
  199. end
  200. function DancePoseView:DestroySuccess( )
  201. if self.award_item then
  202. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
  203. end
  204. self.award_item = nil
  205. end