GradeView = GradeView or BaseClass(BaseView) function GradeView:__init() self.base_file = "grade" self.layout_file = "GradeView" self.layer_name = "UI" self.close_mode = CloseMode.CloseDestroy self.destroy_imm = true self.use_background = true -- --self.click_bg_toClose = true self.loop_mgr = LoopScrowViewMgr.New() self.column_num = 1 self.show_count = 5 self.goods_enough = false self.fight_enough = false self.model = MainRoleModel:getInstance() self.mainVo = RoleManager.Instance.mainRoleInfo self.item_list = {} self.pro_item_list = {} self.load_callback = function() self:LoadSuccess() self:InitEvent() end self.open_callback = function() self:LoadRoleInfo() self:UpdateView() local function load_end_func() self:SetGameObjectDepth(self.fightCon_obj) end self:AddUIEffect("effect_tubiao_005", self.fight_effect, self.layer_name, Vector3(0,7,0),0.8,true,nil,nil,nil,load_end_func) end self.destroy_callback = function() self:Remove() end end function GradeView:Remove() self:ClearUIEffect(self.fight_effect) if self.loop_mgr then self.loop_mgr:DeleteMe() self.loop_mgr = nil end if self.event_id then self.model:UnBind(self.event_id) self.event_id = nil end if self.vo_event_fight then self.mainVo:UnBind(self.vo_event_fight) self.vo_event_fight = nil end if self.vo_event_grade then self.mainVo:UnBind(self.vo_event_grade) self.vo_event_grade = nil end if self.goodsmodel_event then GoodsModel:getInstance():UnBind(self.goodsmodel_event) self.goodsmodel_event = nil end if self.token_item then self.token_item:DeleteMe() self.token_item = nil end for i, v in ipairs(self.item_list) do v:DeleteMe() end self.item_list = {} for i, v in ipairs(self.pro_item_list) do v:DeleteMe() end self.pro_item_list = {} end function GradeView:LoadSuccess() self.break_btn = self:GetChild("BreakBtn").gameObject --self.break_image = self:GetChild("BreakBtn"):GetComponent("Image") self.dot = self:GetChild("BreakBtn/dot").gameObject self.state = self:GetChild("state"):GetComponent("Text") self.scroll = self:GetChild("ScrollView") self.parent = self:GetChild("ScrollView/Viewport/Content") self.scrRect = self:GetChild("ScrollView"):GetComponent("ScrollRect") self.roleCon = self:GetChild("rolebgImage/roleCon") self.role_name = self:GetChild("rolebgImage/name/text"):GetComponent("Text") self.grade_name = self:GetChild("rolebgImage/name/grade"):GetComponent("Image") --self.grade_color = self:GetChild("rolebgImage/name/grade"):GetComponent("Outline") self.fight_obj = self:GetChild("fight_conta").gameObject self.fightCon_obj = self:GetChild("fight_conta/fightCon").gameObject self.fight_num = self:GetChild("fight_conta/fightCon/fight"):GetComponent("Text") self.fight_effect = self:GetChild("fight_conta/fight_effect") self.property_parent = self:GetChild("property/Content") self.exp_slider = self:GetChild("consumable/Slider"):GetComponent("Slider") self.exp_text = self:GetChild("consumable/Slider/Fill Area/text"):GetComponent("Text") self.bg = self:GetChild("rolebgImage"):GetComponent("Image") lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("bagBg.jpg")) self.token_item = ShowIconItem.New(self:GetChild("consumable/consumable")) self.effect = self:GetChild("effect") end function GradeView:InitEvent() local function onBtnClickHandler(target) if target == self.break_btn then if not self.goods_enough then Message.show("物品不足,无法晋升") elseif not self.fight_enough then Message.show("战力不足,无法晋升") else self.model:Fire(MainRoleModel.RequestGrade, 16601) end end end AddClickEvent(self.break_btn,onBtnClickHandler) local function update_func(grade) self:AddUIEffect( "UI_jinshengchenggong_1", self.effect, self.layer_name, nil, nil, false) end self.event_id = self.model:Bind(MainRoleModel.SetGradeInfo, update_func) local function update_grade_func() self:SetState() end self.vo_event_grade = self.mainVo:BindOne("grade_id", update_grade_func) local function update_fight_func() if self._use_delete_method then return end self:SetFight() self:UpdateRedDot() end self.vo_event_fight = self.mainVo:BindOne("fighting", update_fight_func) local function update_cost_func() if self._use_delete_method then return end self:SetGoodsCost(self.consumable) self:UpdateRedDot() end self.goodsmodel_event = GoodsModel:getInstance():Bind(GoodsModel.CHANGE_BAGLIST, update_cost_func) end function GradeView:LoadRoleInfo() --人物名称 self.role_name.text = self.mainVo.name --人物形象 if self.roleCon then local model_id, texture_id = self.mainVo:GetRoleClotheTextureId() local weapon_model_id, weapon_texture_id = self.mainVo:GetWeaponClotheId() local head_model_id,head_clothe_id = self.mainVo:GetRoleHeadId() 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) end end function GradeView:UpdateView() local grade_list = self.model:GetGradeList() self.curr_list = {} for k, v in ipairs(grade_list) do self.curr_list[k] = v self.curr_list[k].index = k end local create_count = math.min(self.show_count, #grade_list) for k = 1, create_count do local item = self.item_list[k] if item == nil then item = GradeItem.New(self.parent, nil, self.layer_name) self.item_list[k] = item end end self.loop_mgr:Init(self.scroll, self.parent, self.column_num, 196, 142, function(item,index,realIndex) self:OnInitializeItem(item,index,realIndex) end) self.loop_mgr:InitChildren(self.item_list, #self.curr_list) self.loop_mgr:RestToBeginning() self.loop_mgr:SetContentSizeData() self.cur_grade = Config.Jueweiinfo[self.mainVo.grade_id + 1] and (self.mainVo.grade_id + 1) or self.mainVo.grade_id if not self.cur_grade then self.cur_grade = grade_list[1] and grade_list[1].juewei_lv end for i, v in ipairs(self.curr_list) do if v.index == self.cur_grade then self.loop_mgr:JumpToChild(i - 1) break end end for k,v in pairs(self.item_list) do if v.data and v.data.juewei_lv == self.cur_grade then v:CallBack() end end end function GradeView:OnInitializeItem(item,index,realIndex) if item and realIndex > 0 and realIndex <= #self.curr_list then local call_back = function (data) for k,v in pairs(self.item_list) do v:SetSelected(v.data and data.juewei_lv == v.data.juewei_lv) end self:SwitchView(data) end item:SetData(self.curr_list[realIndex], call_back) self:UpdateItemState() end end function GradeView:UpdateItemState() for k,v in pairs(self.item_list) do if v.data and v.data.juewei_lv == self.cur_grade then v:SetSelected(true) else v:SetSelected(false) end end end function GradeView:SwitchView(data) self.data = data if data == nil then return end -- local text, color = "" -- color = ColorUtil:GetGoodsColor(data.color) -- if color then -- self.grade_color.effectColor = color -- end -- text = "["..Trim(data.juewei_name).."]" -- self.grade_name.text = text lua_resM:setImageSprite(self,self.grade_name, "mainUI_asset", "grade_"..self.data.juewei_lv, true) for i, v in ipairs(self.pro_item_list) do v:SetVisible(false) end local attr_list = ErlangParser.GetInstance():Parse(self.data.attr_list) self.fight_num.text = GetFighting(attr_list) if #attr_list > 0 then for i = 1, #attr_list do local id = attr_list[i][1] local value = attr_list[i][2] local item = self.pro_item_list[i] if not item then item = GradeProItem.New(self.property_parent) self.pro_item_list[i] = item end item:SetData(WordManager:GetProperties(tonumber(id)), value, id, (i % 2) ~= 0) item:SetVisible(true) end end self:SetState() self:SetFight() self:SetGoodsCost() self:UpdateRedDot() self.cur_grade = self.data.juewei_lv end function GradeView:SetState() if self.data.juewei_lv <= self.mainVo.grade_id then self.break_btn:SetActive(false) self.state.text = "爵位已激活" elseif self.data.juewei_lv > (self.mainVo.grade_id + 1) then self.break_btn:SetActive(false) self.state.text = "爵位未解锁" else self.break_btn:SetActive(true) self.state.text = "" end end function GradeView:SetGoodsCost() if self.data then local consumable = ErlangParser.GetInstance():Parse(self.data.goods_list) if consumable then self.token_item:SetVisible(true) self.token_item:SetItemIcon(ShowIconItem.NORMAL) self.token_item:SetData(consumable[1][2]) local enough, str = EquipModel:getInstance():GetConsumableNum(consumable[1]) self.token_item:SetItemNum(str) self.token_item:SetGray(not enough) self.goods_enough = enough end else self.goods_enough = false end end function GradeView:SetFight() if self.data then local fighting = self.mainVo.fighting if fighting >= self.data.need_power then fighting = self.data.need_power end self.exp_slider.value = fighting / self.data.need_power self.exp_text.text = fighting.." / "..self.data.need_power self.fight_enough = self.exp_slider.value == 1 else self.fight_enough = false end end function GradeView:UpdateRedDot() self.dot:SetActive(self.goods_enough and self.fight_enough) end