源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

320 lines
9.3 KiB

  1. GradeView = GradeView or BaseClass(BaseView)
  2. function GradeView:__init()
  3. self.base_file = "grade"
  4. self.layout_file = "GradeView"
  5. self.layer_name = "UI"
  6. self.close_mode = CloseMode.CloseDestroy
  7. self.destroy_imm = true
  8. self.use_background = true
  9. --
  10. --self.click_bg_toClose = true
  11. self.loop_mgr = LoopScrowViewMgr.New()
  12. self.column_num = 1
  13. self.show_count = 5
  14. self.goods_enough = false
  15. self.fight_enough = false
  16. self.model = MainRoleModel:getInstance()
  17. self.mainVo = RoleManager.Instance.mainRoleInfo
  18. self.item_list = {}
  19. self.pro_item_list = {}
  20. self.load_callback = function()
  21. self:LoadSuccess()
  22. self:InitEvent()
  23. end
  24. self.open_callback = function()
  25. self:LoadRoleInfo()
  26. self:UpdateView()
  27. local function load_end_func()
  28. self:SetGameObjectDepth(self.fightCon_obj)
  29. end
  30. self:AddUIEffect("effect_tubiao_005", self.fight_effect, self.layer_name, Vector3(0,7,0),0.8,true,nil,nil,nil,load_end_func)
  31. end
  32. self.destroy_callback = function()
  33. self:Remove()
  34. end
  35. end
  36. function GradeView:Remove()
  37. self:ClearUIEffect(self.fight_effect)
  38. if self.loop_mgr then
  39. self.loop_mgr:DeleteMe()
  40. self.loop_mgr = nil
  41. end
  42. if self.event_id then
  43. self.model:UnBind(self.event_id)
  44. self.event_id = nil
  45. end
  46. if self.vo_event_fight then
  47. self.mainVo:UnBind(self.vo_event_fight)
  48. self.vo_event_fight = nil
  49. end
  50. if self.vo_event_grade then
  51. self.mainVo:UnBind(self.vo_event_grade)
  52. self.vo_event_grade = nil
  53. end
  54. if self.goodsmodel_event then
  55. GoodsModel:getInstance():UnBind(self.goodsmodel_event)
  56. self.goodsmodel_event = nil
  57. end
  58. if self.token_item then
  59. self.token_item:DeleteMe()
  60. self.token_item = nil
  61. end
  62. for i, v in ipairs(self.item_list) do
  63. v:DeleteMe()
  64. end
  65. self.item_list = {}
  66. for i, v in ipairs(self.pro_item_list) do
  67. v:DeleteMe()
  68. end
  69. self.pro_item_list = {}
  70. end
  71. function GradeView:LoadSuccess()
  72. self.break_btn = self:GetChild("BreakBtn").gameObject
  73. --self.break_image = self:GetChild("BreakBtn"):GetComponent("Image")
  74. self.dot = self:GetChild("BreakBtn/dot").gameObject
  75. self.state = self:GetChild("state"):GetComponent("Text")
  76. self.scroll = self:GetChild("ScrollView")
  77. self.parent = self:GetChild("ScrollView/Viewport/Content")
  78. self.scrRect = self:GetChild("ScrollView"):GetComponent("ScrollRect")
  79. self.roleCon = self:GetChild("rolebgImage/roleCon")
  80. self.role_name = self:GetChild("rolebgImage/name/text"):GetComponent("Text")
  81. self.grade_name = self:GetChild("rolebgImage/name/grade"):GetComponent("Image")
  82. --self.grade_color = self:GetChild("rolebgImage/name/grade"):GetComponent("Outline")
  83. self.fight_obj = self:GetChild("fight_conta").gameObject
  84. self.fightCon_obj = self:GetChild("fight_conta/fightCon").gameObject
  85. self.fight_num = self:GetChild("fight_conta/fightCon/fight"):GetComponent("Text")
  86. self.fight_effect = self:GetChild("fight_conta/fight_effect")
  87. self.property_parent = self:GetChild("property/Content")
  88. self.exp_slider = self:GetChild("consumable/Slider"):GetComponent("Slider")
  89. self.exp_text = self:GetChild("consumable/Slider/Fill Area/text"):GetComponent("Text")
  90. self.bg = self:GetChild("rolebgImage"):GetComponent("Image")
  91. lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("bagBg.jpg"))
  92. self.token_item = ShowIconItem.New(self:GetChild("consumable/consumable"))
  93. self.effect = self:GetChild("effect")
  94. end
  95. function GradeView:InitEvent()
  96. local function onBtnClickHandler(target)
  97. if target == self.break_btn then
  98. if not self.goods_enough then
  99. Message.show("物品不足,无法晋升")
  100. elseif not self.fight_enough then
  101. Message.show("战力不足,无法晋升")
  102. else
  103. self.model:Fire(MainRoleModel.RequestGrade, 16601)
  104. end
  105. end
  106. end
  107. AddClickEvent(self.break_btn,onBtnClickHandler)
  108. local function update_func(grade)
  109. self:AddUIEffect( "UI_jinshengchenggong_1", self.effect, self.layer_name, nil, nil, false)
  110. end
  111. self.event_id = self.model:Bind(MainRoleModel.SetGradeInfo, update_func)
  112. local function update_grade_func()
  113. self:SetState()
  114. end
  115. self.vo_event_grade = self.mainVo:BindOne("grade_id", update_grade_func)
  116. local function update_fight_func()
  117. if self._use_delete_method then return end
  118. self:SetFight()
  119. self:UpdateRedDot()
  120. end
  121. self.vo_event_fight = self.mainVo:BindOne("fighting", update_fight_func)
  122. local function update_cost_func()
  123. if self._use_delete_method then return end
  124. self:SetGoodsCost(self.consumable)
  125. self:UpdateRedDot()
  126. end
  127. self.goodsmodel_event = GoodsModel:getInstance():Bind(GoodsModel.CHANGE_BAGLIST, update_cost_func)
  128. end
  129. function GradeView:LoadRoleInfo()
  130. --人物名称
  131. self.role_name.text = self.mainVo.name
  132. --人物形象
  133. if self.roleCon then
  134. local model_id, texture_id = self.mainVo:GetRoleClotheTextureId()
  135. local weapon_model_id, weapon_texture_id = self.mainVo:GetWeaponClotheId()
  136. local head_model_id,head_clothe_id = self.mainVo:GetRoleHeadId()
  137. lua_resM:SetRoleModel(self,self.roleCon,self.mainVo.career,self.mainVo.sex,self.mainVo:GetRoleClotheId(),weapon_model_id, weapon_texture_id,SceneBaseType.Role,self.layer_name,nil,nil,nil,200,Vector3(0,0,0),model_id, texture_id, nil, nil, nil, nil, nil, self.mainVo.wing_id,self.mainVo.image_id,head_model_id,head_clothe_id)
  138. end
  139. end
  140. function GradeView:UpdateView()
  141. local grade_list = self.model:GetGradeList()
  142. self.curr_list = {}
  143. for k, v in ipairs(grade_list) do
  144. self.curr_list[k] = v
  145. self.curr_list[k].index = k
  146. end
  147. local create_count = math.min(self.show_count, #grade_list)
  148. for k = 1, create_count do
  149. local item = self.item_list[k]
  150. if item == nil then
  151. item = GradeItem.New(self.parent, nil, self.layer_name)
  152. self.item_list[k] = item
  153. end
  154. end
  155. self.loop_mgr:Init(self.scroll, self.parent, self.column_num, 196, 142, function(item,index,realIndex)
  156. self:OnInitializeItem(item,index,realIndex)
  157. end)
  158. self.loop_mgr:InitChildren(self.item_list, #self.curr_list)
  159. self.loop_mgr:RestToBeginning()
  160. self.loop_mgr:SetContentSizeData()
  161. self.cur_grade = Config.Jueweiinfo[self.mainVo.grade_id + 1] and (self.mainVo.grade_id + 1) or self.mainVo.grade_id
  162. if not self.cur_grade then
  163. self.cur_grade = grade_list[1] and grade_list[1].juewei_lv
  164. end
  165. for i, v in ipairs(self.curr_list) do
  166. if v.index == self.cur_grade then
  167. self.loop_mgr:JumpToChild(i - 1)
  168. break
  169. end
  170. end
  171. for k,v in pairs(self.item_list) do
  172. if v.data and v.data.juewei_lv == self.cur_grade then
  173. v:CallBack()
  174. end
  175. end
  176. end
  177. function GradeView:OnInitializeItem(item,index,realIndex)
  178. if item and realIndex > 0 and realIndex <= #self.curr_list then
  179. local call_back = function (data)
  180. for k,v in pairs(self.item_list) do
  181. v:SetSelected(v.data and data.juewei_lv == v.data.juewei_lv)
  182. end
  183. self:SwitchView(data)
  184. end
  185. item:SetData(self.curr_list[realIndex], call_back)
  186. self:UpdateItemState()
  187. end
  188. end
  189. function GradeView:UpdateItemState()
  190. for k,v in pairs(self.item_list) do
  191. if v.data and v.data.juewei_lv == self.cur_grade then
  192. v:SetSelected(true)
  193. else
  194. v:SetSelected(false)
  195. end
  196. end
  197. end
  198. function GradeView:SwitchView(data)
  199. self.data = data
  200. if data == nil then return end
  201. -- local text, color = ""
  202. -- color = ColorUtil:GetGoodsColor(data.color)
  203. -- if color then
  204. -- self.grade_color.effectColor = color
  205. -- end
  206. -- text = "<color=#ffffff>["..Trim(data.juewei_name).."]</color>"
  207. -- self.grade_name.text = text
  208. lua_resM:setImageSprite(self,self.grade_name, "mainUI_asset", "grade_"..self.data.juewei_lv, true)
  209. for i, v in ipairs(self.pro_item_list) do
  210. v:SetVisible(false)
  211. end
  212. local attr_list = ErlangParser.GetInstance():Parse(self.data.attr_list)
  213. self.fight_num.text = GetFighting(attr_list)
  214. if #attr_list > 0 then
  215. for i = 1, #attr_list do
  216. local id = attr_list[i][1]
  217. local value = attr_list[i][2]
  218. local item = self.pro_item_list[i]
  219. if not item then
  220. item = GradeProItem.New(self.property_parent)
  221. self.pro_item_list[i] = item
  222. end
  223. item:SetData(WordManager:GetProperties(tonumber(id)), value, id, (i % 2) ~= 0)
  224. item:SetVisible(true)
  225. end
  226. end
  227. self:SetState()
  228. self:SetFight()
  229. self:SetGoodsCost()
  230. self:UpdateRedDot()
  231. self.cur_grade = self.data.juewei_lv
  232. end
  233. function GradeView:SetState()
  234. if self.data.juewei_lv <= self.mainVo.grade_id then
  235. self.break_btn:SetActive(false)
  236. self.state.text = "<color="..ColorUtil.GREEN..">爵位已激活</color>"
  237. elseif self.data.juewei_lv > (self.mainVo.grade_id + 1) then
  238. self.break_btn:SetActive(false)
  239. self.state.text = "<color="..ColorUtil.RED..">爵位未解锁</color>"
  240. else
  241. self.break_btn:SetActive(true)
  242. self.state.text = ""
  243. end
  244. end
  245. function GradeView:SetGoodsCost()
  246. if self.data then
  247. local consumable = ErlangParser.GetInstance():Parse(self.data.goods_list)
  248. if consumable then
  249. self.token_item:SetVisible(true)
  250. self.token_item:SetItemIcon(ShowIconItem.NORMAL)
  251. self.token_item:SetData(consumable[1][2])
  252. local enough, str = EquipModel:getInstance():GetConsumableNum(consumable[1])
  253. self.token_item:SetItemNum(str)
  254. self.token_item:SetGray(not enough)
  255. self.goods_enough = enough
  256. end
  257. else
  258. self.goods_enough = false
  259. end
  260. end
  261. function GradeView:SetFight()
  262. if self.data then
  263. local fighting = self.mainVo.fighting
  264. if fighting >= self.data.need_power then
  265. fighting = self.data.need_power
  266. end
  267. self.exp_slider.value = fighting / self.data.need_power
  268. self.exp_text.text = fighting.." / "..self.data.need_power
  269. self.fight_enough = self.exp_slider.value == 1
  270. else
  271. self.fight_enough = false
  272. end
  273. end
  274. function GradeView:UpdateRedDot()
  275. self.dot:SetActive(self.goods_enough and self.fight_enough)
  276. end