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

519 lines
17 KiB

преди 4 седмици
  1. ChildVehicleViewNew = ChildVehicleViewNew or BaseClass(BaseView)
  2. local ChildVehicleViewNew = ChildVehicleViewNew
  3. function ChildVehicleViewNew:__init()
  4. self.base_file = "child"
  5. self.layout_file = "ChildVehicleViewNew"
  6. self.layer_name = "UI"
  7. self.destroy_imm = true
  8. self.use_background = G_USING_BG --全屏界面默认使用这个参数
  9. self.hide_maincancas = true --全屏界面需要放开隐藏主UI
  10. self.change_scene_close = true
  11. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  12. self.need_show_money = false --是否要显示顶部的金钱栏
  13. self.model = ChildModel:GetInstance()
  14. self.vehicle_item_list = {}
  15. self.attr_item_list = {}
  16. self.skill_item_list = {}
  17. self.select_item = 0
  18. self.img_star_list = {}
  19. self.load_callback = function ()
  20. self:LoadSuccess()
  21. self:AddEvent()
  22. end
  23. self.open_callback = function ( )
  24. self:OpenSuccess()
  25. end
  26. self.switch_callback = function(index)
  27. self:SwitchTab(index)
  28. end
  29. self.destroy_callback = function ( )
  30. self:DestroySuccess()
  31. end
  32. end
  33. function ChildVehicleViewNew:Open( )
  34. --self.data = data
  35. BaseView.Open(self)
  36. end
  37. function ChildVehicleViewNew:LoadSuccess()
  38. self.nodes = {
  39. "bg:raw",
  40. "close:obj",
  41. "left/ScrollView_item/Viewport/Content_item",
  42. --------------------------------
  43. "right/ScrollView_attr/Viewport/Content_attr",
  44. "right/awardCon:obj",
  45. "right/btn_upgrade/btn_upgrade_red_dot:obj",
  46. "right/btn_upgrade/btn_upgrade_txt:tmp",
  47. "right/btn_upgrade:obj",
  48. "right/txt_fight:txt",
  49. "right/right_bg:img",
  50. -- "right/level_bg/txt_lv_after:tmp",
  51. -- "right/level_bg/txt_lv:tmp",
  52. -- "right/level_bg/img_arrow_level:obj",
  53. --"right/fight_bg/txt_fight:tmp",
  54. --"right/fight_bg/txt_fight_after:tmp",
  55. --"right/fight_bg/img_arrow_fight:obj",
  56. --"right/itemCon/ui_num_bg/item_num_txt:tmp",
  57. -------------------------------
  58. "mid/skill_con",
  59. "mid/btn_wear:obj",
  60. "mid/btn_unwear:obj",
  61. "mid/rt_image_show",
  62. "mid/name_bg/text_name:tmp",
  63. "mid/mid_bg:img",
  64. "mid/mid_bg2:img",
  65. "mid/levelText:tmp",
  66. "mid/effectCon",
  67. }
  68. self:GetChildren(self.nodes)
  69. -- 进阶星星
  70. for i = 1, 5 do
  71. self.img_star_list[i] = self:GetChild("right/stars/star"..i):GetComponent("Image")
  72. end
  73. self:UpdateBaseView( )
  74. end
  75. function ChildVehicleViewNew:UpdateBaseView( )
  76. self.up_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.awardCon)
  77. self.up_item:SetItemSize(74, 74)
  78. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("child_vehicle_bg_1173_669"))
  79. -- local close_callback = function()
  80. -- self:Close()
  81. -- end
  82. -- self.tab_win = UITabWindow.New(self.transform, nil, nil,
  83. -- close_callback, self.background_wnd, nil, UITabWindow.SizeSmallHallNoTab, false,nil,true)
  84. -- self.tab_win:SetBackgroundRes("child_dress_bg_1280_720")
  85. -- self.tab_win:SetTitleText("宝宝载具")
  86. -- self.tab_win:ChangeShowFlag("Child")
  87. local function bg_back_func( ... )
  88. if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then
  89. self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend"))
  90. end
  91. self:MoveUIToBack(self.bg_raw)
  92. end
  93. if self.background_wnd then
  94. bg_back_func()
  95. else
  96. self.bg_back_func = bg_back_func
  97. end
  98. -- lua_resM:setOutsideImageSprite(self, self.right_bg_img, GameResPath.GetChildIcon("child_carrier_right_bg"), false)
  99. -- lua_resM:setOutsideImageSprite(self, self.mid_bg2_img, GameResPath.GetChildIcon("child_base_table"), false)
  100. -- lua_resM:setOutsideImageSprite(self, self.mid_bg_img, GameResPath.GetChildIcon("child_carrier_mid_bg"), false)
  101. end
  102. function ChildVehicleViewNew:AddEvent()
  103. local function updata_child_vehicle_info_fun()
  104. self.need_check_effect = true
  105. self:UpdateView(self.select_item) -- 刷新页签
  106. if self.select_item then
  107. self:SetItemCon(self.select_item) -- 刷新载具信息
  108. end
  109. end
  110. self.UPDATA_CHILD_VEHICLE_INFO_id = self.model:Bind(ChildConst.UPDATA_CHILD_VEHICLE_INFO, updata_child_vehicle_info_fun,vo) --41404成功后返回
  111. --[[type :int8 //1-出战 2-取消出战
  112. vehicle_id :int16 //Id 0- -Id
  113. }]] --落单了,单独刷新吧
  114. local function updata_child_vehicle_follow_fun(type,vehicle_id)
  115. if type == 2 then
  116. self.btn_unwear_obj:SetActive(false)
  117. self.btn_wear_obj:SetActive(true)
  118. elseif type == 1 and self.select_item and self.select_item.data.fashion_id == vehicle_id then
  119. self.btn_unwear_obj:SetActive(true)
  120. self.btn_wear_obj:SetActive(false)
  121. end
  122. end
  123. self.updata_child_vehicle_follow_id = self.model:Bind(ChildConst.UPDATA_CHILD_VEHICLE_FOLLOW, updata_child_vehicle_follow_fun,vo)
  124. local function updata_Child_RED_DOT_VIEW_fun(id)
  125. if id ~= ChildConst.TabId.ChildVehicle then return end
  126. self:UpdateRedDot()
  127. self:UpdateRedDotUpBtn(self.select_item.data.fashion_id,self.select_item.stage)
  128. end
  129. self.updata_Child_RED_DOT_VIEW_id = self.model:Bind(ChildConst.Child_RED_DOT_VIEW, updata_Child_RED_DOT_VIEW_fun) --红点更新
  130. local function onBtnClickHandler(target, x, y)
  131. if target == self.btn_upgrade_obj then
  132. if self.select_item.type == ChildConst.ChildDressItemType.Lock then
  133. Message.show("载具材料不足喔")
  134. return
  135. end
  136. if self.select_item.type == ChildConst.ChildDressItemType.CanActive then
  137. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16515, 1, self.select_item.data.fashion_id)
  138. else
  139. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16515, 2, self.select_item.data.fashion_id)
  140. end
  141. elseif target == self.btn_unwear_obj then
  142. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16517,2,self.select_item.data.fashion_id)
  143. elseif target == self.btn_wear_obj then
  144. local cur_state = self.model:GetChildCurState( )
  145. if cur_state < self.select_item.data.can_on_age then
  146. Message.show("现在孩子还坐不了哦")
  147. return
  148. end
  149. self.model:Fire(ChildConst.CHILD_REQ_EVENT, 16517,1,self.select_item.data.fashion_id)
  150. elseif target == self.close_obj then
  151. self:Close()
  152. end
  153. end
  154. AddClickEvent(self.close_obj, onBtnClickHandler)
  155. AddClickEvent(self.btn_upgrade_obj, onBtnClickHandler)
  156. AddClickEvent(self.btn_wear_obj, onBtnClickHandler)
  157. AddClickEvent(self.btn_unwear_obj, onBtnClickHandler)
  158. end
  159. function ChildVehicleViewNew:OpenSuccess()
  160. self:UpdateView()
  161. end
  162. function ChildVehicleViewNew:UpdateView(select_item)
  163. local vehicle_list = self.model:GetChildVehicleList()
  164. -- print('Msh:ChildVehicleViewNew.lua[151] data', TableSize(vehicle_list))
  165. local function callback( item )
  166. for k,v in pairs(self.vehicle_item_list) do
  167. v:SetChosen(false)
  168. end
  169. item:SetChosen(true)
  170. self:SetItemCon(item)
  171. self.select_item = item
  172. self:UpdateRedDotUpBtn(item.vehicle_id,item.stage)
  173. end
  174. local is_select = false
  175. for k,v in pairsByKeys(vehicle_list) do
  176. local item = self.vehicle_item_list[k]
  177. if item == nil then
  178. item = ChildVehicleItem.New(self.Content_item)
  179. self.vehicle_item_list[k] = item
  180. end
  181. --local data = self.model:GetConfigChildSkillInfo(v.skill_id,v.skill_lv)
  182. self.vehicle_item_list[k]:SetData(v,callback)
  183. if not is_select and not select_item then
  184. is_select = true
  185. self:SetItemCon(item)
  186. self.select_item = self.vehicle_item_list[k]
  187. self.vehicle_item_list[k]:SetChosen(true)
  188. self:UpdateRedDotUpBtn(v.vehicle_id,v.stage)
  189. end
  190. end
  191. self:UpdateRedDot()
  192. end
  193. function ChildVehicleViewNew:UpdateRedDotUpBtn(vehicle_id,stage)
  194. -- local selectList_next = self.model:GetConfigChildVehicleInfo(vehicle_id,stage+1)
  195. -- if TableSize(selectList_next) > 0 then
  196. -- local upgrade_cost = stringtotable(selectList_next.upgrade_cost)
  197. -- if upgrade_cost[1][1] == 0 then
  198. -- local hadNum = GoodsModel:getInstance():GetTypeGoodsNum(upgrade_cost[1][2]) or 0
  199. -- self.btn_upgrade_red_dot_obj:SetActive(hadNum >= upgrade_cost[1][3])
  200. -- end
  201. -- else -- 满级时隐藏
  202. -- self.btn_upgrade_red_dot_obj:SetActive(false)
  203. -- end
  204. end
  205. function ChildVehicleViewNew:UpdateRedDot( )
  206. for k,v in pairs(self.vehicle_item_list) do
  207. local cost_num = stringtotable(v.data.upgrade_cost)[1][3]
  208. local num = GoodsModel:getInstance():GetTypeGoodsNum(v.data.fashion_id)
  209. if cost_num <= num then
  210. local is_max = self.model:IsChildVehicleLvMax(v.data.fashion_id,v.data.lv)
  211. self.vehicle_item_list[k]:SetRedDot(true)
  212. else
  213. self.vehicle_item_list[k]:SetRedDot(false)
  214. end
  215. end
  216. --local isRedDot = false
  217. -- local redVehicleList = {}
  218. -- local vehicleList = self.model:GetChildVehicleList( )
  219. -- for k,v in pairs(vehicleList) do
  220. -- local selectList_next = self.model:GetConfigChildVehicleInfo(v.vehicle_id,v.stage+1)
  221. -- if TableSize(selectList_next) > 0 then -- 是否是最高级
  222. -- local upgrade_cost = stringtotable(selectList_next.upgrade_cost)
  223. -- if upgrade_cost[1][1] == 0 then
  224. -- local hadNum = GoodsModel:getInstance():GetTypeGoodsNum(upgrade_cost[1][2]) or 0
  225. -- --print("============>>> YiRan:ChildVehicleView [start:187] hadNum :",hadNum,"upgrade_cost[1][3]:",upgrade_cost[1][3])
  226. -- --print("============>>> YiRan:ChildVehicleView [start:191] hadNum >= upgrade_cost[1][3] :",hadNum >= upgrade_cost[1][3])
  227. -- self.vehicle_item_list[k]:SetRedDot(hadNum >= upgrade_cost[1][3])
  228. -- end
  229. -- end
  230. -- end
  231. end
  232. function ChildVehicleViewNew:SelectTabFresh( )
  233. self:UpdateRoleModel(self.select_item.data)
  234. end
  235. function ChildVehicleViewNew:UpdateRoleModel(data, need_effect)
  236. -- 特效
  237. if (not self.showing_effect_model) and need_effect then
  238. -- print('=======Msh:ChildVehicleViewNew.lua[266] =======')
  239. local function call_back( )
  240. self.showing_effect_model = false
  241. end
  242. self:ClearUIEffect(self.effectCon)
  243. self:AddUIEffect("ui_jinjie", self.effectCon, self.layer_name, Vector3(25,-35, 0), 1, false, 1.5, nil, call_back)
  244. self.showing_effect_model = true
  245. end
  246. -- 计算一下人模型的id
  247. local figure_id = self.model:GetVehicleModelID(data.fashion_id)
  248. local clothe_res_id = false
  249. if data.can_on_age == ChildConst.BABY_STATE.YOUNG then
  250. if self.model:GetChildCurState( ) < ChildConst.BABY_STATE.YOUNG then -- 还没会走路
  251. clothe_res_id = self.model:GetBaseChildModelID( ChildConst.BABY_STATE.YOUNG, self.model.childInfo.child_sex )
  252. else -- 会走路就拿当前形象
  253. clothe_res_id = self.model:GetChildCloth()
  254. end
  255. else -- 是爬或襁褓 则用默认形象
  256. clothe_res_id = self.model:GetBaseChildModelID( data.can_on_age, self.model.childInfo.child_sex )
  257. end
  258. local res_data = {
  259. father_node = self,
  260. transform = self.rt_image_show,
  261. fashion_type = FuncOpenModel.TypeId.ChildInVehicle,
  262. figure_id = figure_id,
  263. ui_model_type = UIModelCommon.ModelType.BackModel,
  264. action_name_list = {"idle"},
  265. clothe_res_id = clothe_res_id,
  266. }
  267. FuncOpenModel:getInstance():SetModelRes(res_data)
  268. end
  269. function ChildVehicleViewNew:SetItemCon( item )
  270. local selectList = item.data
  271. local check_effect = self.need_check_effect -- 是否要检查特效播放
  272. local type_id = selectList.fashion_id
  273. local isMax = self.model:IsChildVehicleLvMax(type_id, selectList.lv)
  274. local is_active = item.type == ChildConst.ChildDressItemType.isActive
  275. local goods_name = GoodsModel:getInstance():getGoodsName(type_id, true)
  276. local have_num = GoodsModel:getInstance():GetTypeGoodsNum(type_id) or 0
  277. local need_num = stringtotable(selectList.upgrade_cost)[1][3]
  278. if not isMax then
  279. self.btn_upgrade_red_dot_obj:SetActive(have_num >= need_num)
  280. else
  281. self.btn_upgrade_red_dot_obj:SetActive(false)
  282. end
  283. -- 名字
  284. self.text_name_tmp.text = selectList.fashion_name
  285. local dressList = self.model:GetChildDressList()
  286. for k,v in pairsByKeys(dressList) do
  287. if v.fashion_id == selectList.fashion_id then
  288. selectList = v --协议回来的更到最新
  289. end
  290. end
  291. -- 按钮描述
  292. self.btn_upgrade_txt_tmp.text = item.type == ChildConst.ChildDressItemType.isActive and "升级" or "激活"
  293. -- 材料item
  294. if isMax then -- 时装已经激活 且 升满
  295. self.btn_upgrade_txt_tmp.text = "已满"
  296. self.awardCon_obj:SetActive(false)
  297. else -- 没有满级
  298. self.awardCon_obj:SetActive(true)
  299. if not self.up_item then
  300. self.up_item = UIObjPool:PopItem(UIObjPool.UIType.AwardItem, self.awardCon)
  301. self.up_item:SetItemSize(62, 62)
  302. end
  303. self.up_item:SetData(type_id)
  304. local get_str = HtmlColorTxt(have_num, have_num < need_num and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK) .."/".. need_num
  305. self.up_item:SetNumStr("")
  306. self.up_item:IsGetGoods(true, get_str, true)
  307. end
  308. -- 时装战力
  309. local attr_list
  310. if selectList.lv > 0 then
  311. attr_list = stringtotable(selectList.attr_list)
  312. else
  313. attr_list = stringtotable(Config.Childvehicle[selectList.fashion_id .. "@1"].add_attr)
  314. end
  315. local new_fight = "f"..GetFighting(attr_list)
  316. local need_effect = false -- 是否需要属性刷新特效
  317. if check_effect and (self.pre_lv and self.pre_lv < selectList.lv) then
  318. if not self.show_fight_effect then -- 特效
  319. need_effect = true
  320. local function call_back( )
  321. self.show_fight_effect = false
  322. end
  323. self.show_fight_effect = true
  324. self:ClearUIEffect(self.txt_fight)
  325. self:AddUIEffect("ui_jinjieshuxing", self.txt_fight,
  326. self.layer_name, Vector3(-150, 37, 0), 1.3, false, 0.75, nil, call_back)
  327. end
  328. end
  329. self.txt_fight_txt.text = new_fight
  330. self:UpdateRoleModel(selectList, need_effect)
  331. -- 时装属性
  332. local index = 0
  333. if need_effect then -- 特效刷新则滚到最上面
  334. SetLocalPositionY(self.Content_attr, 0)
  335. end
  336. for k,v in pairs(attr_list) do
  337. index = index + 1
  338. local item = self.attr_item_list[k]
  339. if item == nil then
  340. item = ChildDressAttrItem.New(self.Content_attr)
  341. self.attr_item_list[k] = item
  342. end
  343. local num = v[2]
  344. self.attr_item_list[k]:SetData(k,v[1],num, need_effect and index <= 3) -- 只显示前三个
  345. end
  346. -- 设置进阶星星数
  347. local nowLevel = tonumber(selectList.lv)
  348. self.pre_lv = nowLevel
  349. self.levelText_tmp.text = nowLevel
  350. for i = 1, 5 do
  351. if i < nowLevel/2 then
  352. if check_effect and tonumber(self.img_star_list[i].fillAmount) < 1 then
  353. self:PlayStarEffect(self.img_star_list[i].transform, i)
  354. end
  355. self.img_star_list[i].gameObject:SetActive(true)
  356. self.img_star_list[i].fillAmount = 1
  357. elseif (i-1) < nowLevel/2 then -- 最后一个
  358. self.img_star_list[i].gameObject:SetActive(true)
  359. if nowLevel % 2 ~= 0 then -- 单数就是一半
  360. if check_effect and tonumber(self.img_star_list[i].fillAmount) < 0.5 then
  361. self:PlayStarEffect(self.img_star_list[i].transform, i)
  362. end
  363. self.img_star_list[i].fillAmount = 0.5
  364. else
  365. if check_effect and tonumber(self.img_star_list[i].fillAmount) < 1 then
  366. self:PlayStarEffect(self.img_star_list[i].transform, i)
  367. end
  368. self.img_star_list[i].fillAmount = 1
  369. end
  370. else
  371. self.img_star_list[i].gameObject:SetActive(false)
  372. self.img_star_list[i].fillAmount = 0
  373. end
  374. end
  375. -- 穿戴/脱下 按钮
  376. local cur_wear_id = self.model:GetChildVehicleID( )
  377. self.btn_wear_obj:SetActive(cur_wear_id ~= selectList.fashion_id)
  378. self.btn_unwear_obj:SetActive(cur_wear_id == selectList.fashion_id)
  379. -- 按钮红点
  380. if not isMax then
  381. self.btn_upgrade_red_dot_obj:SetActive(have_num >= need_num )
  382. else
  383. self.btn_upgrade_red_dot_obj:SetActive(false)
  384. end
  385. -- -- 技能
  386. local skill_list = self.model:GetChildVehicleSkillList(selectList.fashion_id)
  387. for i=1,#self.skill_item_list do
  388. self.skill_item_list[i]:SetVisible(false)
  389. end
  390. if skill_list then
  391. for k,v in pairs(skill_list) do
  392. local item = self.skill_item_list[k]
  393. if item == nil then
  394. item = ChildVehicleSkillItem.New(self.skill_con)
  395. self.skill_item_list[k] = item
  396. end
  397. self.skill_item_list[k]:SetData(v.fashion_id, v.lv, nowLevel, v.active_skill)
  398. item:SetVisible(true)
  399. end
  400. end
  401. -- 初始化特效
  402. if self.need_check_effect then
  403. self.need_check_effect = false
  404. end
  405. end
  406. -- 播星星点亮特效
  407. function ChildVehicleViewNew:PlayStarEffect( tran, i )
  408. self.showing_star_effect = self.showing_star_effect or {}
  409. if not self.showing_star_effect[i] then
  410. local function call_back( )
  411. self.showing_star_effect[i] = false
  412. end
  413. self:ClearUIEffect(tran)
  414. self:AddUIEffect("ui_jinjiestar", tran, self.layer_name, nil, 1, false, nil, nil, call_back)
  415. self.showing_star_effect[i] = true
  416. end
  417. end
  418. function ChildVehicleViewNew:SwitchTab( index )
  419. end
  420. function ChildVehicleViewNew:DestroySuccess( )
  421. for i, v in ipairs(self.attr_item_list) do
  422. v:DeleteMe()
  423. v = nil
  424. end
  425. self.attr_item_list = {}
  426. for i, v in pairs(self.vehicle_item_list) do
  427. v:DeleteMe()
  428. v = nil
  429. end
  430. self.vehicle_item_list = {}
  431. for i, v in ipairs(self.skill_item_list) do
  432. v:DeleteMe()
  433. v = nil
  434. end
  435. self.skill_item_list = {}
  436. if self.UPDATA_CHILD_VEHICLE_INFO_id then
  437. self.model:UnBind(self.UPDATA_CHILD_VEHICLE_INFO_id)
  438. self.UPDATA_CHILD_VEHICLE_INFO_id = nil
  439. end
  440. if self.updata_child_vehicle_follow_id then
  441. self.model:UnBind(self.updata_child_vehicle_follow_id)
  442. self.updata_child_vehicle_follow_id = nil
  443. end
  444. if self.updata_Child_RED_DOT_VIEW_id then
  445. self.model:UnBind(self.updata_Child_RED_DOT_VIEW_id)
  446. self.updata_Child_RED_DOT_VIEW_id = nil
  447. end
  448. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.up_item)
  449. self.up_item = nil
  450. -- if self.tab_win then
  451. -- self.tab_win:DeleteMe()
  452. -- self.tab_win = nil
  453. -- end
  454. end