|
|
- 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 = "<color=#ffffff>["..Trim(data.juewei_name).."]</color>"
- -- 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 = "<color="..ColorUtil.GREEN..">爵位已激活</color>"
- elseif self.data.juewei_lv > (self.mainVo.grade_id + 1) then
- self.break_btn:SetActive(false)
- self.state.text = "<color="..ColorUtil.RED..">爵位未解锁</color>"
- 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
|