源战役客户端
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.

634 line
26 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 招财猫活动主界面
  4. -- *>
  5. FortuneCatMainView = FortuneCatMainView or BaseClass(BaseView)
  6. local FortuneCatMainView = FortuneCatMainView
  7. local cos = math.cos
  8. local sin = math.sin
  9. local rad = math.rad
  10. local deg = math.deg
  11. local Quaternion = Quaternion
  12. local TweenFunc = TweenFunc
  13. local ClampAngleType2 = ClampAngleType2
  14. function FortuneCatMainView:__init()
  15. self.base_file = "fortuneCat"
  16. self.layout_file = "FortuneCatMainView"
  17. self.layer_name = "UI"
  18. self.destroy_imm = true
  19. self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
  20. self.blur_activity_bg = false
  21. self.use_show_anim = true
  22. self.use_hide_anim = true
  23. self.hide_maincancas = false
  24. self:AddPreLoadList("fortuneCat", {"FortuneCatRecordItem"})
  25. self.need_refresh_roll_item = false -- 是否需要等待33219协议刷新
  26. self.can_roll = false -- 是否可以抽奖
  27. self.recharge_cost = nil -- 本次抽奖的扣除多少彩钻
  28. self.recharge_condi = nil -- 本次抽奖的累充需求
  29. self.item_pos_radius = 190 -- 抽奖节点分布在容器内的分布半径
  30. self.roll_item_list = {} -- 抽奖节点列表
  31. self.record_item_list = {} -- 抽奖记录节点列表
  32. self.in_rolling_anim = false -- 是否正在抽奖动画中
  33. self.roll_btn_has_effect = false -- 抽奖按钮是否已经有特效了
  34. self.temp_target_id = nil -- 用于在抽取过程中关闭界面直接弹出获奖信息
  35. self.temp_roll_cost = nil -- 缓存本次抽奖的花费
  36. self.tab_index = 1 -- 默认显示全服记录
  37. self.has_update_record = false -- 是否已经更新了一次招财记录
  38. self.model = FortuneCatModel:getInstance()
  39. self.model._is_fc_view_open = true
  40. self.skip_anim = self.model._skip_anim_cache -- 是否跳过动画缓存
  41. self.ca_model = CustomActivityModel:getInstance()
  42. self.open_guide_close = true
  43. self.load_callback = function ()
  44. self:LoadSuccess()
  45. self:AddEvent()
  46. self.model:ShutDownFcLoginRed(self.sub_type)
  47. self.model:Fire(FortuneCatModel.REQUEST_CCMD_EVENT, 33220, self.base_type, self.sub_type)
  48. self.model:Fire(FortuneCatModel.REQUEST_CCMD_EVENT, 33222, self.base_type, self.sub_type)
  49. end
  50. self.open_callback = function ( )
  51. self:UpdateView()
  52. self:StartLightAnim()
  53. end
  54. self.destroy_callback = function ( )
  55. self:DestroySuccess()
  56. -- 抽奖过程中关闭界面直接弹出结果
  57. if self.in_rolling_anim then
  58. self.model:ShowDrawRewardEffect(self.fc_cfg, self.temp_target_id, self.temp_roll_cost)
  59. end
  60. self.model._skip_anim_cache = self.skip_anim
  61. self.model._is_fc_view_open = false
  62. end
  63. end
  64. -- 定制活动子类型
  65. function FortuneCatMainView:Open(sub_type)
  66. self.base_type = CustomActivityModel.CustomActBaseType.FORTUNE_CAT
  67. self.sub_type = sub_type
  68. BaseView.Open(self)
  69. end
  70. function FortuneCatMainView:LoadSuccess()
  71. local nodes = {
  72. "bg:raw", "close_btn:obj", "money_node", "bg/spin_selected:obj",
  73. "skip_anim_tog:obj:tog", -- 跳过动画tog
  74. "ad_img2:obj", -- 广告词2,需要根据条件拉伸
  75. "ad_img3:obj",
  76. "ad_img4:obj", "ad_img4/ad_tip4:tmp",
  77. "light_con_r", "light_con_y", -- 闪光容器
  78. -- 抽奖记录容器
  79. "record_scroll",
  80. "record_scroll/Viewport/record_con",
  81. "no_record:tmp",
  82. -- 招财按钮相关
  83. "roll_btn:obj:img",
  84. "roll_btn/roll_btn_effect",
  85. "roll_btn/roll_spin",
  86. "roll_btn/cost_icon:obj:img",
  87. "roll_btn/btn_lb1:tmp",
  88. "roll_btn/roll_cost:tmp",
  89. "roll_btn/roll_finished:tmp",
  90. -- 奖品节点
  91. "item_con",
  92. -- 招财记录tab
  93. "record_tab1:obj:img",
  94. "record_tab2:obj:img",
  95. "record_tab1/record_tab1_lb:tmp",
  96. "record_tab2/record_tab2_lb:tmp",
  97. -- 招财剩余次数
  98. "roll_left_time:tmp",
  99. -- 活动剩余时间
  100. "left_time:tmp",
  101. -- 招财条件
  102. "buy_condition:tmp",
  103. }
  104. self:GetChildren(nodes)
  105. self.roll_spin.localRotation = Quaternion.Euler(0, 0, -22.5)
  106. self.spin_selected_obj:SetActive(false)
  107. -- 特殊背景节点
  108. self.special_bg_list = {}
  109. -- for i = 1, 8 do
  110. -- self.special_bg_list[i] = {}
  111. -- self.special_bg_list[i].obj = self:GetChild("bg/special_bg" .. i).gameObject
  112. -- end
  113. self.skip_anim_tog_tog.isOn = self.skip_anim
  114. -- 货币栏
  115. self.ui_money_view = UIMoneyView.New(self.money_node)
  116. self.ui_money_view:SetPosition(0,0)
  117. self.ui_money_view:SetData()
  118. self.ui_money_view:ChangeShowFlag("smallWindow2")
  119. self.ui_money_view:ShowMoneyEffect(false)
  120. -- 修改页签文本
  121. self.record_tab1_lb_tmp.text = "全服记录"
  122. self.record_tab2_lb_tmp.text = "个人记录"
  123. self.ad_tip4_tmp.text = "限定次数<color=#fdffc2>彩钻翻倍</color>,财运滚滚来!"
  124. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("fc_main_bg"), false)
  125. end
  126. function FortuneCatMainView:AddEvent()
  127. local function click_event(target)
  128. if target == self.close_btn_obj then
  129. self:Close()
  130. elseif target == self.roll_btn_obj then
  131. self:OnRollBtnClicked()
  132. elseif target == self.record_tab1_obj then
  133. self:OnRecordTabClick(1)
  134. elseif target == self.record_tab2_obj then
  135. self:OnRecordTabClick(2)
  136. elseif target == self.skip_anim_tog_obj then
  137. self.skip_anim = self.skip_anim_tog_tog.isOn
  138. end
  139. end
  140. AddClickEvent(self.close_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
  141. AddClickEvent(self.roll_btn_obj, click_event)
  142. AddClickEvent(self.record_tab1_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  143. AddClickEvent(self.record_tab2_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  144. AddClickEvent(self.skip_anim_tog_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
  145. -- 活动配置更新之后要马上刷新整个界面
  146. local function update_after_config_updated()
  147. self:UpdateView()
  148. end
  149. self:BindEvent(self.model, FortuneCatModel.UPDATE_FORTUNE_CAT_CONFIG, update_after_config_updated)
  150. local function update_roll_event_data(sub_type)
  151. if sub_type == self.sub_type then
  152. self:UpdateFcRollInfo()
  153. end
  154. end
  155. self:BindEvent(self.model, FortuneCatModel.UPDATE_FORTUNE_CAT_ROLL_TIME, update_roll_event_data)
  156. local function roll_succeed_func(vo)
  157. if vo and vo.sub_type == self.sub_type then
  158. self.in_rolling_anim = true
  159. self:ClearUIEffect(self.roll_btn_effect)
  160. self.roll_btn_has_effect = false
  161. self.temp_target_id = vo.sort
  162. self.temp_roll_cost = self.recharge_cost
  163. self:StartRollItemAnim(vo.sort)
  164. end
  165. -- debug
  166. -- self:StartRollItemAnim(math.floor(math.random(1, 8)))
  167. end
  168. self:BindEvent(self.model, FortuneCatModel.UPDATE_FORTUNE_CAT_RESULT, roll_succeed_func)
  169. local function update_fc_record(sub_type)
  170. -- if sub_type == self.sub_type and not self.has_update_record then
  171. -- self.has_update_record = true
  172. if sub_type == self.sub_type then
  173. self:UpdateFcRecord()
  174. end
  175. end
  176. self:BindEvent(self.model, FortuneCatModel.UPDATE_FORTUNE_CAT_ROLL_RECORD, update_fc_record)
  177. end
  178. function FortuneCatMainView:UpdateView()
  179. self:UpdateFcEventData()
  180. self:CreateRollItems()
  181. self:OnRecordTabClick()
  182. end
  183. -- 播放闪光动画
  184. function FortuneCatMainView:StartLightAnim( )
  185. if not self.light_anim_action then
  186. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.light_con_r)
  187. local target_scale_x = 1
  188. local function scale_action()
  189. SetLocalScale(self.light_con_r, target_scale_x, 1, 1)
  190. SetLocalScale(self.light_con_y, target_scale_x * -1, 1, 1)
  191. target_scale_x = target_scale_x * -1
  192. end
  193. local delay_action = cc.DelayTime.New(1)
  194. local anim_action = cc.Sequence.New(delay_action, cc.CallFunc.New(scale_action))
  195. self.light_anim_action = cc.RepeatForever.New(anim_action)
  196. cc.ActionManager:getInstance():addAction(self.light_anim_action, self.light_con_r)
  197. end
  198. end
  199. -- 点击记录页签回调 tab_index:1全服记录 2个人纪录
  200. function FortuneCatMainView:OnRecordTabClick(tab_index)
  201. self.tab_index = tab_index or self.tab_index
  202. -- 调整按钮表现
  203. lua_resM:setImageSprite(self, self.record_tab1_img, "fortuneCat_asset", self.tab_index == 1 and "fc_rank_tab2" or "fc_rank_tab1", true)
  204. lua_resM:setImageSprite(self, self.record_tab2_img, "fortuneCat_asset", self.tab_index == 2 and "fc_rank_tab2" or "fc_rank_tab1", true)
  205. self.record_tab1_lb_tmp.color = ColorUtil:ConvertHexToRGBColor(self.tab_index == 1 and "ffffff" or "dadafe")
  206. self.record_tab2_lb_tmp.color = ColorUtil:ConvertHexToRGBColor(self.tab_index == 2 and "ffffff" or "dadafe")
  207. -- 更新排行数据
  208. self:UpdateFcRecord()
  209. end
  210. -- 更新招财猫活动主要信息
  211. function FortuneCatMainView:UpdateFcEventData( )
  212. self.event_data = self.ca_model:getActList(self.base_type, self.sub_type)
  213. self:ClearEventLeftTimeId()
  214. if not self.event_data then return end
  215. local function left_time_func()
  216. local left_time = self.event_data.etime - TimeUtil:getServerTime()
  217. if left_time > 0 then
  218. self.left_time_tmp.text = string.format("活动剩余:<color=%s>%s</color>",
  219. ColorUtil.GREEN_DARK, TimeUtil:qianggouTimeLeft2(left_time))
  220. else
  221. self.left_time_tmp.text = string.format("活动剩余:<color=%s>已结束</color>", ColorUtil.RED_DARK)
  222. self:ClearEventLeftTimeId()
  223. end
  224. end
  225. self.event_left_time_id = GlobalTimerQuest:AddPeriodQuest(left_time_func, 0.5, -1)
  226. left_time_func()
  227. -- 更新招财猫抽奖相关信息
  228. self:UpdateFcRollInfo()
  229. end
  230. -- 更新招财猫抽奖相关信息
  231. function FortuneCatMainView:UpdateFcRollInfo( )
  232. self.roll_time_data = self.model:GetFortuneCatRollTimes(self.base_type, self.sub_type)
  233. self.fc_cfg = self.model:GetFortuneCatConfig(self.base_type, self.sub_type)
  234. -- print("Saber:FortuneCatMainView [start:216] self.fc_cfg ------------------------------------------")
  235. -- PrintTable(self.fc_cfg)
  236. -- 确保这两个数据都有了才加载
  237. if self.roll_time_data and self.fc_cfg then
  238. -- 先判断是否已经抽完了
  239. local is_finished = self.fc_cfg.max_times <= self.roll_time_data.times
  240. -- 这个次数是已抽次数,前端获取配置时要+1
  241. local roll_time = is_finished and self.roll_time_data.times or self.roll_time_data.times + 1
  242. local time_cfg = self.fc_cfg.confs[roll_time]
  243. -- 获取目前充值额度下,还能转盘几次
  244. local left_roll_time = 0
  245. -- 需要额外充值多少获得转盘次数
  246. local need_dia = nil
  247. if not is_finished then
  248. for i = roll_time, self.fc_cfg.max_times do
  249. if self.roll_time_data.recharge >= self.fc_cfg.confs[i].recharge then
  250. left_roll_time = left_roll_time + 1
  251. else
  252. need_dia = self.fc_cfg.confs[i].recharge - self.roll_time_data.recharge
  253. break
  254. end
  255. end
  256. end
  257. -- 抽奖按钮
  258. self.btn_lb1_tmp.text = is_finished and "" or "投入"
  259. self.roll_cost_tmp.text = is_finished and "" or time_cfg.cost
  260. self.roll_finished_tmp.text = is_finished and "已转完" or ""
  261. self.cost_icon_obj:SetActive(not is_finished)
  262. SetImageGray(self.roll_btn_img, is_finished)
  263. -- 居中对齐货币icon和花费
  264. local len1 = self.cost_icon.sizeDelta.x
  265. local len2 = self.roll_cost_tmp.preferredWidth
  266. local offset_x = (161 - len1 - len2 - 2) / 2
  267. SetAnchoredPositionX(self.cost_icon, offset_x)
  268. SetAnchoredPositionX(self.roll_cost, self.cost_icon.anchoredPosition.x + len1 + 2)
  269. -- 剩余次数
  270. self.roll_left_time_tmp.text = string.format("当前可转盘次数:<color=%s>%s次</color>",
  271. left_roll_time == 0 and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK,
  272. left_roll_time)
  273. -- 是否已经获得了所有转盘次数
  274. local get_all_times = left_roll_time + self.roll_time_data.times >= self.fc_cfg.max_times
  275. self.ad_img2_obj:SetActive(not get_all_times)
  276. self.ad_img3_obj:SetActive(not get_all_times)
  277. self.ad_img4_obj:SetActive(get_all_times)
  278. -- 右下方条件文本
  279. self.buy_condition_tmp.text = get_all_times and ""
  280. or (need_dia and string.format("%s彩钻", need_dia > 0 and need_dia or 0) or "")
  281. -- SetSizeDeltaX(self.ad_img2, self.buy_condition_tmp.preferredWidth + 112)
  282. -- 做一个可抽奖的缓存,不可抽奖的时候不发协议
  283. self.can_roll = left_roll_time > 0
  284. self.recharge_cost = not is_finished and tonumber(time_cfg.cost) or nil
  285. self.recharge_condi = not is_finished and tonumber(time_cfg.recharge) or nil
  286. -- 添加特效
  287. if not self.in_rolling_anim and self.can_roll
  288. and self.recharge_cost and GoodsModel:getInstance():IsJinEnough(self.recharge_cost) then
  289. if not self.roll_btn_has_effect then
  290. self:AddUIEffect("ui_bianqiang", self.roll_btn_effect, self.layer_name, nil, {x=2.7,y=2.7}, true, nil, nil, nil, nil, nil)
  291. self.roll_btn_has_effect = true
  292. end
  293. else
  294. self:ClearUIEffect(self.roll_btn_effect)
  295. self.roll_btn_has_effect = false
  296. end
  297. end
  298. end
  299. function FortuneCatMainView:ClearEventLeftTimeId( )
  300. if self.event_left_time_id then
  301. GlobalTimerQuest:CancelQuest(self.event_left_time_id)
  302. self.event_left_time_id = nil
  303. end
  304. end
  305. -- 创建招财猫抽奖用节点
  306. function FortuneCatMainView:CreateRollItems( )
  307. self.fc_cfg = self.fc_cfg or self.model:GetFortuneCatConfig(self.base_type, self.sub_type)
  308. -- local function special_bg_callback(index, show)
  309. -- if self.special_bg_list[index] then
  310. -- self.special_bg_list[index].obj:SetActive(show)
  311. -- end
  312. -- end
  313. if self.fc_cfg then
  314. local item_data = self.fc_cfg.rebacks
  315. local item_num = TableSize(item_data)
  316. local angle_offset = 360 / item_num
  317. local start_angle = 90 - angle_offset / 2
  318. local rad_start_angle
  319. local item
  320. for k, v in ipairs(item_data) do
  321. item = self.roll_item_list[k]
  322. if not item then
  323. item = FortuneCatRollItem.New(self.item_con)
  324. self.roll_item_list[k] = item
  325. end
  326. rad_start_angle = rad(start_angle)
  327. -- 坐标设置:y正向为起点顺时针分布
  328. item:SetAnchoredPosition(self.item_pos_radius * cos(rad_start_angle), self.item_pos_radius * sin(rad_start_angle))
  329. -- item:SetData(v, k, special_bg_callback)
  330. item:SetData(v, k)
  331. item._angle = start_angle
  332. -- 变换角度
  333. start_angle = ClampAngleType2(start_angle - angle_offset)
  334. end
  335. self.need_refresh_roll_item = false
  336. else
  337. self.need_refresh_roll_item = true
  338. end
  339. end
  340. -- 创建招财猫服务器记录
  341. function FortuneCatMainView:UpdateFcRecord( )
  342. -- 创建的时候要暂停动画
  343. self:StopRecordItemAction()
  344. -- 追加字段,判断是否获取个人记录
  345. local record_list = self.model:GetFortuneCatRollRecord(self.base_type, self.sub_type, self.tab_index == 2)
  346. for k, v in pairs(self.record_item_list) do
  347. v:SetVisible(false)
  348. end
  349. -- 节点高度
  350. local max_item_num = 20 -- 最大节点数
  351. local node_height = self.record_scroll.sizeDelta.y
  352. local height = 0
  353. local item
  354. self.record_count = 0
  355. for k, v in ipairs(record_list) do
  356. if k > max_item_num then
  357. break
  358. end
  359. item = self.record_item_list[k]
  360. if not item then
  361. item = FortuneCatRecordItem.New(self.record_con)
  362. self.record_item_list[k] = item
  363. end
  364. item:SetAnchoredPosition(2, -height)
  365. item:SetVisible(true)
  366. height = height + item:SetData(v, self.sub_type)
  367. self.record_count = self.record_count + 1
  368. end
  369. self.no_record_tmp.text = self.record_count == 0 and "暂无记录" or ""
  370. SetSizeDeltaY(self.record_con, height)
  371. -- 记录一下当前的节点数
  372. -- 生成节点的高度超过了容器高度,就需要展示轮播
  373. if height > node_height then
  374. self:StartRecordItemAction()
  375. end
  376. end
  377. -- 招财记录动画相关
  378. -- 招财记录动画相关
  379. -- 招财记录动画相关
  380. -- 开始轮播招财记录动画
  381. function FortuneCatMainView:StartRecordItemAction()
  382. self:StopRecordItemAction()
  383. local time = FortuneCatModel.RecordAnimDuration
  384. local function func()
  385. self:UpdateRecordItemPos()
  386. self:MoveRecordItem()
  387. end
  388. self.auto_record_item_anim_id = GlobalTimerQuest:AddPeriodQuest(func, time, -1)
  389. end
  390. function FortuneCatMainView:StopRecordItemAction()
  391. if self.auto_record_item_anim_id then
  392. GlobalTimerQuest:CancelQuest(self.auto_record_item_anim_id)
  393. self.auto_record_item_anim_id = nil
  394. end
  395. self:StopRecordItemAnim()
  396. end
  397. -- 播放招财记录节点的动画
  398. function FortuneCatMainView:MoveRecordItem()
  399. local first_text = self.record_item_list[1]
  400. local move_height = first_text:GetAnchoredPosition().y
  401. move_height = move_height > 0 and 0 or move_height
  402. for k,text in pairs(self.record_item_list) do
  403. text:StartAction(move_height)
  404. end
  405. end
  406. -- 停止招财记录节点的动画
  407. function FortuneCatMainView:StopRecordItemAnim()
  408. for k,text in pairs(self.record_item_list) do
  409. text:StopAction()
  410. end
  411. end
  412. function FortuneCatMainView:UpdateRecordItemPos()
  413. local delete_index = {}
  414. local height = 0
  415. local count = 0
  416. for i = 1, self.record_count do
  417. local text = self.record_item_list[i]
  418. if text then
  419. local vis = text:GetVisible()
  420. local h = text:GetRecordHeight()
  421. local y = text:GetAnchoredPosition().y
  422. height = height + (vis and h or 0)
  423. if y + h > 0.1 and vis then -- 将超出屏幕并显示中的节点保存到移动临时队列 0.1 由于浮点误差有可能出现不该隐藏的节点也添加到队列中,做加大误差处理
  424. table.insert(delete_index, i)
  425. end
  426. end
  427. end
  428. local del_num = 0
  429. local t = {}
  430. for i,v in ipairs(delete_index) do
  431. local index = v - del_num
  432. local text = table.remove(self.record_item_list, index)
  433. t[#t+1] = text
  434. del_num = del_num + 1
  435. end
  436. -- 将临时队列的节点存回去
  437. for i = 1, #t do
  438. t[i]:SetAnchoredPosition(2, -height)
  439. table.insert(self.record_item_list, t[i])
  440. end
  441. end
  442. -- 玩家招财动画相关
  443. -- 玩家招财动画相关
  444. -- 玩家招财动画相关
  445. -- 开启抽奖随机闪烁动画
  446. function FortuneCatMainView:StartRollItemAnim(target_id)
  447. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.roll_spin)
  448. -- print("Saber:FortuneCatMainView [391] target_id: ",target_id)
  449. local angel = self:AnimRotateAngle(target_id)
  450. local anim_end_fun = function()
  451. self.in_rolling_anim = false
  452. self.roll_spin.localRotation = Quaternion.Euler(0, 0, angel)
  453. local spin_angel = math.ceil(ClampAngleType2(angel) / 45) * 45
  454. self.spin_selected_obj:SetActive(true)
  455. self.spin_selected.localRotation = Quaternion.Euler(0, 0, spin_angel)
  456. self.model:ShowDrawRewardEffect(self.fc_cfg, target_id, self.temp_roll_cost)
  457. self.model:Fire(FortuneCatModel.REQUEST_CCMD_EVENT, 33220, self.base_type, self.sub_type)
  458. self.temp_target_id = nil
  459. self.temp_roll_cost = nil
  460. self:UpdateFcRollInfo()
  461. -- 恢复货币更新
  462. if self.ui_money_view then
  463. self.ui_money_view:ReBindValueUpdate()
  464. end
  465. end
  466. self.spin_selected_obj:SetActive(false)
  467. local start_angel = self.roll_spin.localEulerAngles.z
  468. start_angel = ClampAngleType2(start_angel)
  469. -- 跳过动画
  470. if self.skip_anim then
  471. anim_end_fun()
  472. else
  473. -- local spin_selected_angel = self.spin_selected.localEulerAngles.z
  474. -- 播放动画
  475. local spin_action_callback = function(percent)
  476. -- local ratio = TweenFunc.easeInOut(percent)
  477. local ratio = self:AnimPercentageAmount(percent)
  478. local temp_angle = angel * ratio
  479. local temp_angle2 = start_angel * (1-ratio)
  480. self.roll_spin.localRotation = Quaternion.Euler(0, 0, temp_angle2 + temp_angle)
  481. -- 更新选中节点的旋转角度
  482. -- local temp_spin_angel = ClampAngleType2(temp_angle2 + temp_angle)
  483. -- temp_spin_angel = math.ceil(temp_spin_angel / 45) * 45
  484. -- if temp_spin_angel ~= spin_selected_angel then
  485. -- spin_selected_angel = temp_spin_angel
  486. -- self.spin_selected.localRotation = Quaternion.Euler(0, 0, spin_selected_angel)
  487. -- end
  488. end
  489. local spin_action = cc.CustomUpdate.New(FortuneCatModel.AnimTime, spin_action_callback)
  490. spin_action = cc.Sequence.New(spin_action, cc.CallFunc.New(anim_end_fun))
  491. cc.ActionManager:getInstance():addAction(spin_action, self.roll_spin)
  492. end
  493. end
  494. function FortuneCatMainView:AnimPercentageAmount(ratio)
  495. local div = FortuneCatModel.AnimAmountDiv
  496. if ratio < div then
  497. return div * TweenFunc.easeInQuint(ratio/div)
  498. else
  499. return (1-div) * TweenFunc.easeOutQuint((ratio-div)/(1-div)) + div
  500. end
  501. end
  502. function FortuneCatMainView:ClearRollItemDelay( )
  503. if self.rollItem_anim_delay_id then
  504. GlobalTimerQuest:CancelQuest(self.rollItem_anim_delay_id)
  505. self.rollItem_anim_delay_id = nil
  506. end
  507. end
  508. -- 获取抽中道具所在的角度,并推算出一个n圈的终点角度
  509. function FortuneCatMainView:AnimRotateAngle(target_id)
  510. local target_angle
  511. for k, v in ipairs(self.roll_item_list) do
  512. if v.sort and v.sort == target_id then -- 获取抽中档位所在的节点的角度,并做一个减少90度的偏移,求得旋转指针最后的角度
  513. target_angle = v._angle - 90
  514. end
  515. end
  516. target_angle = target_angle + math.random(-15, 15) -- 在节点范围内进行一个合理的偏移
  517. -- 起始角度必须先将指针的角度归零
  518. -- 默认转10圈,然后停在目标角度范围内
  519. local angle = FortuneCatModel.AnimRollTime * -360 + target_angle
  520. return angle
  521. end
  522. -- 点击招财按钮
  523. function FortuneCatMainView:OnRollBtnClicked( )
  524. if self.in_rolling_anim then
  525. Message.show("正在转盘中...", "falut")
  526. return
  527. end
  528. if self.can_roll then -- 可抽,弹出tips界面
  529. local function ok_callback()
  530. self.model:Fire(FortuneCatModel.REQUEST_CCMD_EVENT, 33221, self.base_type, self.sub_type)
  531. self.has_update_record = false
  532. -- 停用货币更新
  533. if self.ui_money_view then
  534. self.ui_money_view:UnBindAllValueUpdate()
  535. end
  536. end
  537. if GoodsModel:getInstance():IsJinEnough(self.recharge_cost) then -- 这边需要特殊处理,彩钻够了就直接发协议
  538. ok_callback()
  539. else
  540. local function use_function( toggle_tip_data, call_fun_sum )
  541. if tab_cfg.price ~= 0 then
  542. GlobalEventSystem:Fire(EventName.OPEN_COM_TOGGLE_TIP_VIEW, toggle_tip_data)
  543. else
  544. call_fun_sum()
  545. end
  546. end
  547. local data = {
  548. gold_type = 1,
  549. cost_price = self.recharge_cost,
  550. ok_callback = ok_callback,
  551. togglePriceStr = string.format("<color=%s>%s</color> 彩钻进行一次彩钻星轮?", ColorUtil.ORANGE_DARK, self.recharge_cost),
  552. use_function = use_function,
  553. no_need_toggle = true,
  554. qc_type = 0,
  555. }
  556. CustomActivityModel:getInstance():BuyTips(data)
  557. end
  558. else
  559. if self.recharge_cost then -- 不可抽,但是存在抽奖充值条件,则代表还有次数需飘字提示
  560. -- local function ok( ... )
  561. -- OpenFun.Open(158, 0)
  562. -- -- self:Close()
  563. -- end
  564. -- local ask_str = string.format("还需充值 %s<color=%s>%s</color>,才能转动彩钻星轮哦~", WordManager:GetMoneyFaceStr(1),
  565. -- ColorUtil.ORANGE_DARK, self.recharge_condi - self.roll_time_data.recharge)
  566. -- Alert.show(ask_str,Alert.Type.Two,ok,nil,"前往充值","取消")
  567. local qc_data = {
  568. price = self.recharge_condi - self.roll_time_data.recharge,
  569. close_callback = ok,
  570. qc_type = 2,
  571. }
  572. GlobalEventSystem:Fire(EventName.OPEN_RECHARGE_TIP_VIEW, true, qc_data)
  573. else
  574. Message.show("已完成本期彩钻星轮", "fault")
  575. end
  576. end
  577. end
  578. function FortuneCatMainView:DestroySuccess( )
  579. self:ClearEventLeftTimeId()
  580. self:ClearRollItemDelay()
  581. self:StopRecordItemAction()
  582. self:ClearUIEffect(self.roll_btn_effect)
  583. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.roll_spin)
  584. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.light_con_r)
  585. if self.ui_money_view then
  586. self.ui_money_view:DeleteMe()
  587. self.ui_money_view = nil
  588. end
  589. for k, v in pairs(self.roll_item_list) do
  590. v:DeleteMe()
  591. v = nil
  592. end
  593. self.roll_item_list = nil
  594. for k, v in pairs(self.record_item_list) do
  595. v:DeleteMe()
  596. v = nil
  597. end
  598. self.record_item_list = nil
  599. end