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
|