源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

458 行
16 KiB

  1. ChildTrainView = ChildTrainView or BaseClass(BaseView)
  2. local ChildTrainView = ChildTrainView
  3. local STAR_COUNT = 10 -- 星星数(每阶有多少级)
  4. function ChildTrainView:__init()
  5. self.base_file = "child"
  6. self.layout_file = "ChildTrainView"
  7. self.layer_name = "UI"
  8. self.destroy_imm = true
  9. self.use_background = G_USING_BG --全屏界面默认使用这个参数
  10. self.hide_maincancas = true --全屏界面需要放开隐藏主UI
  11. self.change_scene_close = true
  12. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  13. self.need_show_money = false --是否要显示顶部的金钱栏
  14. self.blur_activity_bg = true
  15. self.fire_change_visible_event = true
  16. self.close_fog = true
  17. self.model = ChildModel:getInstance()
  18. self.show_figure_id = -1
  19. self.attr_item_list = {} -- 属性item
  20. self.img_moon_list = {} -- 进阶的星级
  21. self.awardItems = {} -- 进阶展示的奖励
  22. self.is_effect = false -- 是否正在播放逗BB特效
  23. self.load_callback = function ()
  24. self:LoadSuccess()
  25. self:AddEvent()
  26. end
  27. self.open_callback = function ( )
  28. self:OpenSuccess()
  29. end
  30. self.switch_callback = function(index)
  31. self:SwitchTab(index)
  32. end
  33. self.destroy_callback = function ( )
  34. self:DestroySuccess()
  35. end
  36. end
  37. function ChildTrainView:Open( )
  38. --self.data = data
  39. BaseView.Open(self)
  40. end
  41. function ChildTrainView:LoadSuccess()
  42. local nodes = {
  43. "bg:raw",
  44. "btn_doubaobao:obj", "btn_show:obj", "btn_nice:obj", "btn_rank:obj",
  45. "showBaby_con/tips_bg",
  46. "showBaby_con/tips_bg/showCSBtn:obj", "showBaby_con/tips_bg/showWorldBtn:obj",
  47. "showBaby_con/tips_bg/showGuildBtn:obj",
  48. "showBaby_con:obj",
  49. "rename_bg/btn_rename:obj", "rename_bg/text_name:tmp",
  50. "toggle_show:obj", "qiPao_bg/qipao_text:tmp", "qiPao_bg:obj",
  51. "effect_doubaobao","rt_image_show", "effectCon",
  52. "close_btn:obj",
  53. --------------------------------------------
  54. "makeCon/btn_grow_all:obj",
  55. "makeCon/ScrollView_attr_make/Viewport/attrContent_make", "makeCon/itemCon",
  56. "makeCon/grow_loading_bg/grow_loading:img", "makeCon/grow_loading_bg/text_descr:tmp",
  57. "makeCon/fightNum:txt",
  58. "makeCon/levelText:tmp",
  59. "makeCon/btn_grow_all/btn_grow_all_red_dot:obj",
  60. }
  61. self:GetChildren(nodes)
  62. self.toggle_show_tog = self:GetChild("toggle_show"):GetComponent("Toggle")
  63. -- 培养星级
  64. for i = 1, STAR_COUNT do
  65. self.img_moon_list[i] = {}
  66. local temp = self.img_moon_list[i]
  67. temp.transform = self:GetChild("makeCon/bg1/img_moon" .. i)
  68. -- temp.img = temp.transform:GetComponent("Image")
  69. temp.obj = temp.transform.gameObject
  70. end
  71. SetSizeDelta(self.showBaby_con, ScreenWidth, ScreenHeight)
  72. self:UpdateBaseView()
  73. end
  74. function ChildTrainView:UpdateBaseView( )
  75. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("child_train_bg_1173_663"))
  76. -- local close_callback = function()
  77. -- self:Close()
  78. -- end
  79. -- self.tab_win = UITabWindow.New(self.transform, nil, nil,
  80. -- close_callback, self.background_wnd, nil, UITabWindow.SizeSmallHallNoTab, false,nil,true)
  81. -- self.tab_win:SetBackgroundRes("child_train_bg_1173_663")
  82. -- self.tab_win:SetTitleText("宝宝培养")
  83. -- self.tab_win:ChangeShowFlag("Child")
  84. -- 培养奖励
  85. self.feedList = self.model:GetChildFeedList()
  86. local start_x = 10
  87. local start_y = -5
  88. local item_width = 78
  89. local inter_x = 29
  90. for i = 1, #self.feedList do
  91. self.awardItems[i] = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.itemCon)
  92. self.awardItems[i]:SetItemSize(item_width, item_width)
  93. self.awardItems[i]:SetAnchoredPosition((i - 1) * (inter_x + item_width) + start_x, start_y)
  94. -- SetLocalPosition(self.awardItems[i].transform, GetLocalPositionX(self.item_parent)+108*i,0, 0)
  95. if self.feedList[i] then
  96. self.awardItems[i]:SetData(self.feedList[i][1])
  97. self.awardItems[i].ClickCallFun = function (target,target2,x,y) --覆盖AwardItem 的点击方法
  98. local hadNum = GoodsModel:getInstance():GetTypeGoodsNum(self.feedList[i][1]) or 0
  99. if hadNum >=1 then
  100. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16504,0,self.awardItems[i].type_id,1)
  101. else
  102. UIToolTipMgr.getInstance():AppendGoodsTips(self.awardItems[i].type_id)
  103. return
  104. end
  105. end
  106. end
  107. end
  108. self:UpdateFeedItemNum()
  109. local function bg_back_func( ... )
  110. if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then
  111. self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend"))
  112. end
  113. self:MoveUIToBack(self.bg_raw)
  114. -- self:MoveUIToBack(self.tab_win.win_bg)
  115. end
  116. if self.background_wnd then
  117. bg_back_func()
  118. else
  119. self.bg_back_func = bg_back_func
  120. end
  121. --self.titleTmp_tmp.text = "宝宝培养"
  122. local pos_x,pos_y = GetAnchoredPosition(self.btn_show)
  123. SetAnchoredPosition(self.tips_bg, pos_x + 120, pos_y - 50)
  124. end
  125. function ChildTrainView:AddEvent()
  126. local onBtnClickHandler = function ( target )
  127. if target == self.btn_rank_obj then -- 宝宝排行
  128. self.model:Fire(ChildConst.OPEN_CHILD_RANK_VIEW,true)
  129. elseif target == self.btn_show_obj then -- 晒娃
  130. self.model:Fire(ChildConst.OPEN_SHOW_BABY_VIEW, true)
  131. elseif target == self.btn_nice_obj then -- 点赞记录
  132. self.model:Fire(ChildConst.OPEN_CHILD_NICE_RECORD_VIEW,true)
  133. elseif target == self.btn_doubaobao_obj then -- 逗娃
  134. local function callback( )
  135. if self.is_effect then
  136. self.qiPao_bg_obj:SetActive(false)
  137. self.is_effect = false
  138. end
  139. end
  140. local time = 1.5
  141. if self.is_effect == false then
  142. self.is_effect = true
  143. self.qiPao_bg_obj:SetActive(true)
  144. local randomNum = math.random(1,#ChildConst.ChildMainViewDouBaoBaoSaying)
  145. self.qipao_text_tmp.text = ChildConst.ChildMainViewDouBaoBaoSaying[randomNum] or "宝宝无话可说"
  146. self.doubaobao_effect_id = self:AddUIEffect("ui_doubaobao", self.effect_doubaobao, "UI", Vector3(0,0,0), 1, false, time, nil, callback)
  147. end
  148. -- elseif target == self.showBaby_con_obj then -- 关闭晒娃
  149. -- self.showBaby_con_obj:SetActive(false)
  150. -- elseif target == self.showWorldBtn_obj then -- 世界晒娃
  151. -- self.showBaby_con_obj:SetActive(false)
  152. -- if RoleManager.Instance.mainRoleInfo.level >= Config.Moduleid[110].open_lv then
  153. -- self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16509,ChatModel.CHANNEL_WORLD)
  154. -- else
  155. -- Message.show("等级不足"..Config.Moduleid[110].open_lv, "fault")
  156. -- end
  157. -- elseif target == self.showCSBtn_obj then -- 跨服晒
  158. -- self.showBaby_con_obj:SetActive(false)
  159. -- if RoleManager.Instance.mainRoleInfo.level >= Config.ConfigOpenLv.ChatOpenLevel.CROSS then
  160. -- self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16509,ChatModel.CHANNEL_CROSS)
  161. -- else
  162. -- Message.show("等级不足"..Config.ConfigOpenLv.ChatOpenLevel.CROSS, "fault")
  163. -- end
  164. -- --Message.show("2")
  165. -- elseif target == self.showGuildBtn_obj then -- 社团晒
  166. -- self.showBaby_con_obj:SetActive(false)
  167. -- if RoleManager.Instance.mainRoleInfo.level >= Config.ConfigOpenLv.ChatOpenLevel.GUILD and ( RoleManager.Instance:GetMainRoleVo().guild_id and RoleManager.Instance:GetMainRoleVo().guild_id ~= 0) then
  168. -- self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16509,ChatModel.CHANNEL_GUILD)
  169. -- else
  170. -- Message.show("社团频道还未开启哦", "fault")
  171. -- end
  172. elseif target == self.btn_rename_obj then -- 宝宝改名
  173. self.model:Fire(ChildConst.OPEN_CHILD_RENAME_VIEW, true)
  174. elseif target == self.toggle_show_obj then -- 宝宝跟随
  175. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16516)
  176. elseif target == self.btn_grow_all_obj then
  177. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16504,1,0,0)
  178. -- 点击一键成长时要刷进度条和属性特效
  179. self.has_click_all_need_effect = true
  180. elseif target == self.close_btn_obj then
  181. self:Close()
  182. end
  183. end
  184. -- 左侧按钮
  185. AddClickEvent(self.btn_doubaobao_obj, onBtnClickHandler)
  186. AddClickEvent(self.btn_rank_obj, onBtnClickHandler, LuaSoundManager.SOUND_UI.NONE)
  187. AddClickEvent(self.btn_show_obj, onBtnClickHandler)
  188. AddClickEvent(self.btn_nice_obj, onBtnClickHandler, LuaSoundManager.SOUND_UI.NONE)
  189. -- 晒娃按钮
  190. -- AddClickEvent(self.showBaby_con_obj, onBtnClickHandler)
  191. -- AddClickEvent(self.showWorldBtn_obj, onBtnClickHandler)
  192. -- AddClickEvent(self.showCSBtn_obj, onBtnClickHandler)
  193. -- AddClickEvent(self.showGuildBtn_obj, onBtnClickHandler)
  194. -- 改名/跟随
  195. AddClickEvent(self.btn_rename_obj, onBtnClickHandler)
  196. AddClickEvent(self.toggle_show_obj, onBtnClickHandler)
  197. -- 右边
  198. AddClickEvent(self.btn_grow_all_obj, onBtnClickHandler)
  199. AddClickEvent(self.close_btn_obj, onBtnClickHandler)
  200. local function update_make_con(need_anim)
  201. self:UpdateView(need_anim)
  202. end
  203. self:BindEvent(self.model, ChildConst.UPDATA_CHILD_MAIN_INFO, update_make_con)
  204. end
  205. function ChildTrainView:OpenSuccess()
  206. self:UpdateView()
  207. end
  208. function ChildTrainView:UpdateView(need_anim)
  209. local list = self.model:GetChildInfo()
  210. self.text_name_tmp.text = list.child_name or ""
  211. self.toggle_show_tog.isOn = list.is_follow == 1 and true or false
  212. self.toggle_show_obj:SetActive(self.model:GetChildCurState( ) ~= ChildConst.BABY_STATE.BABY)
  213. self:UpdateMakeCon( need_anim )
  214. end
  215. function ChildTrainView:UpdateFeedItemNum( )
  216. local bool = self.model:GetChildRedDotList()[ChildConst.TabId.ChildTrain]
  217. self.btn_grow_all_red_dot_obj:SetActive(bool)
  218. for i = 1, #self.feedList do
  219. local hadNum = GoodsModel:getInstance():GetTypeGoodsNum(self.feedList[i][1]) or 0
  220. self.awardItems[i]:SetNumText(hadNum)
  221. end
  222. end
  223. function ChildTrainView:UpdateMakeCon( need_anim )
  224. local list = self.model:GetChildInfo()
  225. local growUpList = self.model:GetChildNowGrowUpInfo()
  226. local growUpNextList = self.model:GetChildNextGrowUpInfo()
  227. if not growUpList then return end
  228. -- 下一阶级的属性
  229. local attr_list_next = {}
  230. if growUpNextList then
  231. attr_list_next = stringtotable(growUpNextList.attr_list)
  232. --self.img_arrow_obj:SetActive(true)
  233. else --满级时
  234. --self.img_arrow_obj:SetActive(false)
  235. end
  236. local yearNum = math.floor((growUpList.month) / STAR_COUNT) -- 进阶数 (原来叫法是年份)
  237. local monthNum = (growUpList.month) % STAR_COUNT -- 当前阶级星级数 (原来叫法的月份)
  238. -- 阶数
  239. local last_num = tonumber(self.levelText_tmp.text)
  240. self.levelText_tmp.text = yearNum
  241. -- 当前阶级星星数
  242. local is_up = false
  243. self.showing_star_effect = self.showing_star_effect or {}
  244. for i = 1, STAR_COUNT do
  245. if self.has_init_star_effect then -- 非第一次创建
  246. if (i <= monthNum and self.img_moon_list[i].obj.activeSelf == false) or -- 由灰转亮
  247. (i <= monthNum and last_num < yearNum) then -- 跳阶段
  248. if not self.showing_star_effect[i] then
  249. local function call_back( )
  250. self.showing_star_effect[i] = false
  251. end
  252. self:ClearUIEffect(self.img_moon_list[i].transform)
  253. self:AddUIEffect("ui_jinjiestar", self.img_moon_list[i].transform, self.layer_name, nil, 1, false, nil, nil, call_back)
  254. self.showing_star_effect[i] = true
  255. end
  256. is_up = true
  257. end
  258. end
  259. self.img_moon_list[i].obj:SetActive(i <= monthNum)
  260. end
  261. if not self.has_init_star_effect then
  262. self.has_init_star_effect = true
  263. end
  264. -- 属性
  265. local attr_list = stringtotable(growUpList.attr_list)
  266. for k,v in pairs(attr_list) do
  267. local item = self.attr_item_list[k]
  268. if item == nil then
  269. item = ChildGrowItem.New(self.attrContent_make)
  270. self.attr_item_list[k] = item
  271. end
  272. local num2 = nil
  273. for k2,v_next_lv in pairs(attr_list_next) do
  274. if v[1] == v_next_lv[1] then
  275. num2 = v_next_lv[2]
  276. end
  277. end
  278. self.attr_item_list[k]:SetData(v[1],v[2],num2,k, is_up or self.has_click_all_need_effect)
  279. end
  280. -- 进阶进度条
  281. local new_rate = list.child_age_exp/growUpList.need_exp
  282. local old_rate = tonumber(self.grow_loading_img.fillAmount)
  283. -- print('=======Msh:ChildTrainView.lua[310] =======', self.model:GetPreAgeMonth(), old_rate, new_rate, need_anim)
  284. -- PrintCallStack()
  285. if need_anim then
  286. local old_age_month = self.model:GetPreAgeMonth( )
  287. local set_func = function( )
  288. self.text_descr_tmp.text = string.format("<color=#ffffff>%s</color>/%s", list.child_age_exp, growUpList.need_exp)
  289. end
  290. local need_time
  291. local need_time_2
  292. --print('Msh:ChildTrainView.lua[317] data', old_age_month, list.child_age_month)
  293. if old_age_month ~= -1 and old_age_month < list.child_age_month then -- 涨满再归零再涨
  294. --logWarn('=======Msh:ChildTrainView.lua[318]=======')
  295. need_time = 1 * (1 - old_rate)
  296. need_time = need_time >= 0.3 and need_time or 0.3
  297. need_time_2 = 1 * new_rate
  298. need_time_2 = need_time_2 >= 0.3 and need_time_2 or 0.3
  299. local end_func = function ()
  300. self:ShowFillAmountAnim(0, new_rate, set_func, need_time_2 )
  301. end
  302. self:ShowFillAmountAnim( old_rate, 1, end_func, need_time )
  303. else -- 直接涨
  304. --logWarn('=======Msh:ChildTrainView.lua[328]=======')
  305. need_time = 1 * (new_rate - old_rate)
  306. need_time = need_time >= 0.3 and need_time or 0.3
  307. self:ShowFillAmountAnim( old_rate, new_rate, set_func, need_time )
  308. end
  309. else
  310. self.grow_loading_img.fillAmount = new_rate
  311. self.text_descr_tmp.text = string.format("<color=#ffffff>%s</color>/%s", list.child_age_exp, growUpList.need_exp)
  312. end
  313. -- 战力
  314. self.fightNum_txt.text = "f" .. GetFighting(attr_list)
  315. self:UpdateRoleModel( )
  316. -- 点击过一键成长的要强制播特效
  317. if self.has_click_all_need_effect then
  318. self:PlayUpEffect(0) -- 进度条
  319. else
  320. if is_up then
  321. self:PlayUpEffect(0) -- 进度条
  322. self:PlayUpEffect(1) -- 模型
  323. end
  324. end
  325. self.has_click_all_need_effect = false -- 重置点击状态
  326. self:UpdateFeedItemNum( )
  327. end
  328. -- 进度条动画 注意:new_rate > old_rate
  329. function ChildTrainView:ShowFillAmountAnim( old_rate, new_rate, end_fun, need_time )
  330. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
  331. if new_rate <= old_rate then
  332. self.grow_loading_img.fillAmount = new_rate
  333. if end_fun then
  334. end_fun()
  335. end
  336. return
  337. -- print('=======Msh:ChildTrainView.lua[363] ===有问题哟====', old_rate, new_rate)
  338. end
  339. -- 进度条
  340. local function rotate_front2(percent)
  341. self.grow_loading_img.fillAmount = old_rate + (new_rate - old_rate) * percent
  342. end
  343. local action1 = cc.CustomUpdate.New(need_time, rotate_front2)
  344. -- 结束动画
  345. local function callback_1()
  346. if end_fun then
  347. end_fun()
  348. end
  349. end
  350. local call_func_1 = cc.CallFunc.New(callback_1)
  351. local action9 = cc.Sequence.New( action1, call_func_1)--顺序
  352. cc.ActionManager:getInstance():addAction(action9, self.transform)
  353. end
  354. function ChildTrainView:PlayUpEffect( id )
  355. if id == 0 then -- 进度条
  356. if not self.showing_effect_per_1 then
  357. local function call_back( )
  358. self.showing_effect_per_1 = false
  359. end
  360. self:ClearUIEffect(self.grow_loading)
  361. self:AddUIEffect("ui_jinjiejindu", self.grow_loading, self.layer_name, Vector3(-120,0,0), 1, false, 0.6, nil, call_back)
  362. self.showing_effect_per_1 = true
  363. end
  364. elseif id == 1 then
  365. if not self.showing_effect_model then
  366. local function call_back( )
  367. self.showing_effect_model = false
  368. end
  369. self:ClearUIEffect(self.effectCon)
  370. self:AddUIEffect("ui_jinjie", self.effectCon, self.layer_name, Vector3( 14, 80, 0), 1, false, 1.5, nil, call_back)
  371. self.showing_effect_model = true
  372. end
  373. end
  374. end
  375. function ChildTrainView:UpdateRoleModel(need_effect)
  376. local show_figure_id = self.model:GetChildCloth()
  377. -- if need_effect then
  378. -- self:ClearUIEffect(self.rt_image_show)
  379. -- self:AddUIEffect("ui_jinjie", self.rt_image_show, self.layer_name, nil, 1, false, 1.5, nil)
  380. -- end
  381. if self.show_figure_id == show_figure_id then
  382. return
  383. end
  384. self.show_figure_id = show_figure_id
  385. local res_data = {
  386. father_node = self,
  387. transform = self.rt_image_show,
  388. fashion_type = FuncOpenModel.TypeId.Child,
  389. figure_id = show_figure_id,
  390. ui_model_type = UIModelCommon.ModelType.BackModel,
  391. can_rotate = true,
  392. }
  393. FuncOpenModel:getInstance():SetModelRes(res_data)
  394. end
  395. function ChildTrainView:SwitchTab( index )
  396. end
  397. function ChildTrainView:DestroySuccess( )
  398. for i, v in pairs(self.attr_item_list) do
  399. v:DeleteMe()
  400. v = nil
  401. end
  402. self.attr_item_list = {}
  403. if self.doubaobao_effect_id then
  404. self.particle_mgr:DelEffect(self.doubaobao_effect_id)
  405. self.doubaobao_effect_id = false
  406. end
  407. for i=1,#self.awardItems do
  408. if self.awardItems[i] then
  409. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItems[i])
  410. self.awardItems[i] = nil
  411. end
  412. end
  413. -- if self.tab_win then
  414. -- self.tab_win:DeleteMe()
  415. -- self.tab_win = nil
  416. -- end
  417. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
  418. end